Yanıtlar:
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
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 .
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:
Yazılım nedenleriyle:
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.
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.
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 .
Son zamanlarda, Linux sunucularını ne sıklıkta yeniden başlatmalıyım , her şeyin bir yeniden başlatma sırasında veya herhangi bir (büyük) yapılandırma değişikliğinden sonra düzgün bir şekilde başladığını doğrulayarak başka bir iyi noktadan bahsedildi.
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 .
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.