Simulator konsensus Raft
Cara simulator ini dibuat
Sebuah simulator Raft yang bisa dirusak dengan sengaja — dan rekayasa yang membuat kerusakan itu bisa dipercaya.
Simulator Raft yang bisa Anda rusak dengan sengaja. Simulasi diskret deterministik, pemeriksaan invariant keamanan yang berjalan terus, dan mode ablasi yang mematikan satu per satu aturan Raft supaya jaminan yang dijaganya benar-benar terlihat gagal.
Fungsi murni, diputar ulang persis
Simulasi adalah fungsi murni dari (config, seed, actions, flags). Jam virtual, PRNG ber-seed, dan tiebreak eksplisit untuk timestamp yang sama membuat setiap trace identik byte demi byte di mesin mana pun. Dari situlah datang time travel, tautan yang bisa dibagikan, dan laporan bug yang bisa direproduksi.
lib/simFigure 2, diimplementasikan secara harfiah
Setiap aturan di lib/raft menyebutkan figure dan rule yang diimplementasikannya. Setiap rule punya fixture kesesuaian, ditambah suite untuk Figure 8, Figure 13, dan §6. Raft mudah dibuat hampir benar, dan hampir benar itu salah.
lib/raftChecker yang tidak berbagi kode
lib/invariants mengevaluasi lima properti keamanan dari definisinya atas state global, dan tidak mengimpor apa pun dari algoritma selain tipe. Checker yang memakai asumsi implementasinya sendiri akan memvalidasi bug-nya sendiri.
lib/invariantsAblasi yang tidak bisa berbohong
Ketujuh aturan adalah guard bernama di satu tempat, masing-masing dikonsultasikan di tepat satu call site. Setiap sakelar punya tes yang membuktikan propertinya gagal saat dimatikan dan bertahan saat dinyalakan — dua arah.
lib/raft/rules.tsDi-fuzz sebelum setiap deploy
Kelima properti bertahan di 10.000 run acak di bawah Raft yang tidak diubah, dengan log compaction dan perubahan keanggotaan aktif. Suite itu menjaga setiap deploy; seed yang gagal menjadi tes regresi permanen.
tests/fuzz
Karya terdahulu dan sumber
Karya terdahulu
RaftScope sudah ada, kualitasnya bagus, dan ditulis oleh penulis makalah Raft sendiri. Ia adalah visualiser Raft yang kanonis — kalau Anda ingin melihat Raft berjalan, mulailah dari sana. The Secret Lives of Data juga penjelasan yang baik.
RaftScope ↗Yang ditambahkan proyek ini
Bukan pengganti keduanya. Kontribusinya sempit: ablasi dan pemeriksaan invariant. RaftScope menunjukkan mekanismenya; di sini Anda mematikan sebuah aturan lalu menonton properti keamanan yang dijaganya runtuh, sementara lima indikator invariant menyebutkan mana yang gagal dan mengapa.
Sumber normatif
Ongaro & Ousterhout, In Search of an Understandable Consensus Algorithm (USENIX ATC 2014), versi extended — terutama Figure 2. Setiap aturan di lib/raft menyebutkan nomor figure dan rule yang diimplementasikannya.
raft.pdf ↗