Topik ini meluruskan prinsip let it crash yang sering disalahtafsirkan: apa yang boleh dibiarkan mati, apa yang tidak boleh, dan bagaimana intensitas supervisi menjadi parameter desain yang menyatakan ekspektasi kegagalan. Prinsip ini hanya benar di dalam pohon yang tersupervisi, dan batas itulah isi utama topik ini.
Prinsip dan batasnya#
Let it crash bukan ajakan mengabaikan error, melainkan keputusan tentang siapa yang memperbaiki. Proses yang menemukan keadaan yang tidak bisa diperbaiki sendiri berhenti segera dengan alasan yang jelas, lalu supervisor memulainya ulang ke state bersih. Kebalikannya justru berbahaya: proses yang menangkap semua error dan melanjutkan dengan keadaan meragukan masih mengirim balasan, tetapi balasannya tidak bisa dipercaya. Batas aturannya dapat dinyatakan dalam satu kalimat: proses dibiarkan mati hanya di dalam pohon yang tersupervisi, bukan di luarnya. Proses yang tidak punya supervisor akan hilang diam-diam, dan pesan yang dikirim ke proses mati menguap tanpa jejak, sebagaimana diperlihatkan pada modul Proses.
Error kernel#
Bagian program yang wajib tetap hidup agar pemulihan bermakna disebut error kernel. Ia biasanya supervisor akar beserta proses yang menangani keandalan dasar, misalnya pengelola konfigurasi atau sumber daya yang mahal dimulai ulang. Semua kegagalan yang bisa terjadi dibiarkan terjadi di lapisan luar, sedangkan error kernel dirancang dengan kode paling sederhana dan paling teruji, karena ia tidak punya pihak yang lebih tinggi untuk memulihkannya. Aturan praktisnya: pekerjaan yang bisa gagal tidak dimasukkan ke error kernel, dan tidak ada data penting yang hanya hidup di proses yang bisa mati. Ketika supervisor teratas menyerah karena intensitas restart terlampaui, pohon mati seluruhnya dan keputusan pemulihan berpindah ke luar VM, seperti mesin yang dijalankan ulang oleh sistem operasi atau pengelola proses.
Intensitas supervisi sebagai parameter desain#
Kunci intensity dan period pada supervisor bukan angka default yang sekadar diisi, melainkan pernyataan ekspektasi. Nilai intensity => 5, period => 10 berarti: kegagalan sampai lima kali dalam sepuluh detik dipulihkan, dan lebih dari itu adalah kegagalan struktural yang harus naik level. Parameter ini dipilih per cabang sesuai sifat childnya: pekerja yang berhadapan dengan jaringan lambat diberi ruang lebih, sedangkan proses yang gagal berarti kesalahan kode diberi ambang ketat agar masalah cepat terlihat. Menurunkan intensitas membuat sistem lebih cepat melaporkan kegagalan daripada menoleransinya, sedangkan menaikkannya adalah keputusan yang harus disertai alasan mengapa kegagalan berulang masih wajar dipulihkan.
Kondisi agar prinsip bekerja#
Prinsip ini hanya aman bila tiga kondisinya dipenuhi. Pertama, state yang penting harus bisa dibangun ulang dari luar proses yang mati, misalnya dari ETS yang dijaga proses lain, dari DETS, atau dari klien yang akan mengirim ulang. Supervisor yang memulai ulang proses dengan state yang tidak bisa dipulihkan hanya mengulang kegagalan yang sama. Kedua, operasi yang menyentuh dunia luar dengan efek samping, seperti pengiriman email atau pembayaran, tidak boleh berada di tengah proses yang boleh mati tanpa desain idempotensi, karena restart bisa mengulang efeknya. Ketiga, setiap kematian harus tercatat: supervisor report yang dilihat pada modul OTP behaviour dan logger pada topik pencatatan log dengan logger adalah sumber pengamatan utama sistem, dan let it crash tanpa log hanya berarti kegagalan menghilang tanpa jejak. Dengan ketiganya, kegagalan tidak lagi menjadi bencana, melainkan kejadian yang terukur.
Mengukur kesehatan let it crash#
Sistem yang memakai let it crash dengan benar menghasilkan jejak yang bisa diukur: setiap kematian proses yang tercatat supervisor report, setiap pemulihan terlihat sebagai pergantian PID pada nama terdaftar, dan frekuensinya adalah data. Log kegagalan per jam yang naik bertahap menandakan pergeseran beban yang sehat, sedangkan lonjakan mendadak pada satu cabang menandakan perubahan yang layak diselidiki sebelum intensitas restart terlampaui. Pola yang tidak sehat justru sebaliknya: supervisor report yang tidak pernah muncul bisa berarti kegagalan ditelan di tempat yang salah, dan pohon yang tidak pernah memulihkan apa pun bisa berarti kegagalan disembunyikan oleh error kernel yang terlalu besar. Mengukur keduanya menjaga prinsip tetap hidup sebagai prinsip, bukan slogan.
Ringkasan#
- Let it crash menyerahkan pemulihan kepada supervisor, tetapi hanya sah di dalam pohon yang tersupervisi.
- Error kernel adalah bagian yang wajib hidup, dibuat sederhana, dan tidak menerima pekerjaan yang bisa gagal.
- Intensity dan period menyatakan ekspektasi kegagalan per cabang dan menentukan kapan supervisor menyerah.
- Syarat kerjanya: state yang bisa dipulihkan, efek samping yang idempoten, dan setiap kematian tercatat.
Referensi#
- Erlang Design Principles — Ericsson — Kerangka supervisi tempat let it crash bekerja.
- Erlang Error Handling Guide — Ericsson — Dokumen resmi filosofi dan mekanisme penanganan error Erlang.
- Learn You Some Erlang for Great Good! — Fred Hebert — Bab supervisor yang membingkai let it crash secara praktis.