16 puan yazan outsideris 2022-01-31 | 1 yorum | WhatsApp'ta paylaş

Kesinti özeti

  • Kesinti 72 saat sürdü

  • İki temel neden vardı

    • Anormal derecede yüksek okuma/yazma yükü altında Consul'un yeni streaming özelliği etkinleştirildiğinde aşırı contention ve performans düşüşü oluştu

    • Belirli yük koşullarında, Consul'un lider seçimi ve veri replikasyonu için write-ahead-log'u yönetmekte kullandığı açık kaynak BoltDB'de performans sorunu ortaya çıktı

  • Tek bir Consul kümesi bu sorunların etkisini daha da ağırlaştırdı

  • Consul uygulamasında gizli olan ve birbiriyle ilgisiz gibi görünen bu iki sorunun bulunması zaman aldığı için kesinti uzadı

  • Kesintinin nedenine dair daha iyi görünürlük sağlaması gereken izleme sistemi de Consul gibi etkilenen sistemlere bağımlı olduğu için tespiti daha da zorlaştırdı

Küme ortamı ve HashiStack

  • Roblox 18.000 sunucu ve 170.000 container işletiyor

  • Genellikle HashiStack olarak adlandırılan Nomad, Consul ve Vault kullanılıyor

O sırada Roblox, streaming özelliğini kullanmak için Consul'u 1.9'dan 1.10'a yükseltti.

İlk tespit (10/28 13:37)

18 Ekim öğleden sonra Vault performansı düştü ve bir Consul sunucusunun CPU yükü yükseldi.

İlk sınıflandırma (10/28 13:37 – 10/29 02:00)

  • Consul kümesi metriklerinde yazma gecikmesi arttı

  • Nedeni donanım performans düşüşü olabilir diye düşünüldü ve Consul kümesi düğümlerinden birinin değişimine başlandı

  • Birlikte çalışmak için HashiCorp çalışanları sürece katıldı

  • Donanım değişiminden sonra da Consul performansı düşmeye devam etti ve 16:35'te oyuncu sayısı normalin %50'sine indi

  • Consul servis keşfi için kullanılıyor, Nomad ve Vault da Consul'a bağlı olduğundan Consul bir SPoF idi.

  • Bu noktada yeni bir hipotez olarak trafiğin neden olduğu düşünüldü. Yüksek trafik nedeniyle Consul'un artık yükü kaldıramadığı varsayıldı

  • Consul kümesindeki tüm düğümler daha güçlü sistemlerle değiştirildi. (çekirdek sayısı 2 katına çıkarıldı, daha hızlı NVME SSD kullanıldı)

  • Consul geçişi neredeyse tamamlandı ama küme normale dönmedi

Hizmeti geri getirme denemesi #1 (10/29 02:00 – 04:00)

  • Kesintiden önceki Consul kümesi snapshot'ına geri dönmeye karar verildi

  • Kullanıcı verilerinin iyi durumda olduğu, sistem verilerinde kısmi kayıp olsa da bunun kabul edilebilir olduğu değerlendirildi

  • Snapshot geri yüklendikten sonra Consul ile sürekli haberleşen sistemlerin oluşturacağı yükün yeni sorunlara yol açmaması için erişim iptables ile engellendi

  • Snapshot geri yüklendikten sonra göstergeler iyi görünüyordu ancak iptables engeli kaldırılınca sistem tekrar aynı arıza durumuna döndü

Hizmeti geri getirme denemesi #2 (10/29 04:00 – 10/30 02:00)

  • Dış trafik engellendi ve zorunlu olmayan kullanımlar kaldırıldı; yüzlerce instance ile çalışan servisler tek haneli sayılara indirildi

  • Hizmeti yeniden ayağa kaldırma denendi ancak Consul tekrar anormal duruma geçti

  • Başta düşünülen performans düşüşü etkenlerinin dışında başka bir şey daha olduğu anlaşıldı ve Roblox açısından Consul'a bakmak yerine Consul'un içi incelenmeye başlandı

