Büyük Ölçekli Platform Güvenilirliği Sağlama

Ölçeklenebilir herhangi bir dağıtık platformu çalıştırmak, müşterilerin ihtiyaç duydukları anda ihtiyaç duydukları şeye sahip olmalarını sağlamak için güvenilirliğe bağlılık gerektirir. Bağımlılıklar, özellikle Roblox kadar büyük bir platformda oldukça karmaşık olabilir. Güvenilir hizmetler oluşturmak, bağımlılıkların karmaşıklığı ve durumundan bağımsız olarak, herhangi bir hizmetin kesintiye uğramayacağı (yani yüksek kullanılabilirlik), hatasız (yani yüksek kalite) ve hatasız (yani hata toleransı) çalışacağı anlamına gelir.
Güvenilirlik Neden Önemlidir?
Hesap Kimliği ekibimiz, oluşturduğumuz uyumluluk hizmetleri platformun temel bileşenleri olduğu için daha yüksek güvenilirliğe ulaşmaya kararlıdır. Uyumluluğun bozulması ciddi sonuçlar doğurabilir. Roblox'un doğal işleyişini engellemenin maliyeti çok yüksektir; arıza sonrası kurtarma için ek kaynaklar gerekir ve kullanıcı deneyimi zayıflar.
Güvenilirliğe yönelik tipik yaklaşım, öncelikle kullanılabilirliğe odaklanır, ancak bazı durumlarda terimler karıştırılır ve yanlış kullanılır. Kullanılabilirliğe yönelik ölçümlerin çoğu, hizmetlerin çalışıp çalışmadığını değerlendirirken, bölümleme toleransı ve tutarlılık gibi unsurlar bazen unutulur veya yanlış anlaşılır.
CAP teoremine göre, herhangi bir dağıtık sistem bu üç unsurdan yalnızca ikisini garanti edebilir; bu nedenle, uyumluluk hizmetlerimiz yüksek kullanılabilirlik ve bölümleme toleransı sağlamak için tutarlılıktan bir miktar ödün vermektedir. Bununla birlikte, hizmetlerimiz çok az ödün vermiş ve aşağıda açıklanan makul mimari değişikliklerle iyi bir tutarlılık elde etmek için mekanizmalar bulmuştur.
Daha yüksek güvenilirliğe ulaşma süreci, olaylar meydana gelmeden önce kusurları önlemek, bulmak, tespit etmek ve düzeltmek amacıyla sürekli çalışmaya uygun sıkı ölçümlerle tekrarlanan bir süreçtir. Ekibimiz, aşağıdaki uygulamaların büyük değer taşıdığını belirlemiştir:
- Doğru ölçüm - Kalitenin müşterilere nasıl sunulduğu ve bağımlılıkların bize nasıl kalite sağladığı konusunda tam gözlemlenebilirlik oluşturun.
- Proaktif öngörü - Mimari incelemeleri ve bağımlılık risk değerlendirmeleri gibi faaliyetleri gerçekleştirin.
- Düzeltmeye öncelik verme - Hizmetimizle bağlantılı hizmet ve bağımlılıklar için olay raporu çözümüne daha fazla önem verin.
Daha yüksek güvenilirlik oluşturmak, bir kalite kültürü gerektirir. Ekibimiz zaten performans odaklı geliştirmeye yatırım yapıyordu ve bir sürecin başarısının, bu sürecin benimsenmesine bağlı olduğunu biliyordu. Ekip bu süreci tam olarak benimsedi ve uygulamaları bir standart olarak uyguladı. Aşağıdaki şema, sürecin bileşenlerini göstermektedir:

