-
Notifications
You must be signed in to change notification settings - Fork 9
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add KISTERS case study #2637
base: master
Are you sure you want to change the base?
Add KISTERS case study #2637
Changes from all commits
550b097
2b0a11b
6143cdd
e8f417e
58b4a79
f881fbc
d061573
b16909c
87d4367
b9dd5c6
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,11 +1,72 @@ | ||
--- | ||
layout: case-study | ||
company: POELLATH | ||
problem: KISTERS was looking for a way to move load transparently between their servers, edge functions, and users' browsers. | ||
solution: We developed a prototype tool for them that runs the same Rust code on the server, edge function, and browsers via WebAssembly. | ||
tags: Launch your idea | ||
description: <p>KISTERS are experts in environmental monitoring, IT and data management</p><p>We developed a prototype tool for them that runs the same Rust code on the server as well as on an edge function and in the browser via WebAssembly.</p> | ||
company: KISTERS | ||
problem: KISTERS wanted to handle traffic spikes by dynamically moving computation to different platforms. | ||
solution: We created a data-processing package suitable for server, edge, and WASM. | ||
tags: Team Reinforcement | ||
title: Dynamically switching execution platforms with Rust | Work | ||
displayTitle: "Dynamically switching execution platforms with Rust" | ||
description: <p>KISTERS builds solutions for collecting, analyzing, and providing information based on environmental data. The HydroMet division provides software that helps warn people of upcoming floods using data obtained from numerous sensor devices deployed across the globe.</p> | ||
hero: | ||
tags: "architecture / Rust / WASM" | ||
permalink: false | ||
color: purple | ||
image: "/assets/images/work/kisters-background.jpg" # TODO | ||
imageAlt: "TODO" # TODO | ||
tags: "development / architecture / Rust" | ||
og: | ||
image: /assets/images/cases/cs-kisters-og-image.jpg # TODO | ||
--- | ||
|
||
{% from "image-aspect-ratio.njk" import imageAspectRatio %} {% from "quote.njk" import quote %} | ||
|
||
<div class="case-study__section"> | ||
<h3 class="case-study__heading">About KISTERS</h3> | ||
<div class="case-study__text"> | ||
<p><a href="http://kisters.eu/">KISTERS</a> provides software for collecting and analyzing environmental data.<br> | ||
In particular, they provide solutions to warn people of upcoming floods using data obtained from numerous sensor devices deployed throughout the globe.</p> | ||
</div> | ||
</div> | ||
|
||
<div class="case-study__section"> | ||
<h3 class="case-study__heading">The challenge</h3> | ||
<div class="case-study__text"> | ||
<p>KISTERS needed the ability to dynamically move computation between traditional servers and edge functions, or offloading to end-user devices. That way, they would be able to <strong>handle large traffic spikes efficiently without risking astronomic cloud expenses</strong></p> | ||
<p>The large amounts of data KISTERS obtains from sensor devices need processing to become useful for analysis. Filtering, grouping, and post-processing, depend on dynamic inputs and need to be carried out on demand.</p> | ||
<p>That in and of itself warrants a well-optimized design and use of performant technologies, but in times of calamity, <strong>the amount of users requesting information may rise quickly</strong>: residents of endangered areas can use KISTERS’ software to obtain real-time information regarding their situation.</p> | ||
</div> | ||
</div> | ||
|
||
<div class="case-study__section"> | ||
<h3 class="case-study__heading">How Mainmatter helped out</h3> | ||
<div class="case-study__text"> | ||
<p>Mainmatter proposed and implemented an architecture that isolates the data processing implementation in a platform-independent package written in Rust.<p> | ||
<p>That package can be thinly wrapped for use in a web server, run as an edge function, or compiled to Web Assembly (WASM) for execution in browsers. All of these different environments run the same efficient code with close to no duplication.</p> | ||
</div> | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I think we should explain a bit how Rust and WASM allow for this easily: reusing the same code in these different environments while writing code that's super fast and efficient (which is the reason why e.g. JS which would also have been usable in those 3 environments, was not really an option) There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. The next section mentions the requirement of high performance. I'd like the 'How Mainmatter helped out' to focus on describing at a high level what we did, and then 'technology' to detail the design choices made |
||
</div> | ||
|
||
<section class="mt-5"> | ||
<!-- TODO add image for KISTERS --> | ||
{% set imageData = { | ||
"imgPath": "/assets/images/work/kisters-graph.png", | ||
"alt": "TODO", | ||
"sizes": "100vw", | ||
"loading": "lazy", | ||
"sizesArray": [760, 1440, 1920] | ||
} %} | ||
{{ imageAspectRatio(imageData, "32/13", "35/19") }} | ||
</section> | ||
|
||
<div class="case-study__section"> | ||
<h3 class="case-study__heading">Technology</h3> | ||
<div class="case-study__text"> | ||
<p></p> | ||
<p>Rust, with its strong performance and stability characteristics and solid WASM support, was a natural choice as a language with which to implement the design. What’s more, <a href="https://pola.rs/">Polars</a>, the famous high-performance open-source data frame manipulation library, is implemented in Rust itself and easily usable in Rust projects including those targeting WASM.</p> | ||
</div> | ||
</div> | ||
|
||
<div class="case-study__section"> | ||
<h3 class="case-study__heading">Aftercare</h3> | ||
<div class="case-study__text"> | ||
<p>Upon finishing and delivering the proof-of-concept, Mainmatter provided guidance to KISTERS' team on integrating the code into their platform.</p> | ||
<p>Mainmatter has reviewed and optimized the integration code during several pairing sessions with KISTERS’ engineering team, ensuring the delivery of both the product and the technical knowledge required to maintain and expand it.</p> | ||
</div> | ||
</div> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think this could be more straightforward – it seems we're first saying they wanted to move transparently between server, edge, browser; then we talk about sth. else; than we go back to the topic of reusing code.