MMORPG sunucusu bakımı


14

Çoğu mmorpg oyununun düzenli sunucu bakımı var, bazıları her gün, bazıları haftada bir kez. Aslında ne yapmaları gerekiyor ve neden gerekli?

Böyle bir projeyle başlarsanız, bundan kaçınmak için ne yapabilirsiniz?

Yanıtlar:


17

Kodlarının en son sürümünü dağıttıklarından şüpheleniyorum, bu da uygulamayı yeniden başlatmasını gerektirir (ve umarım erişimi yeniden etkinleştirmeden önce bazı testleri çalıştırır). Bu açıdan bakıldığında, bu bir StackOverflow sorunu ve daha az bir ServerFault sorunudur.

Bence bir sıcak yama sistemi oluşturmak mümkün, ancak mutlaka inanılmaz derecede karmaşık olurdu. Anladığım kadarıyla, bir MMO sunucusu "uygulaması" birkaç farklı bileşenden oluşur -

  • Oturum açma sunucusu - Kimlik doğrulamayı yönetir ve oyun sunucuları arasında bir "hub" görevi görür. İstemci oyuna girdikten sonra artık giriş sunucusuyla etkileşime girmez. Böyle bir sistemde yamaları uygulayabilir ve oyuna müdahale etmeden giriş sunucusunu yeniden başlatabilirsiniz (ancak kullanıcıların oturum açamayacağı bir zamanınız olacaktır).

  • Oynanış sunucuları - Mantıksal bağımsız birimler ("dünyalar" vb.) Şeklinde gruplandırılmış makine kümeleri. Her bir oyun kümesinin, durumu birbirine uydurmak için bir tür dahili iletişim protokolü kullandığı varsayılmaktadır; muhtemelen her bir kümeyi bir kerede yamalamak zorunda kalacaksınız. Bunu yapmanın olası bir yolu, bir sıcak yük devretmeyi düzeltmektir. Daha sonra her ikisini de yapabilmeniz gerekir

    1. İstemciyi sıcak yük devretmeye bağlanması ve eski kümeden ayırması için uyarın.
    2. Tüm istemciler aktarılırken yük devretme ve güncel olmayan uygulama sunucusu arasında durumu senkronize halde tutun.
  • Veritabanı sunucuları - RDBMS gibi bir tür kalıcı veri deposu. Umarım veri deposunda bu kadar sık ​​değişiklik yapmazsınız. Muhtemelen her oyun sunucusu / kümesinde bağımsız bir veri deposu vardır. Aynı hileyi sıcak bir yük devretme ile kullanabilirsiniz (ve oyun sunucularına bağlantıyı kesmelerini, eski ve yük devretme veritabanlarının senkronize edilmesini beklemelerini, ardından yük devretmeye yeniden bağlanmasını söyleyebilirsiniz) ama bu benim için oldukça riskli görünüyor.

Yukarıdaki durumların tümü, zaten karmaşık bir sisteme inanılmaz miktarda karmaşıklık ekler ve bir kod arızasının veri kaybına veya bozulmasına neden olabileceği bir grup yeri sunar.

Başka bir çözüm,% 100 çalışma süresi için tasarlanmış ve hotpatching koşu kodu için yerleşik yeteneklere sahip bir dil kullanmaktır. Erlang iyi bir seçimdir ( hotpatching örneği ) ve Java'nın benzer işlevleri vardır .


12

Başka hiç kimsenin böyle bir şeyi çalıştırma deneyimi yok mu? Huh.

Hem kodu hem de sistemleri birbirine bağlayan çeşitli nedenler vardır. İlk olarak, mevcut 'büyük' ​​MMO motorların çoğunun birkaç yıl önce programlandığını ve o zamandan beri grafik ve teknoloji yükseltmelerine rağmen, hala bu sistemlerin çoğunun 2000'de yazıldığı şekle bağlı olduğunu unutmayın. Örneğin Eve-Online hala büyük bir Microsoft SQL Server örneğinde çalışıyor, bu yüzden donanımı yükselterek her zaman daha fazlasını çıkarmaya çalışıyorlar.

WoW ve EVE başladığından bu yana yapılan iyileştirmeye örnek olarak, Google'ın MapReduce (ve açık kaynak uygulaması, Hadoop), son derece hızlı olumlayıcı yanıt işleme kuyruğu hizmetleri (Amazon SQS) ve diğerleri gibi dağıtılmış anahtar / değer veritabanlarında yapılan çalışma gösterilebilir. bulut "odaklı teknolojiler.

EVE ile en çok deneyime sahibim (bir battleaxes adamdan daha çok lazerli bir adamım), bu yüzden bu örneklerden bazıları daha EVE odaklı.