Doğru Ölçümün Gücü
Metriklere daha derinlemesine dalmadan önce, Hizmet Seviyesi ölçümleri ile ilgili kısa bir açıklama yapmak gerekiyor.
- SLO (Hizmet Seviyesi Hedefi), ekibimizin hedeflediği güvenilirlik hedefidir (ör. %99,999).
- SLI (Hizmet Seviyesi Göstergesi), belirli bir zaman diliminde elde edilen güvenilirliktir (ör. geçen Şubat ayında %99,975).
- SLA (Hizmet Seviyesi Anlaşması), belirli bir zaman diliminde sunmayı taahhüt ettiğimiz ve tüketicilerimizin beklediği güvenilirliktir (ör. haftada %99,99).
SLI, kullanılabilirliği (işlenmemiş veya eksik yanıtların olmaması), arıza toleransını (hizmet hatalarının olmaması) ve elde edilen kaliteyi (beklenmedik hataların olmaması) yansıtmalıdır. Bu nedenle, SLI'mızı bir hizmete gönderilen toplam istek sayısına kıyasla başarılı yanıtların "Başarı Oranı" olarak tanımladık. Başarılı yanıtlar, zamanında ve uygun biçimde gönderilen, yani bağlantı, hizmet veya beklenmedik hataların yaşanmadığı isteklerdir.
Bu SLI veya Başarı Oranı, tüketicilerin bakış açısıyla (yani müşteriler) toplanır. Amaç, tüketicilerimize sunulan gerçek uçtan uca deneyimi ölçmek ve böylece SLA'ların karşılandığından emin olmaktır. Aksi takdirde, müşterilerimizle bağlantı kurmak için tüm altyapı sorunlarını göz ardı eden yanlış bir güvenilirlik algısı yaratılır. Tüketici SLI'sine benzer şekilde, olası riskleri izlemek için bağımlılık SLI'sini de toplarız. Uygulamada, tüm bağımlılık SLA'ları hizmet SLA'sı ile uyumlu olmalı ve bunlarla doğrudan bir bağımlılık vardır. Birinin başarısızlığı, hepsinin başarısızlığı anlamına gelir. Ayrıca hizmetin kendisinden (yani sunucudan) gelen metrikleri de takip edip raporluyoruz, ancak bu yüksek güvenilirlik için pratik bir kaynak değildir.
SLI'lara ek olarak, her derleme, CI iş akışımız tarafından raporlanan kalite metriklerini toplar. Bu uygulama, kalite geçitlerini (yani kod kapsamı) sıkı bir şekilde uygulamaya ve kodlama standardı uyumluluğu ve statik kod analizi gibi diğer anlamlı metrikleri raporlamaya yardımcı olur. Bu konu daha önce "Performans Odaklı Mikro Hizmetler Oluşturma" başlıklı başka bir makalede ele alınmıştı. Güvenlilik söz konusu olduğunda, kaliteye özen göstermek büyük önem taşır; çünkü mükemmel puanlara ulaşmak için ne kadar çok yatırım yaparsak, olumsuz koşullarda sistemin arızalanmayacağından o kadar emin oluruz.
Ekibimizin iki kontrol paneli vardır. Biri, hem Tüketiciler SLI'sine hem de Bağımlılıklar SLI'sine tam görünürlük sağlar. İkincisi ise tüm kalite metriklerini gösterir. Önem verdiğimiz tüm unsurların bir araya getirilmesi ve herhangi bir zaman diliminde raporlanmaya hazır olması için her şeyi tek bir kontrol panelinde birleştirmeye çalışıyoruz.
Arızaları Öngörmek
Mimari İncelemeleri yapmak, güvenilir olmanın temel bir parçasıdır. İlk olarak, yedeklilik olup olmadığını ve bağımlılıklar çöktüğünde hizmetin ayakta kalma imkânı olup olmadığını belirleriz. Tipik replikasyon fikirlerinin ötesinde, hizmetlerimizin çoğu gelişmiş çift önbellek doldurma teknikleri, çift kurtarma stratejileri (failover yerel kuyrukları gibi) veya veri kaybı stratejileri (işlem desteği gibi) uyguladı. Bu konular başka bir blog yazısını hak edecek kadar kapsamlıdır, ancak nihayetinde en iyi öneri, felaket senaryolarını dikkate alan ve performans kaybını en aza indiren fikirleri uygulamaktır.
Öngörülmesi gereken bir diğer önemli husus, bağlantıyı iyileştirebilecek her şeydir. Bu, istemciler için düşük gecikme süresine odaklanmak ve önbellek kontrol teknikleri, sidecar'lar ve zaman aşımı, devre kesiciler ve yeniden denemeler için performans odaklı politikalar kullanarak istemcileri çok yüksek trafiğe hazırlamak anlamına gelir. Bu uygulamalar, önbellekler, depolar, kuyruklar ve HTTP ile gRPC'deki birbirine bağlı istemciler dahil olmak üzere tüm istemcilere uygulanır. Ayrıca, hizmetlerden gelen sağlıklı sinyalleri iyileştirmek ve durum kontrollerinin tüm konteyner orkestrasyonunda önemli bir rol oynadığını anlamak anlamına da gelir. Hizmetlerimizin çoğu, durum kontrolü geri bildiriminin bir parçası olarak bozulma durumlarında daha iyi sinyaller verir ve sağlıklı sinyaller göndermeden önce tüm kritik bileşenlerin işlevsel olduğunu doğrular.
Hizmetleri kritik ve kritik olmayan parçalara ayırmak, en önemli işlevselliğe odaklanmak için yararlı olduğu kanıtlanmıştır. Eskiden aynı hizmette yalnızca yöneticilere özel uç noktalarımız vardı ve bunlar sık kullanılmasa da genel gecikme metriklerini etkiliyordu. Bunları kendi hizmetlerine taşımak, her metrik üzerinde olumlu bir etki yarattı.
Bağımlılık Risk Değerlendirmesi, bağımlılıklarla ilgili potansiyel sorunları belirlemek için önemli bir araçtır. Bu, düşük SLI'ye sahip bağımlılıkları belirlediğimiz ve SLA uyumu talep ettiğimiz anlamına gelir. Bu bağımlılıklar entegrasyon adımları sırasında özel dikkat gerektirdiğinden, yeni bağımlılıkların planlarımız için yeterince olgun olup olmadığını karşılaştırmak ve test etmek için ekstra zaman ayırıyoruz. Bunun iyi bir örneği, Roblox Storage-as-a-Service'i erken benimsememizdir. Bu hizmetle entegrasyon, bulguları ve geri bildirimleri iletmek için hata biletleri doldurmayı ve periyodik senkronizasyon toplantıları yapmayı gerektirdi. Tüm bu çalışmalarda "güvenilirlik" etiketi kullanılır, böylece kaynağını ve önceliklerini hızlı bir şekilde belirleyebiliriz. Yeni bağımlılığın bizim için hazır olduğuna emin olana kadar karakterizasyon sık sık yapıldı. Bu ekstra çalışma, ortak bir hedef için birlikte hareket ederek sunmayı beklediğimiz gerekli güvenilirlik düzeyine bağımlılığı çekmeye yardımcı oldu.
Kaosa Yapı Getirmek
Olayların yaşanması asla istenen bir durum değildir. Ancak olaylar meydana geldiğinde, daha güvenilir olmak için toplanacak ve ders çıkarılacak anlamlı bilgiler vardır. Ekibimiz, tipik şirket çapındaki raporların ötesinde bir ekip olay raporuna sahiptir; bu sayede, etkilerinin ölçeğine bakılmaksızın tüm olaylara odaklanıyoruz. Kök nedeni belirler ve gelecekte bunu azaltmak için tüm çalışmaları önceliklendiririz. Bu raporun bir parçası olarak, diğer ekipleri çağırarak bağımlılık olaylarını yüksek öncelikle düzeltir, uygun çözümle takip eder, geriye dönük değerlendirme yapar ve bize uygulanabilecek kalıpları ararız.
Ekip, burada açıklanan tüm SLI'leri, güvenilirlik nedeniyle açtığımız tüm biletleri ve hizmetle ilişkili olası tüm olayları içeren, hizmet başına Aylık Güvenilirlik Raporu hazırlar. Bu raporları oluşturmaya o kadar alıştık ki, bir sonraki doğal adım bunların çıkarılmasını otomatikleştirmektir. Bu periyodik faaliyeti gerçekleştirmek önemlidir ve bu, güvenilirliğin sürekli olarak izlendiğini ve geliştirme sürecimizde dikkate alındığını hatırlatır.

