Rust · Go · C++

Der Engpass wird neu entwickelt. Der Rest bleibt, wie er ist.

Die langsame oder unsichere Komponente entwickeln wir in Rust, Go oder C++ neu, mit Quellcode und Messung gegen den vereinbarten Zielwert.

Komponente beschreiben

BEISPIEL

Vorher und nachher

  • VORHER

    Parser in C++

    Liest Datenpakete von Messgeräten ein. Er ist schnell, aber anfällig für Speicherfehler wie Buffer Overflows und Use-after-free.

  • IHRE ANGABEN

    Code und Zielwert

    Der bestehende Code, Beispiel-Eingaben und ein Zielwert für die Verarbeitungszeit.

  • NACHHER

    Derselbe Parser in Rust

    Gleiche Schnittstelle, gleiches vereinbartes Verhalten, Speicherzugriffe prüft der Rust-Compiler beim Kompilieren. Die Verarbeitungszeit wird gegen den Zielwert gemessen.

Beispielhafte Darstellung eines möglichen Vorhabens.

BEREITS UMGESETZT · AUS UNSEREM PARTNERNETZWERK

Eine Web-Plattform von Aspirits läuft produktiv auf Kubernetes mit Multi-Zone-PostgreSQL und ist mit k6 und 500 virtuellen Nutzern lastgetestet.

Wann sich eine Neuentwicklung lohnt

  • Eine bekannte Komponente erreicht unter Last die Zielwerte nicht.
  • Der Speicherverbrauch wächst mit der Datenmenge.
  • C- oder C++-Code soll speichersicher werden.
  • Ein Dienst soll deutlich mehr Anfragen oder Geräte bedienen.

Voraussetzung ist, dass sich die Komponente klar abgrenzen lässt.

Rust, Go oder C++

SpracheWofür
RustWo Speichersicherheit zählt. Use-after-free und Data Races verhindert Rust bereits beim Kompilieren.
GoFür Dienste mit hoher Nebenläufigkeit, etwa APIs und Datenpipelines.
C++Wo bestehender C++-Code optimiert wird oder die Umgebung C++ voraussetzt.

In vier Schritten zur neuen Komponente

  1. 1 Tests

    Wenn geeignete Tests fehlen, klären wir vorab, welche Prüfungen für die Umstellung erforderlich sind, und vereinbaren deren Umfang. Die vereinbarten Prüfungen bilden die Grundlage, an der die Änderungen gemessen werden.

  2. 2 Benchmark

    Ein Benchmark misst die heutige Leistung. Daraus ergibt sich, ob der Zielwert erreichbar ist.

  3. 3 Neuentwicklung

    Die Komponente entsteht neu, mit denselben Schnittstellen nach außen.

  4. 4 Vergleich

    Alter und neuer Code laufen mit denselben Eingaben. Abgenommen wird, wenn das vereinbarte Verhalten und der Zielwert erreicht sind.

Zum Beispiel auch einzeln

  • Komponente optimieren

    Ohne Sprachwechsel, bis zum vereinbarten Zielwert.

  • Neuer Dienst für hohe Last

    Zum Beispiel für Daten vieler Geräte gleichzeitig, geprüft mit einem Lasttest.

  • Werkzeug oder Bibliothek

    Für die Kommandozeile oder zum Einbinden, mit den vereinbarten Tests.

  • Tests und Benchmark

    Automatisierte Tests für bestehenden Code und ein Benchmark der heutigen Leistung.

Neue Softwaremodule und Schnittstellen: Software & Schnittstellen →

Häufige Fragen

Lohnt sich die Migration von C++ nach Rust?
Wenn der Code sicherheitskritisch ist und sich abgrenzen lässt, ja.
Wie stellen Sie sicher, dass die Software nach der Umstellung richtig funktioniert?
Wir legen vorab fest, welches Verhalten erhalten bleiben muss und welche Ergebnisse geprüft werden.
Was, wenn es keine automatisierten Tests gibt?
Dann klären wir vorab, welche Prüfungen für die Umstellung erforderlich sind, und vereinbaren deren Umfang.
Aus welchen Sprachen stellen Sie um?
Häufig aus Python, C oder C++. Andere Ausgangssprachen prüfen wir vorab.
Was, wenn der Zielwert nicht erreichbar ist?
Das zeigt in der Regel schon der Benchmark vor Beginn. Dann wird der Zielwert vor Beginn angepasst.
Lässt sich der neue Teil in unsere bestehende Software einbinden?
Häufig lässt sich eine neue oder überarbeitete Komponente in bestehende Software integrieren. Das prüfen wir vorab.

Wie Umfang, Prüfung und Übergabe geregelt sind: So arbeiten wir →

Welche Komponente bremst?

Schreiben Sie kurz, um welche Komponente es geht und was sie leisten soll. Ich melde mich innerhalb eines Werktags.

Stephanie Escarciga · +49 15679 281048Mo–Fr 7 bis 18 Uhr

Komponente beschreiben