Pada 18 November 2025, Cloudflare mengalami salah satu gangguan global terbesar dalam beberapa tahun terakhir. Selama beberapa jam, berbagai layanan yang bergantung pada jaringan edge Cloudflare, mulai dari CDN, WAF, sampai API gateway mengalami penurunan performa hingga tidak bisa diakses. Penelusuran internal kemudian mengarah pada penyebab yang sangat teknis, namun berawal dari sesuatu yang terlihat sederhana: perubahan query di database ClickHouse yang memicu duplikasi data dalam skala besar.
|
Sumber masalahnya berasal dari modul Bot Management Cloudflare, yang bekerja dengan mengumpulkan “features”, atau sinyal internal yang digunakan untuk menilai apakah suatu request bersifat manusia, bot baik, atau aktivitas otomatis yang berpotensi berbahaya. Feature-feature ini dibaca dari ClickHouse, database analitik berperforma tinggi yang di-deploy dalam mode terdistribusi di seluruh data center Cloudflare. Pada kondisi normal, setiap permintaan hanya menghasilkan sekitar puluhan feature, jumlah yang dapat diproses dengan cepat oleh komponen Rust yang bertanggung jawab mengolahnya.
Beberapa hari sebelum insiden, tim Cloudflare memperbarui query ClickHouse yang digunakan untuk mengambil data feature tersebut. Tujuannya positif: membuat pengambilan data lebih spesifik, responsif, dan konsisten di seluruh data center. Namun sifat ClickHouse sebagai distributed database membuat query baru tersebut tidak berjalan seperti yang diharapkan. Alih-alih mengambil data dari satu sumber, query itu memicu eksekusi terdistribusi yang membuat setiap shard dan bahkan beberapa replica ikut menyumbang data. Hasilnya adalah duplikasi feature dalam jumlah besar bukan lagi satu set feature, tetapi dua hingga tiga set yang identik. Dalam beberapa cluster, jumlah baris yang dihasilkan bahkan melampaui 250 fitur per request, jauh di atas angka yang pernah muncul sebelumnya.
Sayangnya, pipeline Rust yang memproses fitur-fitur ini memiliki batas keras. Komponen tersebut melakukan validasi jumlah fitur, dan jika angka yang masuk melebihi limit, perilakunya bukan sekadar membuang data atau memberi peringatan. Kode di bagian ini menggunakan mekanisme panic! dari Rust, yang dalam konteks build Cloudflare menyebabkan worker langsung abort. Karena limit internal sebelumnya adalah 60, Cloudflare sempat menaikkan limit ini menjadi 200 untuk memberi ruang pada variasi data. Namun duplikasi yang dihasilkan query baru membuat angka itu tetap tidak cukup.
Begitu sebuah request masuk dengan fitur >200, worker Rust men-trigger panic, mematikan proses. Worker otomatis restart, namun request berikutnya masuk dan kembali memicu panic. Proses ini terjadi berkali-kali dan membentuk pola crash-loop yang sangat agresif. Karena modul Bot Management berada di jalur permintaan utama, setiap crash langsung mengganggu proses-proses lain yang bergantung padanya. Dalam hitungan menit, sebagian besar edge worker di sejumlah lokasi mengalami lonjakan restart dan konsumsi CPU yang tidak terkendali, kemudian menyebar sebagai efek domino ke data center Cloudflare di seluruh dunia.
Mengidentifikasi akar persoalan tidak mudah, namun analisis memperlihatkan pola yang konsisten: ClickHouse menjalankan distributed scan pada table yang dipakai untuk feature, lalu menggabungkan hasil dari beberapa shard dan replica, termasuk data yang sebenarnya tidak perlu dibaca. Merge tree ClickHouse, ditambah eksekusi paralel pada tingkat cluster, memunculkan duplikasi baris yang jumlahnya meningkat pada tingkat trafik yang lebih tinggi. Ketika fitur-fitur ini memasuki pipeline Rust, sistem kehilangan stabilitasnya sepenuhnya.
Setelah sumber masalah dipahami, Cloudflare bergerak cepat. Query ClickHouse diperbaiki agar hanya mengambil data dari table yang tepat tanpa memicu distributed fetch. Beberapa kelompok feature dinonaktifkan sementara untuk menurunkan jumlah data yang harus diproses. Error handling di modul Rust diperbaiki agar kondisi kelebihan fitur tidak lagi berakhir pada panic fatal. Setelah diuji di sejumlah lokasi kecil, patch ini dideploy secara bertahap ke seluruh jaringan Cloudflare, proses yang memakan waktu sekitar dua jam hingga semua edge worker kembali dalam kondisi normal.
Insiden ini menjadi contoh bagaimana infrastruktur internet modern dapat terpengaruh oleh perubahan kecil pada komponen terpencil yang berada jauh di “belakang layar.” Query SQL yang terlihat tidak berbahaya dapat memicu duplikasi data di database terdistribusi; duplikasi itu menembus hard limit komponen Rust; panic pada komponen tersebut memicu crash-loop pada worker; dan crash-loop tersebut akhirnya melumpuhkan jaringan global. Cloudflare menutup laporan insiden dengan penegasan bahwa perbaikan berkelanjutan sedang dilakukan, mulai dari penyempurnaan arsitektur Bot Management, peningkatan ketahanan query pada sistem database terdistribusi, hingga pemeriksaan ketat pada batas-batas fitur yang dapat memicunya.
Meskipun penyebabnya teknis, dampaknya mengingatkan satu hal penting: pada skala sebesar Cloudflare, detail kecil adalah sistem besar. Satu query yang salah bisa menjadi penyebab jatuhnya sebagian internet dunia.