Araçlarımız, bilinen ve beklenen sorunlar ortaya çıktığında mümkün olan en kısa sürede uyarı almamızı sağlayan özel metrikler ve geliştirilmiş uyarılar içerir. Yanlış pozitifler dahil tüm uyarılar her hafta gözden geçirilir. Bu noktada, tüm belgeleri düzeltmek önemlidir; böylece kullanıcılarımız uyarılar tetiklendiğinde ve hatalar meydana geldiğinde ne bekleyeceklerini bilir ve herkes ne yapması gerektiğini bilir (ör. oyun kitapları ve entegrasyon kılavuzları sık sık uyumlu hale getirilir ve güncellenir).
Sonuçta, kültürümüzde kaliteyi benimsemek, daha yüksek güvenilirliğe ulaşmak için en kritik ve belirleyici faktördür. Günlük işlerimize uygulanan bu uygulamaların şimdiden meyvesini verdiğini görebiliyoruz. Ekibimiz güvenilirliğe büyük önem veriyor ve bu bizim en önemli başarımızdır. Potansiyel kusurların yaratabileceği etkiye ve bunların ne zaman ortaya çıkabileceğine dair farkındalığımızı artırdık. Bu uygulamaları hayata geçiren hizmetler, SLO ve SLA hedeflerine tutarlı bir şekilde ulaşmıştır. Yaptığımız tüm çalışmaları takip etmemize yardımcı olan güvenilirlik raporları, ekibimizin yaptığı çalışmanın bir kanıtıdır ve diğer ekiplere bilgi vermek ve onları etkilemek için paha biçilmez dersler sunmaktadır. Güvenilirlik kültürü, platformumuzun tüm bileşenlerini işte bu şekilde etkilemektedir.
Daha yüksek güvenilirliğe giden yol kolay değildir, ancak insanların bir araya gelme şeklini yeniden tasarlayan güvenilir bir platform oluşturmak istiyorsanız bu gereklidir.
Alberto, Roblox'un Hesap Kimliği ekibinde Baş Yazılım Mühendisi olarak görev yapmaktadır. Oyun sektöründe uzun süredir yer alan Alberto, yüksek ölçeklenebilir mimarilere odaklanan birçok AAA oyun ve sosyal medya platformunda çalışmıştır. Şu anda, en iyi geliştirme uygulamalarını hayata geçirerek Roblox'un büyümesine ve olgunlaşmasına katkıda bulunmaktadır.


