16 poin oleh outsideris 2022-01-31 | 1 komentar | Bagikan ke WhatsApp

Ringkasan gangguan

  • Gangguan berlangsung selama 72 jam

  • Ada 2 akar penyebab

    • Saat fitur streaming baru Consul diaktifkan dalam kondisi beban baca/tulis yang sangat tinggi, terjadi contention berlebihan dan penurunan performa

    • Dalam kondisi beban tertentu, timbul masalah performa pada BoltDB open source yang digunakan Consul untuk mengelola write-ahead-log bagi pemilihan leader dan replikasi data

  • Satu cluster Consul tunggal memperparah dampak masalah ini

  • Gangguan memanjang karena perlu menemukan dua masalah yang tampak tidak saling terkait ini, yang tersembunyi di implementasi Consul

  • Lebih sulit ditemukan karena sistem monitoring yang seharusnya memberi visibilitas lebih baik terhadap penyebab gangguan bergantung pada sistem yang terdampak seperti Consul

Lingkungan cluster dan HashiStack

  • Roblox mengoperasikan 18.000 server dan 170.000 container

  • Menggunakan Nomad, Consul, dan Vault yang biasanya disebut HashiStack

Saat itu Roblox meng-upgrade Consul dari 1.9 ke 1.10 untuk menggunakan fitur streaming.

Deteksi awal (10/28 13:37)

Pada 18 Oktober sore, performa Vault menurun dan beban CPU pada satu server Consul meningkat.

Klasifikasi awal (10/28 13:37 – 10/29 02:00)

  • Latensi tulis meningkat pada metrik cluster Consul

  • Penurunan performa hardware dicurigai sebagai penyebab, dan salah satu node cluster Consul mulai diganti

  • Karyawan HashiCorp ikut bergabung dan mulai bekerja bersama

  • Setelah penggantian hardware pun performa Consul terus menurun, dan pada 16:35 jumlah pemain turun menjadi 50% dari biasanya

  • Karena Consul digunakan untuk service discovery dan Nomad serta Vault juga bergantung pada Consul, maka Consul menjadi SPoF.

  • Saat ini muncul hipotesis baru bahwa trafik adalah penyebabnya. Diperkirakan Consul tidak lagi mampu menangani beban akibat trafik tinggi

  • Semua node cluster Consul diganti dengan sistem yang lebih kuat. (jumlah core 2x lipat, NVME SSD lebih cepat)

  • Migrasi Consul hampir selesai, tetapi cluster tidak kembali normal

Upaya pemulihan layanan #1 (10/29 02:00 – 04:00)

  • Diputuskan untuk kembali ke snapshot cluster Consul sebelum gangguan

  • Data pengguna aman dan diperkirakan sebagian data sistem akan hilang, tetapi dianggap tidak masalah

  • Setelah pemulihan snapshot, akses diblokir dengan iptables karena dikhawatirkan beban dari sistem yang terus berkomunikasi dengan Consul akan kembali menimbulkan masalah setelah pemulihan

  • Setelah snapshot dipulihkan, indikator terlihat membaik, tetapi ketika blokir iptables dibuka kembali, kondisi kembali ke status gangguan semula

Upaya pemulihan layanan #2 (10/29 04:00 – 10/30 02:00)

  • Trafik eksternal diblokir dan penggunaan yang tidak esensial dihapus, sehingga layanan yang sebelumnya berjalan dalam ratusan instance berkurang menjadi satu digit

  • Pemulihan layanan dicoba lagi, tetapi Consul kembali menjadi tidak normal

  • Disadari bahwa selain faktor penurunan performa yang semula diperkirakan, ada hal lain juga, sehingga fokus beralih dari sudut pandang Roblox terhadap Consul ke bagian internal Consul sendiri

Analisis contention (10/30 02:00 – 10/30 12:00)

  • Hasil analisis tambahan selama 10 jam menunjukkan bahwa penulisan Consul terblokir dalam waktu lama

  • Penyebab contention belum diketahui, tetapi diperkirakan perubahan CPU awal dari 64 core ke 128 core justru memperparah contention

  • Diputuskan untuk kembali ke 64 core, tetapi tidak membantu

Penemuan akar penyebab (10/30 12:00 – 10/30 20:00)

  • Fitur streaming Consul sudah diaktifkan sejak beberapa bulan sebelumnya dan sedang diperkenalkan secara bertahap karena menurunkan penggunaan CPU dan bandwidth jaringan.

  • Sehari sebelum gangguan, pada tanggal 27 pukul 14:00, fitur ini diaktifkan pada backend routing trafik.

  • Karena sudah diaktifkan sehari sebelumnya dan tampak berjalan baik, fitur ini tidak dianggap sebagai penyebab

  • Setelah analisis performa, ditemukan bukti bahwa kode streaming menyebabkan penggunaan CPU tinggi

  • Setelah streaming dinonaktifkan dan deployment selesai, terlihat bahwa latensi penulisan KV pada Consul menurun (akhirnya!)

  • Menurut HashiCorp, streaming lebih efisien, tetapi dalam implementasinya digunakan lebih sedikit elemen kontrol konkurensi (channel Go) dibanding long polling -> dalam beban tinggi hal ini memperparah contention pada satu channel Go dan menurunkan efisiensi

  • Terobosan mulai terlihat, tetapi masih ditemukan pemilihan leader yang terjadi sesekali, dan beberapa leader menunjukkan masalah latensi serupa seperti sebelumnya

  • Dengan asumsi cluster normal selama leader tertentu tidak terpilih, fokus diarahkan untuk mengembalikan layanan ke kondisi normal

  • Setelah itu HashiCorp terus menyelidiki akar penyebab dan menemukan bahwa masalah lambat pada sebagian leader disebabkan oleh BoltDB

Pemulihan layanan cache (10/30 20:00 – 10/31 05:00)

  • Setelah 54 jam gangguan, layanan siap dipulihkan

  • Selama gangguan database tetap baik, tetapi sistem cache yang menangani 1 miliar request per detik berada dalam kondisi tidak normal.

  • Setelah cache ini dipulihkan dan dipastikan normal, waktu sejak gangguan mencapai 61 jam.

Kembalinya pengguna (10/31 05:00 – 10/31 16:00)

  • Persiapan pemulihan layanan dimulai pukul 5 tanggal 31 dan selesai pukul 10.

  • Jumlah pemain yang mengakses melalui DNS dikelola dan ditingkatkan sambil dimonitor

  • Setelah 73 jam, semua pemain akhirnya bisa mengakses.

Analisis tambahan dan perubahan akibat gangguan

  • HashiCorp dan Roblox mengembangkan proses "compression" untuk mengatasi masalah performa

  • Peningkatan telemetry: ada ketergantungan siklik antara sistem telemetry dan Consul, sehingga saat Consul bermasalah data menjadi kurang. Ketergantungan siklik dihapus agar sistem telemetry tidak bergantung pada sistem yang dimonitornya

  • Perluasan availability zone dan data center

  • Membersihkan data KV yang disimpan di Consul secara tidak perlu, padahal ada storage lain.

  • Sedang menguji versi baru Consul yang mengganti BoltDB dengan penerusnya, bbolt

  • Proses pemulihan terlambat karena proses bootstrap, sehingga otomatisasi untuk hal ini sedang dilakukan dan alat serta proses baru sedang dikembangkan

1 komentar

 
xguru 2022-02-01

Wow, terima kasih atas terjemahannya.

Gangguan selama 72 jam pada skala sebesar itu benar-benar terasa menakutkan.