Contention analizi (10/30 02:00 – 10/30 12:00)

  • 10 saatlik ek analiz sonucunda Consul yazmalarının uzun süre bloklandığı anlaşıldı

  • Contention'ın nedeni bilinmiyordu ancak ilk CPU değişikliğinin 64 çekirdekten 128 çekirdeğe çıkarılmasının contention'ı daha da kötüleştirdiği düşünüldü

  • 64 çekirdeğe geri dönmeye karar verildi ve dönüldü ama fayda etmedi

Kök nedenin bulunması (10/30 12:00 – 10/30 20:00)

  • Consul'un streaming özelliği birkaç aydır etkin durumdaydı ve CPU kullanımıyla ağ bant genişliğini düşürdüğü için kademeli olarak devreye alınıyordu.

  • Kesintiden bir gün önce, 27'sinde saat 14:00'te trafik yönlendirme backend'inde bu özellik etkinleştirildi.

  • Bir gün önce etkinleştirilmiş ve düzgün çalışmış olduğu için neden olarak düşünülmedi

  • Performans analizinden sonra streaming kodunun yüksek CPU kullanımına yol açtığına dair kanıt görüldü

  • Streaming devre dışı bırakılıp dağıtım tamamlandıktan sonra Consul'un KV yazma gecikmesinin azaldığı doğrulandı (nihayet!)

  • HashiCorp, streaming'in daha verimli olduğunu ancak uygulamada long polling yerine daha az sayıda eşzamanlılık kontrol öğesi (Go channel) kullandıklarını belirtti -> bu da yüksek yük altında tek bir Go channel üzerindeki contention'ı artırarak verimliliği düşürdü

  • Bir çıkış yolu görünmüştü ama hâlâ aralıklı lider seçimi gözleniyordu ve bazı liderlerde öncekiyle benzer gecikme sorunları vardı

  • Belirli liderler seçilmediği sürece kümenin normal çalıştığı değerlendirilerek odağın hizmeti normal duruma döndürmeye verilmesi kararlaştırıldı

  • Sonrasında HashiCorp kök nedeni incelemeye devam etti ve bazı liderlerin yavaş olmasının BoltDB'den kaynaklandığını buldu

Cache hizmetinin geri gelmesi (10/30 20:00 – 10/31 05:00)

  • Kesintinin 54. saatinde hizmeti geri getirmek için hazır hale gelindi

  • Kesinti sırasında veritabanı iyiydi ancak saniyede 1 milyar isteği işleyen cache sistemi anormal durumdaydı.

  • Bu cache geri yüklenip normal olduğu doğrulandığında kesintinin üzerinden 61 saat geçmişti.

Kullanıcıların geri dönüşü (10/31 05:00 – 10/31 16:00)

  • 31'inde saat 05:00'te hizmeti geri döndürme hazırlıkları başladı ve 10:00'da tamamlandı.

  • DNS üzerinden erişen oyuncu sayısı kontrollü biçimde artırıldı ve süreç izlenerek yönetildi

  • 73 saat sonra tüm oyuncular yeniden erişebilir hale geldi.

Ek analiz ve kesinti sonrası yapılan değişiklikler

  • HashiCorp ve Roblox performans sorununu çözmek için bir "sıkıştırma" süreci geliştirdi

  • Telemetri iyileştirmesi: telemetri sistemi ile Consul arasında döngüsel bağımlılık vardı, bu yüzden Consul'da sorun olduğunda veri yetersiz kalıyordu. Telemetri sisteminin izlediği sistemlere bağımlı olmaması için bu döngüsel bağımlılık kaldırıldı

  • Kullanılabilirlik bölgeleri ve veri merkezleri genişletildi

  • Başka depolama seçenekleri varken Consul'da tutulan veya gereksiz olan KV verileri temizlendi.

  • BoltDB'nin halefi olan bbolt'u kullanan yeni bir Consul sürümü test ediliyor

  • Bootstrap süreci nedeniyle toparlanma geciktiği için bunun otomasyonu ile yeni araçlar ve süreçler geliştiriliyor

1 yorum

 
xguru 2022-02-01

Çeviri için teşekkürler.

O ölçekte 72 saatlik bir kesinti gerçekten korkutucu görünüyor.