How Blitz scaled their game coaching app with lower latency and leaner operations League of Legends, Valorant ve Fortnite gibi oyunlar için kişiselleştirilmiş antrenman sağlayan hızla büyüyen bir başlangıç. oyuncuların gerçek zamanlı anlayışlar ve maç sonrası analizler aracılığıyla League of Legends efsanelerine dönüşmelerine yardımcı olmak amacıyla. ışık Oyuncular oynarken, uygulama oldukça fazla iş yapar. canlı maç verilerini yakalar, hızlı bir şekilde analiz eder ve gerçek zamanlı oyun ekranları üstlenmesi ve kişiselleştirilmiş oyun sonrası antrenman için kullanır. rehberlik, her oyuncunun mevcut ve geçmişteki oyun aktivitesine ve yüzlerce milyon kullanıcıyı etkileyen milyarlarca maçta toplanan verilere dayanır. Blitz'in popüler istatistikleri ve oyun eğitimi uygulamasının artan farkındalığı sayesinde, sürekli büyüyen kullanıcı tabanları orijinal Postgres ve Elixir tabanlı mimarisini sınırlarına kadar sürdü. – Büyüyen kullanıcı tabanına düşük latensiyel, yüksek kullanılabilirlik ve yatay ölçeklenebilirlik sağlamak için, sonunda: TL;DR Elixir’den Rust’a taşınan destek hizmetleri. Postgres’i ScyllaDB Cloud ile değiştirdi. Redis ayak izlerini önemli ölçüde azaltmıştır. Riak Cluster’ı kaldırdılar. Gerçek zamanlı işleme ile sırt işleme değiştirildi. 100'den fazla mikroservisi çekirdeğinden dört n4‐standart‐4 Google Cloud düğmesine kadar konsolide altyapı (daha az bir Redis örneğinin yanı sıra, kenar cache için) Ek bir bonus olarak, bu değişiklikler Blitz'in altyapı maliyetlerini düşürdü ve mühendislik personelinin veritabanı yükünü azaltdı. Blitz arka planı Naveed Khan (Blitz mühendisliği başkanı) açıklamasında, “Oyun yayıncılarından ve oyun sırasında çok fazla veri topluyoruz. örneğin, League of Legends oynuyorsanız, Riot’un API’sini maç verilerini çekmek için kullanırız ve uygulamanızı yüklerseniz oyun oynamayı da gerçek zamanlı olarak izleriz. Geçmişten Geçen Postgres Blitz'in sisteminin önemli bir parçası, hem takım arkadaşları hem de rakipleri için oyun öncesi verileri analiz eden Playstyles API'dir. Bu yoğun süreç, oyuncu başına 20 maç kadar değerlendirir ve her maçta dokuz ayrı kez çalıştırılır (bir kez her oyuncu için). Takım, performansını iyileştirmek için çok sayıda mikroservisi stratejik olarak yeniden yapılandırdı ve konsolide etti. Ama veri hacmi yoğun kaldı. Brian Morin (Blitz'in ana arka plan mühendisi), "Bu sorgu hacmini yönetebilecek bir veri tabanı çözümü bulmak kritik" diyor. Başlangıçta Postgres’i kullandılar, bu da onlara çok erken hizmet verdi. Ancak, yazma ağırlığındaki iş yüklerini büyüterek, Google Cloud’daki operasyonel karmaşıklığı ve maliyetleri önemli ölçüde arttı. Ayrıca, Postgres’in ölçeği oldukça karmaşıktı. Naveed, “Her türlü şeyi ölçeğe çıkarmaya çalıştık. İhtiyacımız olan ölçeği elde etmek için Postgres’in etrafında çeşitli hizmetler inşa ettik: Redis kümesi, Riak kümesi ve zaman zaman aşırı sayıda Elixir Oban sırası. Başlangıçlar büyüdükçe, genellikle “Sadece Postgres kullanın”dan “Sadece NoSQL kullanın”a geçiş yaparlar. Doğru, Blitz ekibi MongoDB’ye geçmeyi düşündü, ancak sonunda bunu dışladı. “Ekibimizde çok fazla MongoDB deneyimi vardı ve bazılarımız gerçekten beğendi. Ancak, çalışma yükümüz çok yazma ağırlığındadır, binlerce oyuncu aynı anda sürekli bir veri akışı oluşturmaktadır. Belirli iş yükü ve beklenen büyüme için bir şişlik oluştururdu. MongoDB'nin birinci ve ikincil mimarisi Testler, gecikme ihtiyaçlarını karşılayacağını gösterdi, bu yüzden gerekli veri (re)modellerini gerçekleştirdiler ve Postgres'ten RocksDB'ye birkaç küçük oyun geçirdiler. Ancak, ölçek ve yüksek kullanılabilirlik endişelerinden dolayı RocksDB'ye karşı karar verdiler. "Testlerimizden elde edilen verilere dayanarak, RocksDB'nin daha büyük oyunlarımızın yükünü ele geçiremeyeceği açıktı - ve tek bir örneğin dikey ölçeklenmesinin riski yoktu ve sonra tek bir örneğin düştüğünü" açıkladı Naveed. Neden ScyllaDB Backend mühendislerinden biri ScyllaDB'yi önerdi, bu yüzden ulaştılar ve kavramın kanıtını çalıştırdılar. İlk önce kendi donanımları üzerinde test ettiler, sonra ScyllaDB Cloud'a taşındılar. Per Naveed, “Fiyatlar kendiliğinden barındırmaya oldukça yakındı ve ücretsiz olarak tam yönetime ulaştık, bu yüzden hiç düşünmeden. Şimdi Redis kümesi önemli ölçüde azaldı, ayrıca Riak kümesinden ve Oban sıra bağımlılıklarından kurtulduk. Sadece ScyllaDB'ye yazın ve her şey işe yarıyor. İnfrastruktur yönetimi için harcadığımız zaman miktarı önemli ölçüde azaldı.” Performans açısından, değişim, kullanıcı deneyimini düzelteceği amacına ulaştı... ve ayrıca mühendislik ekibleri için yaşamı basitleştirdi. Brian, “ScyllaDB, optimizasyon sonrasında tasarruf etme kapasitesine sahip güçlü performans sağlayan olağanüstü bir performans sergiledi. League ürünlerimiz yaklaşık 5k opps/sec’de, klavyenin yükü% 20’nin altında raporlanmasıyla zirveye ulaştı. En büyük kısıtlama disk kullanımımızdı, bunları hafifletmek için çok sayıda güncelleştirme yayınladık. Yeni sistem artık sık sıkca sonuçları anında geri verebilir. Ayrıca, diğer oyuncular hakkında daha güncel bilgileri sağlayan ve hatta sık sık takım arkadaşları tanımlayabilen bir ScyllaDB klavyesi, önceki ilişkisel veritabanını etkili High-Level Architecture of Blitz Server with Rust and ScyllaDB Elixir Hizmetlerini Rust'a Yeniden Yazmak Büyük bir geri dönüşümün bir parçası olarak, Blitz ekibi tüm altyapısını yeniden düşünmeye başladı – daha önce açıklanan Postgres'ten yüksek performanslı ve dağıtılmış ScyllaDB'ye geçişin ötesinde. Bu veritabanı geçişinin yanı sıra, Elixir tabanlı hizmetlerini daha modern bir dil için de gün batımına koymayı seçtiler. Dikkatli bir değerlendirme sonrasında, Rust açık bir seçenek olarak ortaya çıktı. “Elixir harika ve amacına iyi hizmet etti,” açıklamasında bulundu. “Ama daha geniş bir uygulama ve daha güçlü bir sistem düzey ekosistemi ile ilerlemek istiyorduk. Rust'un yeniden yazılmış hizmetlerinin ilk serisi üretime girdiğinde, Naveed ve ekibi geriye bakmıyor: "Rust harikadır. Hızlıdır ve kompileci, daha sonra çöp toplama sorunlarını düzeltmek yerine öncelikle bellek güvenli kod yazmanıza zorlar. performans C ile karşılaştırılabilir ve yetenek havuzu da Elixir ile karşılaştırıldığında çok daha büyüktür."