Sistem nedenleri söz konusu olduğunda:

  • Fiziksel düğümler tutarlı bir şekilde başarısız olur. Bir düğüm başarısız olduğunda, tipik olarak aktivitesi herhangi bir sayıda araç kullanılarak başka bir yere taşınır. Ancak, düğümün mümkün olan en kısa sürede tekrar hizmete sokulması gerekir. EVE'nin durumunda, hem yığınsız bir işleme dili hem de sanal sunucular kullanırlar; Blizzard'ın mimarisinin nasıl olduğundan emin değilim.
  • Veritabanı tutarlılığının kontrol edilmesi, günlüklerin temizlenmesi ve dizinlerin ve veri önbelleklerinin yeniden oluşturulması gerekir. Bu, özellikle tek bir "canlı" veritabanı örneğine sahip EVE gibi bir sistemde önemlidir.
  • İşletim sistemi yamalarının, başka bir yere taşınmak zorunda kalmadan düğümleri yeniden başlatabilecekleri bir zamanda uygulanması gerekir. Geçiş, aksi takdirde çevrimiçi işlemeye ayrılabilecek çok sayıda ağ kaynağı gerektirir.
  • RDBMS tabanlı MMO'ların veri kilitleme ve referans bütünlüğü ile ilgili büyük sorunları vardır. Kesinti süresi, etkinlik günlüklerindeki eski kilitleri ve bütünlük kesintilerini temizlemek için kullanılır.
  • Oyunların çoğu, ağır kullanım alanlarındaki, yani doğu sahili ile batı sahili ABD arasındaki statik veya yarı statik (aşağıdaki önbellek özet verilerine bakın) bilgileri için coğrafi olarak yerleştirilmiş veri önbellekleri uygular. Bu önbellekler, kapalı kalma süresi boyunca manuel olarak güncellenir.

Yazılım nedenleriyle:

  • Oyunlar çalışırken, çok fazla OLTP kullanır - bu On-line İşlem İşleme - veritabanlarına okuma / yazma türü. Ancak, bazen özet bir rapor istersiniz ... son 3 yılda öğütme sırasında belirli bir canavarı öldürdüğünüz gibi. En iyi şekilde, dev bir veri kümesindeki çok sayıda satıra dayanan özet bilgileri içeren bir OLAP raporu - On Line Analytical Processing - ele alınır. Gerçekte, oyunlar, okunması gereken sorgu sayısını sınırlamak için bir önbellek oluşturmak için OLAP kullanan sistemleri uygular - yani, belirli bir tarih itibariyle toplam oluştururlar ve sonra soruyu sorduğunuzda sadece satırları okurlar. belirli bir tarihten bu yana geçen süreyi özetleyen OLTP deposundan. İkisini birleştirin ve aslında hayatınızın ne kadar değersiz hale geldiğini ölçebilirsiniz.
  • Bir yazılım problemi olarak gördüğüm, ancak yazılım geliştiricilerinin bir sistem problemi olarak gördükleri sıcak düzeltme eki. ;)
  • Eşya depolarını yenilemek - Havva'da asteroit kayışları her gece yenilenir ve bazı kompleksler de geri dönüştürülür. Bu, çevrimiçi iken bir dereceye kadar yapılabilir, ancak bazı algoritmalar çok karmaşıktır ve bir önceki günün ekonomik aktivitesini özetlerken veritabanını kısa bir süre dizlerinin üstüne getirdikleri için çevrimdışı modda yapılması gerekir.

Hem kapalı hem de açık döngülerle bir ekonomiyi yönetmek MMO operatörleri için bir sorundur - bana inanmıyorsanız, oyun ekonomileri ve Ultima Online gibi eski oyunların bazı çalışmaları hakkında yazılmış akademik makaleleri okuyun. nispeten ilkel ekonomilere sahipti. Açık döngüleri yenilemek ve hile ve diğer olumsuz ekonomik faaliyetleri tanımlamak için yapılması gereken analizin, bazen sadece veritabanı tamamen kilitliyken alınabilen verilerin anlık görüntüsü ile çevrimdışı olması gerekir.

Dikkat ederseniz, Havva'nın bakımı, birincil veri merkezinin bulunduğu İngiltere'de öğle saatlerinde gerçekleşir.


3

Blizzard'ın (sorunuzu yayınladığınız bir Salı sabahı olduğu göz önüne alındığında) toplam sürenin bakım için koyduğu toplam sürenin tüm küme için olduğundan şüpheleniyorum; her sunucunun çalışması çok uzun sürmez.

Bireysel sunucuları daha hızlı bir şekilde geri getirmek mümkün olsa da, alemleri programda daha erken düşen oyunculara karşı kayırmacılık çığlıklarını yasadışı hale getirecektir. Bu nedenle, tüm işler bitene kadar her şeyi aşağı tutarlar; yüzlerce alem üzerinde çalışmakla birlikte, muhtemelen işin çoğunu paralel olarak yapıyorlar, ancak yine de işleri çevrimiçi hale getirmeden önce son bir kontrolü seri hale getiriyorlar. Bir donanım yükseltmesi yapıyorsanız, bu muhtemelen sahip oldukları kadar veri merkezinde serileştirilir.

