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.
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++
| Sprache | Wofür |
|---|---|
| Rust | Wo Speichersicherheit zählt. Use-after-free und Data Races verhindert Rust bereits beim Kompilieren. |
| Go | Fü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 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 Benchmark
Ein Benchmark misst die heutige Leistung. Daraus ergibt sich, ob der Zielwert erreichbar ist.
3 Neuentwicklung
Die Komponente entsteht neu, mit denselben Schnittstellen nach außen.
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