Cabut kabelnya. Tekan tombol killswitch. Insting ini bekerja saat Anda berdiri di samping satu mesin tunggal. Insting ini gagal saat sistem AI Anda tersebar di lima puluh node di tiga zona ketersediaan. Sebagian besar tim engineering mempelajari hal ini dengan cara yang sulit. Mereka memperbarui database pusat, mengubah nilai boolean dari true ke false, dan berasumsi sistem akan berhenti. Kenyataannya tidak. Database terlihat bersih. Layanan masih berjalan.
Ilusi Sakelar Tunggal
Bayangkan sebuah pengontrol yang mencatat pencabutan pada epoch 12. Ia menulis perubahan tersebut ke penyimpanan persisten dan merasa lega. Sementara itu, Worker B sedang berjalan menggunakan izin yang tersimpan di cache dari epoch 11. Worker tersebut tidak pernah menerima pemberitahuan. Tiga puluh detik kemudian, ia memulai tugas inferensi model, menjalankan klaster GPU, atau memanggil API eksternal. Log audit menyatakan bahwa akses telah dicabut. Namun, tindakan tersebut tetap terjadi.
Inilah celah antara persistensi dan propagasi. Penulisan ke database bukanlah status sistem. Itu hanyalah satu baris dalam satu tabel, dan banyak aktor dalam sistem Anda yang tidak melakukan polling ke tabel tersebut pada saat yang tepat ketika mereka membutuhkannya. Jika Anda memperlakukan penghentian darurat seperti sakelar lampu, Anda akan mendapati bahwa kegelapan tidak pernah tiba di beberapa sudut ruangan.
Realitas Keras Sistem Terdistribusi
Anda harus merancang untuk kegagalan. Bukan kegagalan sesekali. Melainkan kegagalan yang konstan, berantakan, dan independen. Worker melakukan reboot di tengah pekerjaan. Konsumen antrean tertinggal hingga beberapa menit. Layanan otorisasi mengembalikan data usang karena salah satu replika macet. Pesan terduplikasi. Pesan hilang. Pesan tiba tidak berurutan. Daemon NTP Anda mengalami drift, dan tiba-tiba satu node merasa tertinggal sepuluh detik dari node lainnya. Jam memiliki kesalahan, dan Anda tidak dapat mempercayai wall time untuk mengurutkan peristiwa di berbagai batas.
Jika protokol darurat Anda mengasumsikan jaringan yang andal, pengiriman pesan yang berurutan, atau jam yang tersinkronisasi, Anda tidak memiliki protokol. Anda hanya memiliki harapan. Worker, konsumen antrean, dan layanan otorisasi gagal secara independen. Aturan keselamatan Anda harus tetap berlaku bahkan ketika infrastruktur terasa sangat tidak bersahabat.
Lima Aturan yang Benar-benar Berhasil
Keamanan berasal dari invarian yang bertahan di tengah kekacauan. Berikut adalah aturan-aturan yang menjaga agar pencabutan tidak menjadi sekadar fiksi.
Tidak ada tindakan yang dimulai dengan epoch izin yang lebih rendah dari epoch pencabutan.
Ini adalah pagar pengaman utama Anda. Setiap pemberian izin membawa nomor epoch. Setiap pencabutan membawa nomor yang lebih baru. Sebelum worker bertindak, ia membandingkan angka-angka tersebut. Jika izin worker lebih lama dari pencabutan terbaru yang ia lihat, worker tersebut berhenti. Epoch memberi Anda jam logis yang tidak bergantung pada jam sistem. Worker yang memegang epoch 11 harus menolak untuk memulai pekerjaan setelah ia mengetahui bahwa epoch 12 telah mencabut otoritas yang mendasarinya.
Izin yang tersimpan di cache kedaluwarsa dalam batas waktu yang ditentukan.
Sebuah izin tidak boleh hidup selamanya di dalam memori. Worker perlu memvalidasi ulang atau melepaskan hak mereka setelah interval tertentu. Tanpa hal ini, sebuah node yang sempat offline bisa bangun beberapa hari atau minggu kemudian dan mengeksekusi sesuatu menggunakan izin yang sudah usang. Tetapkan masa sewa (lease). Terapkan dengan ketat. Waktu menjadi tim pembersih otomatis Anda.
Restart sistem tidak boleh menurunkan epoch yang tersimpan.
Persistensi itu penting. Jika pengontrol crash dan restart, ia harus memulihkan epoch tertinggi yang pernah diterbitkannya. Mengembalikan ke epoch yang lebih lama akan menghidupkan kembali izin yang telah dicabut seolah-olah penghentian darurat tidak pernah terjadi. Simpan epoch secara tahan lama sebelum Anda menyiarkannya. Gunakan write-ahead log, fsync yang terkonfirmasi, atau grup konsensus yang direplikasi. Sejarah hanya bergerak maju.
Duplikasi rev
