Skip to content

Commit

Permalink
Add KISTERS case study
Browse files Browse the repository at this point in the history
  • Loading branch information
hdoordt committed Feb 17, 2025
1 parent 95f1c8b commit 550b097
Show file tree
Hide file tree
Showing 2 changed files with 74 additions and 6 deletions.
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
---

{% 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>Based in Aachen, Germany, <a href="http://kisters.eu/">KISTERS</a> provides software for collecting, analyzing, and providing information based on environmental data.<br>
The department we’ve been working with provides solutions that can help 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>With big data comes big computation. 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>The data KISTERS obtains from their sensor devices is packaged in large <a href="https://en.wikipedia.org/wiki/Apache_Parquet">parquet files</a> and needs processing to become useful for analysis.<br>
The concrete steps taken in filtering, grouping, and post-processing depend on dynamic inputs reflecting the needs of KISTERS’ clients. These processing steps can, therefore, not simply be executed in batches during nightly computations; they need to be carried out on user demand.</p>
<p>That in and of itself warrants a well-optimized design, 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 traffic spikes</strong>, 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>
</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.</p>
</div>
</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>Given the requirement of <strong>high performance, 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 architecture.<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>

0 comments on commit 550b097

Please sign in to comment.