Skip to content
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

Open
wants to merge 10 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions src/_data/footerNavigation.json
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,10 @@
{
"text": "Aleph Alpha",
"link": "/cases/aleph-alpha/"
},
{
"text": "KISTERS",
"link": "/cases/kisters/"
}
]
},
Expand Down
76 changes: 70 additions & 6 deletions src/cases/kisters.md
Original file line number Diff line number Diff line change
@@ -1,11 +1,75 @@
---
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.
company: KISTERS
problem: KISTERS wanted to use Rust's cross-platform support to its full potential.
solution: We created a data processing package suitable for server, edge, and WASM.
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>
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.</p><p>The department we’ve been working with provides software that can help warn people of upcoming floods using data obtained from numerous sensor devices deployed throughout the globe.</p>
hero:
tags: "architecture / Rust / WASM"
permalink: false
color: purple
image: "/assets/images/work/aleph-alpha-background-2.jpg" # TODO
imageAlt: "TODO" # TODO
tags: "development / architecture / Rust"
og:
image: /assets/images/cases/cs-aleph-alpha-og-image.jpg # TODO
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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 wanted to <strong>handle large traffic spikes by dynamially switching</strong> between serving from a traditional server, from an edge function, or by offloading cumputation to end user's devices.</p>
<p>Why? Well, the data KISTERS obtains from their sensor devices needs processing to become useful for analysis. The concrete processing steps taken, such as filtering, grouping, and post-processing, depend on dynamic inputs reflecting the needs of KISTERS’ clients. Therefore, they need to be carried out on user 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>
<p><strong>To handle large demand efficiently</strong>, without risking astronomic cloud expenses, KISTERS’ sought to employ a design that would allow them to <strong>quickly deploy their data processing to edge functions</strong> and, in case of extreme traffic surges, allow the processing steps to be <strong>run within the browser</strong> on end user’s devices.</p>
</div>
Copy link
Member

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.

</div>

<div class="case-study__section">
<h3 class="case-study__heading">How Mainmatter helped out</h3>
<div class="case-study__text">
<p>During an initial development cycle, Mainmatter proposed and implemented an architecture that isolates the implementation of the data processing steps in a platform-independent package.<p>
<p>That way, the package can be thinly wrapped for use by a web server, served as an edge function, or compiled to Web Assembly for execution in browsers, guaranteeing application behavior on different platforms to be equal.</p>
</div>
Copy link
Member

Choose a reason for hiding this comment

The 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)

Copy link
Member Author

Choose a reason for hiding this comment

The 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/aleph-alpha-graphs.jpg",
"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>Given the requirements of <strong>efficiency, high availability, cross-platform code sharing</strong>, and the need for <strong>integration with their current software</strong>, Rust was a natural choice as a language with which to implement the design.<br>
What’s more, <a href="https://pola.rs/">Polars</a>, the famous high-performance open-source data frame manipulation library, is implemented in Rust and <a href="https://crates.io/crates/polars">published</a> on Rust’s package registry, allowing our engineers to <strong>trivially import it as a dependency</strong> in their application and reap the <strong>benefits of executing data processing in Rust</strong>.</p>
<p>Rust has proven to be an excellent basis for developing performant applications that are required to run on multiple platforms, including the end user’s browser.</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 their team on integrating it into KISTERS’ platform.</p>
<p>Mainmatter has reviewed and optimized the integration code during several pairing sessions, ensuring that not just the product but also the knowledge required to maintain and expand it is transferred to KISTERS’ engineering team.</p>
</div>
</div>