Wir bauen celld, eine Runtime für Cloudflare Workers und Durable Objects-Anwendungen auf Ihren eigenen Maschinen. Es kann mit einem S3-kompatiblen Objektspeicher als einziger externer Dienstabhängigkeit ausgeführt werden.
celld ist ein verteiltes System. Zuverlässige verteilte Systeme schwer zu machen, teilweise weil wir unbeabsichtigt Annahmen verlassen, die in der Praxis nicht halten, selbst wenn wir die Fallen kennen. Peters Deutschs Die acht Trugschlüsse der verteilten Berechnung listet acht solche Annahmen auf, darunter "Das Netz ist zuverlässig" und "Latenz ist null."
Ein Bug kann von einer bestimmten Sequenz verzögerter Nachrichten, fehlgeschlagener Schreibvorgänge und Node-Restarts abhängen. Diese Ereignisse können beim nächsten Testlauf in einer anderen Reihenfolge auftreten, was die Fehlerwiedergabe schwierig macht. Wir müssen in der Lage sein, den fehlgeschlagenen Lauf erneut durchzuführen, um die Ursache zu untersuchen und zu prüfen, ob ein vorgeschlagener Fix das Problem wirklich löst. Deshalb verwenden wir deterministische Simulationstests (DST).
Unser Simulator befindet sich noch in der Entwicklung und ist nicht im öffentlichen Repository von celld enthalten, hat aber bereits zuvor unbekannte Bugs gefunden. In diesem Artikel gehen wir darauf ein, wie DST in celld funktioniert und wie es uns geholfen hat, einen dieser Bugs zu finden, nachzuvollziehen und zu beheben. DST führt celld-Produktionscode in einer durch einen Simulator gesteuerten Umgebung aus. Eine Zelle in celld führt Anwendungscode aus und besitzt ihre eigene SQLite-Datenbank. Während Zellen arbeiten, verarbeitet celld Ereignisse wie eingehende Anfragen, abgeschlossene Speicheroperationen und Timer-Auslösungen. Der Code, der das nächste Ereignis auswählt, ist vom Code getrennt, der es verarbeitet. Dies ermöglicht dem Simulator, die Ereignisreihenfolge zu steuern, während derselbe Ereignishandhabungs-Code wie in der Produktion ausgeführt wird.
Quelle: Hacker News · Zusammengefasst von HeadlinesBriefing