Bakımı neden yaptıklarıyla ilgili olarak, bunların bazıları performansın yeniden başlatılması olabilir. Bu tür yeniden başlatmaların gerekmemesi harika olsa da, bunu yapmamanın maliyeti, bunun yapılmamasının etkisine karşı seçimlerini burada yönlendirebilir.

Neden süreçleri kümelemediklerine ve haddeleme bakımını gerçekleştiremediklerine baktığınızda, WoW altyapısı hakkında çok az insanın bildikleri, birden fazla makinenin her bir bölge için hizmet sağladığını (yani bir tanesi dünya, biri örnek ve baskınlar, biri savaş alanları için) vb.) durum paylaşımlı etkin etkin işlem kurulumu kullanmazlar. Canlı durum paylaşımı yoktur, sadece bir veritabanı aracılığıyla kalıcı verilerin paylaşılması.

Sonunda, bu büyük abone tabanına durum bilgisi olan bir çevrimiçi hizmet sunmanın mekaniği, bir web sitesi veya diğer geleneksel internet tabanlı hizmet hakkında konuşurken benimseyebileceğimiz en iyi uygulamalardan bazılarına meydan okuyor.


Aslında, zorlukların çoğu o merkezi devlet idame düğümü, veritabanı etrafında dönmektedir. Bu yetkili kayıt. Durumu yöneten tüm diğer şeyler (sunucu, istemci ve aradaki önbellekleme mekanizmaları), verinin veritabanında hangi verileri oluşturduğuna dair gerçekten müzakerecidir. Gecikme, kaydettiği zinciri geri doğrulamak için veritabanının geçmesi gereken zamandır.
Karl Katzke

1

EvE Online'daki en son uzatılmış duruş sürelerinden bazıları, daha hızlı bir SAN gibi yeni donanımların kurulmasıyla ilgilidir. Yeni sürücüde yeni bir dosya grubu oluşturarak ve daha sonra ana sürücüyü boşaltarak teknik olarak veri yığınını taşıyabilmekle birlikte, sabit G / Ç nedeniyle uzun süreli düşük performansla sonuçlanacaktır. Böylece tercih 1.1TB veritabanının bağlantısını kesin ve tek seferde taşımak için.

Bu sorunun cevabı ayrıca belirli bir uygulamaya da dayanmaktadır. Örneğin, belirli bir yıldız sistemini işleyen bir sunucu, oyun oynamayı bozmadan çalışırken değiştirilemez, bu nedenle daha güçlü sunucuları potansiyel etkin noktalara yeniden atamak için kapalı kalma süresi kullanılır. Ayrıca yıldız sistemlerinin mülkiyet hesaplamaları (egemenlik) hesaplanır. Bu, her biri oyuncu eylemlerine bağlı olarak değişebilen onlarca farklı değişkene bağlıdır. Söylemeye gerek yok, bunu canlı yapmak aşırı kilitleme ve / veya diğer eşzamanlılık sorunlarına neden olabilir. Ama bu iyi bırakılır adresleme StackOverflow'daki .


Sanallaştırmayla birlikte, yoğun yüklü sunucuları daha fazla kaynağa sahip donanıma geçirmenin canlı ve otomatik olarak yapılması mümkün olmalıdır ... özellikle çoğu eylem gecikmesinin birçok milisaniyede (bazen yüzün üzerinde) ölçüldüğü bir oyunda. Ama karmaşık ve pahalı olabilir ^^
Oskar Duveborn

Oskar, EVE ve WoW'un arkasındaki ana teknolojinin, bu teknolojiler gerçekten olgunlaşmadan yaklaşık 2002'de yazıldığını unutmayın.
Karl Katzke

0

muhtemelen büyük DB şema değişiklikleri gibi kümeleme / yük dengeleme yoluyla başa çıkamayacağınız bir şey.



0

MMORPG oyunları tarafından basit bir donanım yükseltmesi (veya donanım değişimi) "sunucu bakımı" olarak da sunulur. O kadar önemsiz ki sık sık unutuyoruz.


0

Erlang'da sıcak kod yükseltmelerini ve dağıtımını destekleyen bir MMO mimarisi uyguladım. Örneğin, bir "GamePlay Server" arbiter sayıda makinede çalışabilir, eğer bir donanım yükseltmesine ihtiyaç duyulursa, nesneleri (gerçek zamanlı olarak) diğer makinelere aktarılabilir. Bu, herhangi bir kesinti olmadan yazılım donanımında yükseltmelere olanak tanır.

Sitemi http://www.next-gen.cc adresinden kontrol edebilirsiniz .


0

Bakım penceresinin, bileşenlerin başarısız olmamasını sağlamak için rutin donanım değiştirmeye de izin verdiğine inanıyorum.


Genellikle hayır. Donanım üzerinde bazı öngörülü metrikler çalıştıracaklar, ancak başarısızlık belirtileri göstermedikçe, yani RPM'ler düşüyorsa veya SMART yüksek bir yazma hatası sayısı göstermiyorsa, genellikle sistemdeki tüm fanları veya diğer 'giderilebilir' bitleri proaktif olarak değiştirmezler.
Karl Katzke
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.