Deterministic Simulation Testing in Celld
🇬🇧 English
We are building celld, a runtime for Cloudflare Workers and Durable Objects applications on your own machines. It can run with an S3-compatible object store as its only external service dependency.
celld is a distributed system. Making distributed systems reliable is hard, partly because we can unintentionally rely on assumptions that don’t hold in practice, even when we know the pitfalls. Peter Deutsch’s The Eight Fallacies of Distributed Computing lists eight such assumptions, including “The network is reliable” and “Latency is zero.”
A bug can depend on a particular sequence of delayed messages, failed writes, and node restarts. Those events can happen in a different order on the next test run, making the failure difficult to reproduce. We need to be able to repeat the failing run so we can investigate the cause and check whether a proposed fix really resolves the problem. That is why we use deterministic simulation testing (DST).
Our simulator is still under development and is not included in celld’s public repository, but it has already found previously unknown bugs. In this article, we’ll walk through how DST works in celld and how it helped us find, reproduce, and fix one of those bugs. DST runs celld’s production code in an environment controlled by a simulator. A cell in celld runs application code and has its own SQLite database. As cells do their work, celld handles events such as incoming requests, completed storage operations, and timer firings. The code that selects the next event is separate from the code that handles it. This lets the simulator control the order of events while running the same event-handling code as in production.
🇸🇦 العربية
اختبار المحاكاة المحدد في celld
نحن نبني celld، وقت تشغيل لتطبيقات Cloudflare Workers و Durable Objects على أجهزتك الخاصة. يمكنه العمل مع almacén de objetos compatible con S3 كخدمة خارجية الوحيدة.
celld نظام distribúted. جعل الأنظمة distribúted موثوقة困难، جزئياً لأننا قد نعتمد بشكل غير قصد على suppositions لا تحمل في الواقع، حتى ونحن نعرف الفخاخ. قائمة Peter Deutsch ثمانية أخطاء الحوسبة distribúted تذكر ثمانية suppositions مثل "الشبكة موثوقة" و "التأخير صفر".
يمكن أن يعتمد bug على تسلسل محدد من الرسائل المؤجلة، والكتابة الفاشلة، وإعادة تشغيل العقد. يمكن أن تحدث هذه الأحداث بترتيب مختلف في التشغيل التجريبي التالي، مما يجعل الفشل صعب إعادة إنتاجه. نحتاج إلى القدرة على تكرار التشغيل الفاشل حتى نتمكن من التحقيق في السبب والتحقق مما إذا كان الاقتراح الإصلاح حقاً يحل المشكلة. ولهذا السبب نستخدم الاختبار المحاكي المحدد (DST).
لا يزال لدينا simulator قيد التطوير ولا يوجد في مستودع celld العام، ولكنه قد عثر بالفعل على أخطاء لم تُعرف من قبل. في هذا المقال، سنمر عبر كيفية عمل DST في celld وكيف ساعدنا في العثور على خطأ واحد، وإعادة إنتاجه، وتصحيحه. يعمل DST على تشغيل كود الإنتاج الخاص بـ celld في بيئة خاضعة للتحكّم من قبل المحاكي. تعمل خلية في celld على تشغيل كود التطبيق ولديها herown قاعدة بيانات SQLite. مع قيام الخلايا بعملها، يقوم celld بمعالجة أحداث مثل الطلبات الواردة، وإتمام عمليات التخزين، وتشغيل المؤقتات. الكود الذي يختار الحدث التالي هو منفصل عن الكود الذي يتعامل معه. هذا يسمح للمحاكي بالتحكم في ترتيب الأحداث أثناء تشغيل نفس كود التعامل مع الأحداث الذي يعمل في الإنتاج.
ما هو اختبار المحاكاة المحدد (DST) ولماذا يستخدمه celld؟
يعمل DST على تشغيل كود الإنتاج الخاص بـ celld في بيئة خاضعة للتحكّم من قبل المحاكي، مما يسمح للفريق باستكشاف أوامر مختلفة لتنفيذ الأحداث، وإعادة إنتاج الأخطاء بذات البذرة، والتحقق من التصحيحات قبل النشر.
🇧🇩 বাংলা
celld-তে নির্ধারিত সিমুলেশন টেস্টিং
আমরা celld তৈরি করছি, ক্লাউডফ্লার Workers এবং Durable Objects অ্যাপ্লিকেশন জন্য রানটাইম, যা আপনার নিজস্ব মেশিনে রান করে। এটি S3-সঙ্গত oggetto স্টোরেজকে একমাত্র বাহ্যিক সেবা নির্ভরতা হিসেবে चला सकता है।
celld একটি বিতরণ系统। বিশ্বস্ত বিতরণ系统 তৈরি করা কঠিন, আংশিক কারণ আমরা অনুবদনমূলকভাবে ধারণা পর rely করি যা বাস্তবায়নে না টিকTok, তবু আমরা কেনা আছে। Peter Deutschের ডিস্ট্রিবিউটেড গণনা八大谬误 তে八个 এই ধারণাগুলোর মধ্যে "নেটওয়ার্ক reliable" এবং "লেটেন্সি শূন্য" অন্তর্ভুক্ত রয়েছে।
একটি বাগ একটি নির্দিষ্ট দেয়াল message sequence, ফailed লেখা এবং নোড রিস্টার্টের উপর নির্ভর করতে পারে। এই ইভেন্টs পরবর্তী পরীক্ষার রানে বিভিন্ন ক্রমে ঘটতে পারে, তাই বাগটি পুনরুদ্ধার করা কঠিন হতে পারে। আমাদের কাছে ফেলে ফেলে রান পুনরুদ্ধার করার ক্ষমতা হতে হবে যাতে আমরা কারণ পরীক্ষা করতে পারি এবং যাচাই করতে পারি কি একটি প্রস্তাবিত সলিউশন skutefully সমস্যা সমাধান করে। তাই আমরা নিশ্চিত সিমুলেশন টেস্টিং (DST) ব্যবহার করি।
আমাদের সিমুলেটর এখন উন্নয়নে আছে এবং celld-এর পাবলিক ভান্ডারয়ে অন্তর্ভুক্ত নেই, কিন্তু এটি আগের অজানা বগুAlready খুঁজে পেছে। এই লেখায়, আমরা celld-তে DST কীভাবে কাজ করে এবং এটি কীভাবে আমাদের celld-তে একটি বগু খুঁজে পেতে, পুনরুদ্ধার করতে এবং তা সুলভ করতে সাহায্য করেছে, এর মাধ্যমে চলব। DST celld-এরproduction code-কে একটি সিমুলেটর-নিয়ন্ত্রিত পরিবেশে চালায়। celld-তে একটি cell অ্যাপ্লিকেশন কোড চালায় এবং তার নিজস্ব SQLite ডেটাবেস আছে। cell-এর কাজ করলে celld ইভেন্ট যেমন ইনকামিং অনুরোধ, সম্পন্ন স্টোরেজ অপারেশন, এবং টাইমার ট্রিগার পরিচালনা করে। পরবর্তী ইভেন্ট নির্বাচনকারী কড, এটি হ্যান্ডলিং কোড থেকে আলাদা। এটি সিমুলেটরকে production-এ একই ইভেন্ট হ্যান্ডলিং কোড চালায় terwijl সিমুলেটর ইভেন্টের ক্রম নিয়ন্ত্রণ করতে দেয়।
নিশ্চিত সিমুলেশন টেস্টিং (DST) কী এবং celld এটি ব্যবহার কেন?
DST celld-এরproductjon code-কে একটি সিমুলেটর-নियंत्रিত পরিবেশে চালায়, যা টিমকে ইভেন্ট এক্সিকিউশন অর্ডার বিভিন্ন অন্বেষণ করতে,fixed বীজ সহ বাগ পুনরুদ্ধার করতে এবং তैनিপ্লেশনের আগে সলিউশন যাচাই করতে দেয়.
🇩🇪 Deutsch
Deterministische Simulationstests in celld
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.
Was ist deterministische Simulationstests (DST) und warum verwendet celld es?
DST führt celld-Produktionscode in einer durch einen Simulator gesteuerten Umgebung aus, sodass das Team verschiedene Ereignisausführungsreihenfolgen erkunden, Fehler mit fester Seed-Wiederholung nachvollziehen und Korrekturen vor dem Deployment überprüfen kann.
🇪🇸 Español
Aplicación de simulación determinista en celld
Estamos construyendo celld, un runtime para aplicaciones Cloudflare Workers y Durable Objects en tus propias máquinas. Puede ejecutarse con un almacén de objetos S3-compatible como única dependencia externa.
celld es un sistema distribuido. Hacer que los sistemas distribuidos sean confiables es difícil, parcialmente porque podemos depender involuntariamente de suposiciones que no se mantienen en la práctica, incluso cuando conocemos los peligros. La lista de Peter Deutsch los ocho errores del cómputo distribuido enumera ocho suposiciones tales como "The network is reliable" y "Latency is zero."
Un error puede depender de una secuencia particular de mensajes retrasados, escrituras fallidas y reinicios de nodos. Estos eventos pueden ocurrir en un orden diferente en la próxima ejecución de pruebas, lo que dificulta la reproducción del fallo. Necesitamos poder repetir la ejecución fallida para investigar la causa y comprobar si una propuesta de corrección realmente resuelve el problema. Por eso usamos simulación determinista (DST).
Nuestro simulador aún está en desarrollo y no está incluido en el repositorio público de celld, pero ya ha encontrado errores previamente desconocidos. En este artículo, recorreremos cómo funciona DST en celld y cómo nos ayudó a encontrar, reproducir y corregir uno de esos errores. DST en un entorno controlado por un simulador ejecuta el código de producción de celld. Una celda en celld ejecuta código de aplicación y tiene su propia base de datos SQLite. A medida que las celdas realizan su trabajo, celld maneja eventos como solicitudes entrantes, operaciones de almacenamiento completadas y disparos de temporizadores. El código que selecciona el siguiente evento está separado del código que lo maneja. Esto permite al simulador controlar el orden de los eventos mientras se ejecuta el mismo código de manejo de eventos que en producción.
¿Qué es la simulación determinista (DST) y por qué usa celld?
DST ejecuta el código de producción de celld en un entorno controlado por un simulador, lo que permite al equipo explorar diferentes órdenes de ejecución de eventos, reproducir fallos con una semilla fija y verificar correcciones antes del despliegue.
🇫🇷 Français
Tests de simulation déterministe dans celld
Nous construisons celld, un runtime pour les applications Cloudflare Workers et Durable Objects sur vos propres machines. Il peut s'exécuter avec un magasin d'objets compatible S3 comme seule dépendance de service externe.
celld est un système distribué. Fabriquer des systèmes distribués fiables est difficile, en partie parce que nous pouvons dépendre involontairement d'hypothèses qui ne se maintiennent pas en pratique, même lorsque nous connaissons les pièges. La liste de Peter Deutsch les huit erreurs du calcul distribué répertorie huit telles hypothèses, notamment "Le réseau est fiable" et "La latence est zéro."
Un bug peut dépendre d'une séquence particulière de messages retardés, d'écritures échouées et de redémarrages de nœuds. Ces événements peuvent se produire dans un ordre différent lors de la prochaine exécution des tests, rendant l'échec difficile à reproduire. Nous devons être capables de répéter l'exécution échouée afin que nous puissions enquêter sur la cause et vérifier si une proposition de correction résout vraiment le problème. C'est pourquoi nous utilisons la simulation déterministe (DST).
Notre simulateur est encore en développement et n'est pas inclus dans le dépôt public de celld, mais il a déjà trouvé des bugs précédemment inconnus. Dans cet article, nous passerons en revue comment fonctionne la DST dans celld et comment elle nous a aidés à trouver, reproduire et corriger l'un de ces bugs. La DST fait tourner le code de production de celld dans un environnement contrôlé par un simulateur. Une cellule dans celld exécute du code d'application et possède sa propre base de données SQLite. Au fur et à mesure que les cellules effectuent leur travail, celld gère des événements tels que des requêtes entrantes, des opérations de stockage terminées et des déclencheurs de minuterie. Le code qui sélectionne l'événement suivant est séparé du code qui le gère. Cela permet au simulateur de contrôler l'ordre des événements tout en exécutant le même code de gestion d'événements que en production.
Qu'est-ce que la simulation déterministe (DST) et pourquoi celld l'utilise-t-il ?
La DST fait tourner le code de production de celld dans un environnement contrôlé par un simulateur, ce qui permet à l'équipe d'explorer différents ordres d'exécution d'événements, de reproduire des pannes avec une graine fixe, et de valider les correctifs avant le déploiement.
🇮🇳 हिन्दी
celld में निश्चितता पूर्ण सिमुलेशन टेस्टिंग
हम celld का निर्माण कर रहे हैं, जो आपके स्वयं के मशीनों पर Cloudflare Workers और Durable Objects एप्लिकेशन के लिए एक रनटाइम है। यह S3-संगत वस्तु भंडार को अपनी एकमात्र बाहरी सेवा निर्भरता के रूप में चला सकता है।
celld एक वितरित प्रणाली है। विश्वसनीय वितरित प्रणाली बनाना कठिन है, आंशिक रूप से क्योंकि हम अनजाने में उन मान्यताओं पर निर्भर हो सकते हैं जो व्यावहारिक रूप से लागू नहीं होतीं, भले ही हम खतरों को जानते हों। Peter Deutsch के वितरित गणना के आठ भूलों में आठ ऐसी मान्यताओं का उल्लेख है, जिसमें "नेटवर्क विश्वसनीय है" और "शून्य विलंबता" शामिल है।
एक बग एक विशेष देरी वाले संदेशों की secuencia, failed लिखताओं, और नोड पुनरारंभ की secuencia पर निर्भर कर सकता है। इन घटनाओं अगली परीक्षण चलाने में अलग क्रम में हो सकती हैं, जिससे खराबी को पुन: उत्पन्न करना कठिन हो सकता है। हमें विफल चलाने को दोहराने में सक्षम होने की आवश्यकता है ताकि हम कारण की जांच कर सकें और यह जांच सकें कि एक प्रस्तावित सुधार वास्तव में समस्या को हल करता है। यही कारण है कि हम निश्चितता पूर्ण सिमुलेशन टेस्टिंग (DST) का उपयोग करते हैं।
हमारा सिमुलेटर अभी विकास के तहत है और celld के सार्वजनिक भंडार में शामिल नहीं है, लेकिन इसने पहले से ही अज्ञात बग खोज लिए हैं। इस लेख में, हम DST कि celld में कैसे काम करता है और इसने हमें उन बग को खोजने, पुन: उत्पन्न करने और ठीक करने में कैसे मदद की, के माध्यम से चलेंगे। DST एक सिमुलेटर के नियंत्रित वातावरण में celld के उत्पादन कोड चलाता है। celld में एक cell एप्लिकेशन कोड चलाता है और उसके पास अपना SQLite डेटाबेस होता है। जैसे-जैसे cell अपना काम करते हैं, celld घटनाओं जैसे प्रवेश अनुरोध, पूरी भंडार ऑपरेशन, और टाइमर ट्रिगर का निपटान करता है। अगला घटना चुनने वाला कोड इसे संभालने वाले कोड से अलग होता है। इससे सिमुलेटर को उत्पादन में उसी घटना संभालने वाले कोड चलाते हुए घटनाओं के क्रम को नियंत्रित करने की अनुमति मिलती है।
निश्चितता पूर्ण सिमुलेशन टेस्टिंग (DST) क्या है और celld इसका उपयोग क्यों करता है?
DST celld के उत्पादन कोड को एक सिमुलेटर-नियंत्रित वातावरण में चलाता है, जिससे टीम को घटनाओं के निष्पादन क्रम का पता लगाने, निश्चित बीज के साथ बग को पुन: उत्पन्न करने और तैनाती से पहले सुधारों की पुष्टि करने की अनुमति मिलती है।
🇮🇩 Bahasa Indonesia
Pengujian simulasi deterministik pada celld
Kami sedang membangun celld, runtime untuk aplikasi Cloudflare Workers dan Durable Objects di mesin Anda sendiri. Bisa berjalan dengan S3-compatible object store sebagai satu-satunya dependensi layanan eksternal.
celld adalah sistem terdistribusi. Membangun sistem terdistribusi yang andal sulit, sebagian karena kita mungkin tidak disengaja bergantung pada asumsi yang tidak berlaku dalam praktik, meskipun kita ketahui masalah. Peter Deutsch's Delapan Kesalahan Komputasi Terdistribusi menyantumkan asumsi seperti "Jaringan dapat diandalkan" dan "Latency nol."
Bug bisa bergantung pada urutan tertunda pesan, penulisan gagal, dan restart node. Peristiwa ini bisa terjadi urutan yang berbeda pada uji run berikutnya, membuat kesalahan sul direproduksi. Kita perlu mampu mengulang run gagal sehingga kita bisa meneliti penyebabnya dan memeriksa apakah solusi yang dicoba benar-benar masalah menyelesaikan. Itulah mengapa kita menggunakan simulasi deterministik (DST).
Simulator kami masih dalam pengembangan dan tidak termasuk repositori publik celld, tetapi sudah menemukan bug sebelumnya tidak dikenal. Dalam artikel ini, kita akan menjelaskan bagaimana DST bekerja di celld dan cara membantu kami menemukan, mereproduksi, dan memperbaiki salah satu bug tersebut. DST menjalankan produksi code celld dalam lingkungan yang dikontrol oleh simulator. Satu cell di celld menjalankan aplikasi code dan memiliki SQLite database sendiri. Selama cell melakukan pekerjaan, celld menangani peristiwa seperti permintaan masuk, operasi penyimpanan selesai, dan timer peluncuran. Kode yang memilih peristiwa selanjutnya adalah kode yang berbeda dari kode yang mengolahnya. Ini memungkinkan simulator mengontrol urutan peristiwa sambil menjalankan kode pengolahan peristiwa yang sama seperti di produksi.
Apa itu simulasi deterministik (DST) dan mengapa celld menggunakannya?
DST menjalankan produksi code celld dalam lingkungan yang dikontrol simulator, memungkinkan tim untuk menjelajahi urutan eksekusi peristiwa yang berbeda, mereproduksi kesalahan dengan seed tetap, dan memvalidasi perbaikan sebelum deployment.
🇯🇵 日本語
celld での決定的シミュレーションテスト
celld 用のランタイムを構築しています。これは Cloudflare Workers と Durable Objects アプリケーションをあなたのマシンで実行します。S3 互換のオブジェクトストアを唯一の外部サービス依存関係として実行できます。
celld は分散システムです。信頼性の高い分散システムを作るのは困難です。その理由の一つは、実際の実行では成り立たない仮定に無意識に依存してしまうからです。Peter Deutsch の分散コンピューティングの 8 大謬誤 には、ネットワークは信頼でき、レイテンシはゼロ という 8 つの仮定がリストされています。
バグは、特定の遅延メッセージのシーケンス、失敗した書き込み、ノード再起動の順序に依存することがあります。これらのイベントは、次のテスト実行で異なる順序で発生する可能性があり、故障の再現が困難になります。失敗した実行を繰り返して原因を調査し、提案された修復が本当に問題を解決するか確認する必要があります。それが私たちが 決定的シミュレーションテスト (DST) を使用する理由です。
我々のシミュレータは現在開発中で、celld のパブリックリポジトリには含まれていませんが、すでに未知のバグを見つけています。この記事では、celld での DST の動作方法と、それがどのバグを見つけ、再現し、修復したかを説明します。DST はシミュレータによって制御された環境で celld の本番コードを実行します。celld のセルはアプリケーション コードを実行し、独自の SQLite データベース を持っています。セルが作業を行う間、celld はリクエストの到着、完了したストレージ操作、タイマーの発火などのイベントを処理します。次のイベントを選択するコードは、それを処理するコードとは別です。これにより、シミュレータは本番と同じイベントハンドリング コードを実行しながら、イベントの順序を制御できます。
決定的シミュレーションテスト (DST) とは何か、celld はなぜそれを使用するのか?
DST はシミュレータ制御環境で celld の本番コードを実行し、チームがイベント実行順序の異なる探索、固定シードでのバグの再現、デプロイ前の修復検証を可能にします。
🇧🇷 Português
Teste de simulação determinista no celld
Estamos construindo o celld, um runtime para aplicativos Cloudflare Workers e Durable Objects nas suas próprias máquinas. Pode executar com um armazenamento de objetos compatível com S3 como única dependência de serviço externo.
celld é um sistema distribuído. Construir sistemas distribuídos confiáveis é difícil, parcialmente porque podemos depender involuntariamente de suposições que não se sustentam na prática, mesmo quando conhecemos os perigos. A lista de Peter Deutsch os oito erros do computação distribuída lista oito suposições, incluindo "The network is reliable" e "Latency is zero."
Um bug pode depender de uma sequência particular de mensagens atrasadas, gravações falhas e reinicialização de nós. Esses eventos podem acontecer em uma ordem diferente na próxima rodada de testes, tornando a falha difícil de reproduzir. Precisamos ser capazes de repetir a execução com falha para que possamos investigar a causa e verificar se uma proposta de correção realmente resolve o problema. Por isso usamos simulação determinista (DST).
Nosso simulador ainda está em desenvolvimento e não está incluído no repositório público do celld, mas já encontrou bugs anteriormente desconhecidos. Neste artigo, passaremos por como o DST funciona no celld e como ele nos ajudou a encontrar, reproduzir e corrigir um desses bugs. O DST executa o código de produção do celld em um ambiente controlado por um simulador. Uma célula no celld executa código de aplicação e tem seu próprio banco de dados SQLite. À medida que as células fazem seu trabalho, o celld lida com eventos como solicitações entrantes, operações de armazenamento concluídas e disparos de temporizadores. O código que seleciona o próximo evento é separado do código que o lida. Isso permite que o simulador controle a ordem dos eventos enquanto roda o mesmo código de manipulação de eventos que em produção.
O que é simulação determinista (DST) e por que o celld usa?
DST executa o código de produção do celld em um ambiente controlado por um simulador, permitindo que a equipe explore diferentes ordens de execução de eventos, reproduza falhas com uma semente fixa e verifique correções antes do deployment.
🇷🇺 Русский
Определяемая симуляционное тестирование в celld
Мы строим celld, среду выполнения для приложений Cloudflare Workers и Durable Objects на ваших собственных машинах. Он может работать с хранилищем объектов S3-совместимым как единственной внешней зависимостью.
celld — распределенная система. Создание надежных распределенных систем сложно, в части потому, что мы можем неосознанно полагать предположения, которые на практике не выполняются, даже когда мы знаем о ловушках. Список Peter Deutsch "Восемь заблуждений распределенных вычислений" перечисляет восемь таких предположений, включая "Сеть надежна" и "Задержка ноль."
Ошибка может зависеть от определенной задержанных сообщений последовательности, неудачных записей и перезагрузок узлов. Эти события могут происходить в другом порядке на следующем тестовом запуске, что делает ошибку трудно воспроизвести. Нам нужно уметь повторять ошибочный запуск, чтобы мы могли исследовать причину и проверить, действительно ли предложенный исправление решает проблему. Именно поэтому мы используем определяемое симуляционное тестирование (DST).
Наш симулятор все еще в разработке и не включен в публичный репозиторий celld, но он уже находил ранее неизвестные ошибки. В этой статье мы пройдемся по тому, как работает DST в celld и как он помог нам найти, воспроизвести и исправить одну из этих ошибок. DST запускает код производства celld в среде, управляемой симулятором. Ячейка в celld запускает код приложения и имеет свою own SQLite база данных. По мере работы ячеек, celld обрабатывает события, такие как входящие запросы, завершенные операции хранения и срабатывания таймеров. Код, который выбирает следующее событие, отделен от кода, который его обрабатывает. Это позволяет симулятору управлять порядком событий, пока работает тот же код обработки событий, что и в производстве.
Что такое определимое симуляционное тестирование (DST) и зачем celld его использует?
DST запускает код производства celld в симулятор-контролируемой среде, позволяя команде исследовать разные порядки выполнения событий, воспроизводить ошибки с фиксированным сидом и проверять исправления до деплоя.
🇨🇳 简体中文
确定性模拟测试在 celld 中的应用
我们正在构建 celld,这是一个运行在您自己机器上的 Cloudflare Workers 和 Durable Objects 应用的运行时。它可以将 S3 兼容的对象存储作为唯一外部服务依赖。
celld 是一个分布式系统。构建可靠的分布式系统很难,部分原因是我们可能会无意中依赖在实际环境中不成立的假设,即使我们知道这些陷阱。Peter Deutsch 的《分布式计算八大谬误》列出了八个此类假设,包括“网络是可靠的”和“延迟为零”。
一个 Bug 可能取决于特定的延迟消息序列、失败的写入和节点重启。这些事件在下一次测试运行中可能以不同的顺序发生,使得故障难以重现。我们需要能够重复失败的运行,以便我们可以调查原因并检查拟议的修复是否真的解决了问题。这就是我们使用确定性模拟测试 (DST) 的原因。
我们的模拟器仍在开发中,未包含在 celld 的公共仓库中,但它已经找到了先前未知的 Bug。在这篇文章中,我们将介绍 celld 中 DST 的工作原理以及它如何帮助我们查找、重现并修复了其中一个 Bug。DST 在受控模拟器环境中运行 celld 的生产代码。celld 中的一个 cell 运行应用程序代码,并拥有自己的 SQLite 数据库。随着 cell 执行工作,celld 会处理传入请求、完成的存储操作和定时器触发等事件。选择下一个事件的代码与处理它的代码分离。这使得模拟器可以在运行相同的生产事件处理代码的同时控制事件的顺序。
什么是确定性模拟测试 (DST)?为什么 celld 使用它?
DST 在受控模拟器环境中运行 celld 的生产代码,允许团队探索事件执行顺序的不同、使用固定种子重现故障,并在部署前验证修复方案。