Çok eski bir web tarayıcısı kullanıyorsunuz. Bu veya diğer siteleri görüntülemekte sorunlar yaşayabilirsiniz.. Tarayıcınızı güncellemeli veya alternatif bir tarayıcı kullanmalısınız.
Yapay Zeka, Veri Bilimi ve Bulut Oyun Geliştirmenin: İnanılmaz Gücü
'i yeniden markalaştırarak son kullanıcılara MMO geliştirmenin kapılarını açmayı hedefleyen bir ekibiz. Bu hedefe ulaşmak için eşi benzeri görülmemiş bir altyapı ve dahili ağ yapısıyla MMO geliştirmenin gereksinimlerini hepsi bir yerde toplayan bir yapı geliştiren ve yayınlayan olma konusunda son derece kararlıyız.
Laniatus Games olarak, yapay zeka, veri bilimi ve bulut geliştirme teknolojilerinin mükemmel bir birleşimi olan teknolojimiz LaniEngine ve onun resmi oyunu M2M'in geliştirme sahnesinden bazı kesitleri sizlerle paylaşmak istiyoruz. Bizlere bu yolculukta destek olmak için, oyunumuzu istek listenize ekleyebilir, ayrıca 'Playtest' sürümüne katılarak sınırlı erişim kapsamında oyunu deneme şansına sahip olabilirsiniz.
Konu ve kapsamı:
Bir çoğunuzun bildiği üzere, Mayıs ayı itibariyle gerçekleştirdiğimiz kitlesel fonlama kampanyası sırasında Metin2 oyununun yayıncı şirketi tarafından her zaman olduğu gibi bizi de hedefe aldılar ve onların asılsız ve gerçek dışı telif hakkı iddialarıyla karşı karşıya kaldık. Bu durumu çözmek için 30 iş günü boyunca mücadele ettik, hukuk ofisimiz tarafından yürütülen soruşturma sonucunda nihayet oyunun (I.P) fikri mülkiyetinin tarafımıza ait olduğunu kanıtladık. Haksız şekilde söz konusu şirket tarafından fesih edilen ve kapatılan
ve diğer servis platformlarımıza karşı bildirimlerimizi de sunarak onları tekrar etkinleştirdik. Ancak, hala bu konuda asılsız iddiaların ve söylentilerin bir takım insanlarca ortalıkta dolaştığını gözlemliyoruz. Bu nedenle bu iddiaları da çürütmek adına, altyapımızın ve mimarimizin ne kadar benzersiz ve eşsiz olduğunu, hiç bir yerden bir kopya niteliği taşımadığını herkese göstermek ve bilinçlendirmek istedik. Farklı forum sayfalarını seçmek yerine burada bu konuyu paylaşmak istedik. Bilmenizi isteriz ki, Türkiye'de MMP düzeyinde MMORPG geliştirmekle kalmayıp, monetization model ile traction oluşturup bulut oyun motoru sağlayıcılığı yapan tek şirket olmanın gururunu taşıyoruz.
Bu içeriği oluşturmamızın tek amacı bu da değil. Yakın gelecekte, lansmanımızdan sonra oyun motorumuzu halka açık (sınırlı) bir geliştirme ortamı olarak sunmayı ve MMO oluşturmanın sınırlarını ortadan kaldırmayı planlıyoruz.
Öncesinde bir spoiler olsun istedim. İçerik ilgi görmeye başlarsa devamını getirmeyi düşünüyorum.
2024 Q1 - 5 ila 12 Şubat'da Steam Next Fest'de görüşmek üzere
Öncelikle tebrik ederim iyi bir sistem geliştirilmiş fakat aklımda bazı sorular oluştu. Veriyi patch göndermeden kullanıcıya aktarmak zor değil fakat optimize çalışmasını sağlamak oldukça zor. Bu sistemi nasıl kullandığınızı merak ediyorum. Kullanıcı herhangi bir pencereyi açtığında o pencerenin verisi anlık olarak sunucudan mı çekiliyor yoksa sunucuda herhangi bir değişiklik yapıldığında bu değişiklik direkt istemcilere mi gönderiliyor?
Öncelikle tebrik ederim iyi bir sistem geliştirilmiş fakat aklımda bazı sorular oluştu. Veriyi patch göndermeden kullanıcıya aktarmak zor değil fakat optimize çalışmasını sağlamak oldukça zor. Bu sistemi nasıl kullandığınızı merak ediyorum. Kullanıcı herhangi bir pencereyi açtığında o pencerenin verisi anlık olarak sunucudan mı çekiliyor yoksa sunucuda herhangi bir değişiklik yapıldığında bu değişiklik direkt istemcilere mi gönderiliyor?
Değerlendirmeniz için teşekkür ederim. Cloud rendering hizmeti, kullanıcılara veri yamaları olmadan erişim sağladığımız kritik bir özelliktir. Bu hizmet, özel olarak tasarlanmış bir sunucu bileşeni ile entegre edilmiştir. Bu bileşen, sunucu tarafında gerçekleşen herhangi bir değişikliği doğrudan oyun istemcisine iletir. Bu yaklaşım, pencereyi açma işlemine gerek kalmadan anlık güncellemeleri sağlar. Oracle veritabanı, bu sistemin temelini oluşturan en önemli bileşenlerden biridir. Oracle veritabanı, yüksek verimlilik ve güvenilirlik sağlamak amacıyla özel olarak yapılandırılmıştır. Bu, veri depolama, sorgulama ve güncelleme işlemlerini optimize ederek ölçeklenebilirliği sağlar. Dosya depolama ve yönetimi, Oracle SQL ile yönetilen bir dosya deposu tarafından sağlanmaktadır. Bu, verilerin güvenli bir şekilde depolanmasını ve işlenmesini sağlar. Verilerin güvenliği ve bütünlüğü, bu sistemdeki kritik bir odak noktası aslına bakarsanız. Tüm bu bileşenler, yüksek seviyeli bir mimari içinde entegre edilir ve sonuç olarak son derece güçlü bir sistem oluşturur. Bu sistemin her bir bileşeni, özellikle ölçeklenebilirlik ve güvenlik açısından özel olarak tasarlanmıştır. Bu hizmetle ilgili daha fazla detaylı görüşme yapmak isterseniz, lütfen bize ulaşın. Size daha fazla bilgi sağlamaktan memnuniyet duyarız ve sistemimizin nasıl çalıştığına dair daha fazla ayrıntı sunabiliriz.
'i güncel tutmaktadır. Videoyu YouTube platformunda görüntülemeniz playlist'i görmenizi sağlar. Ara sıra göz atmanız faydalı olabilir. Az önce güncellendi. Bilginize.
Hmm. Eminim bunu daha önce de yapmak isteyenler olmuştur. Milyonlarca dolar bütçesi olan firmaların bile bunu yapmamış olmasının nedenleri var. Gerçi onlar genelde risk almak istemez. Özellikle de böyle büyük bir risk. Çünkü hesap verdikleri yerler var. Sizin bunu bağımsız olarak yaptığınızı anlıyorum. Bu da beni ümitlendiren bir durum çünkü sektöre yenilikleri genelde bağımsız geliştiriciler getiriyor. Yine de bahsettiğimiz yüksek bütçeli geliştiriciler bunu şimdiye kadar yapmadı. Yaptıysa da bu kadar kapsamlı yapmadı. Ben hiçbir oyunda anlık olarak yeni model eklenip kullanıldığını görmedim. Bunun sebeplerini de anlayabiliyorum. Siz bunu yapıyorsunuz ve sorunsuz çalışıyor gibi görünüyor. Ancak önemli bir soru: Bu sistemi aktif kullanıcı sayısı yüksekken test ettiniz mi? Yüksek kullanıcıda test etmemiş olsanız bile maksimum kaç kullanıcı ile test ettiğinizi merak ediyorum. Çünkü yapılan değişiklik yeni bir içerik eklemekten ziyade motorda var olan bir içeriği anlık olarak kullanıcılara sunmak olduğunda bile kullanıcı sayısı çok ise birçok sorun yaşanabiliyor.
Mesela haritanın bir yerine yeni bir ağaç eklediniz ve anlık olarak istemcilere gönderdiniz.
Verinin istemciye gidip gitmediğini nasıl kontrol ediyorsunuz?
Diyelim ki haritaya bir ağaç eklediniz. O anda sunucuda 100 kullanıcı var ve bunlardan 10 tanesine veri gönderilemedi. Bu durumda diğer oyuncular ağacı görürken geri kalan 10 oyuncu ağacı görmeden oynamaya devam mı edecek? Buradaki önleminiz nedir?
Yaptığınız bir değişiklik o anda bazı oyuncuları etkiliyorsa ne olacak? Örneğin bir yapı eklediniz ama o yapının olduğu yerde o anda oyuncular var. Yapıyı ekleyip istemcilere gönderdiğinizde o oyuncuların akıbeti ne olacak? Burada oluşabilecek hatalara karşı nasıl önlem aldınız?
Hmm. Eminim bunu daha önce de yapmak isteyenler olmuştur. Milyonlarca dolar bütçesi olan firmaların bile bunu yapmamış olmasının nedenleri var. Gerçi onlar genelde risk almak istemez. Özellikle de böyle büyük bir risk. Çünkü hesap verdikleri yerler var. Sizin bunu bağımsız olarak yaptığınızı anlıyorum. Bu da beni ümitlendiren bir durum çünkü sektöre yenilikleri genelde bağımsız geliştiriciler getiriyor. Yine de bahsettiğimiz yüksek bütçeli geliştiriciler bunu şimdiye kadar yapmadı. Yaptıysa da bu kadar kapsamlı yapmadı. Ben hiçbir oyunda anlık olarak yeni model eklenip kullanıldığını görmedim. Bunun sebeplerini de anlayabiliyorum. Siz bunu yapıyorsunuz ve sorunsuz çalışıyor gibi görünüyor. Ancak önemli bir soru: Bu sistemi aktif kullanıcı sayısı yüksekken test ettiniz mi? Yüksek kullanıcıda test etmemiş olsanız bile maksimum kaç kullanıcı ile test ettiğinizi merak ediyorum. Çünkü yapılan değişiklik yeni bir içerik eklemekten ziyade motorda var olan bir içeriği anlık olarak kullanıcılara sunmak olduğunda bile kullanıcı sayısı çok ise birçok sorun yaşanabiliyor.
Mesela haritanın bir yerine yeni bir ağaç eklediniz ve anlık olarak istemcilere gönderdiniz.
Verinin istemciye gidip gitmediğini nasıl kontrol ediyorsunuz?
Diyelim ki haritaya bir ağaç eklediniz. O anda sunucuda 100 kullanıcı var ve bunlardan 10 tanesine veri gönderilemedi. Bu durumda diğer oyuncular ağacı görürken geri kalan 10 oyuncu ağacı görmeden oynamaya devam mı edecek? Buradaki önleminiz nedir?
Yaptığınız bir değişiklik o anda bazı oyuncuları etkiliyorsa ne olacak? Örneğin bir yapı eklediniz ama o yapının olduğu yerde o anda oyuncular var. Yapıyı ekleyip istemcilere gönderdiğinizde o oyuncuların akıbeti ne olacak? Burada oluşabilecek hatalara karşı nasıl önlem aldınız?
Değerlendirmeniz için teşekkür ederim. Bunu daha önce zaten yaptılar (yine biz oluyoruz) Idea Fabrik PLC. 2009 yılından itibaren HeroEngine ve HeroCloud'u yayınlamaktadır. Elbette bu teknolojiyi geliştiren ve bu noktalara ulaştıran zaten Idea Fabrik PLC'dir. Ancak biz Idea Fabrik'in başına geçerek çok daha fazlasını yapmaya hedef koyduk. Bu oyun motorunun tamamını yeniden markalaştırarak ve yeni özellikler dahil ederek son kullanıcıya ulaştırmaktır hedefimiz. Normalde HECloud çok maliyetli bir süreçti ancak biz bunu indirgemeyi ve in-house duruma getirmeyi istedik. Bu teknolojiyi birebir kullanmak için Unity3D I.P'yi istedi ancak Idea Fabrik zamanında vermedi. Bu nedenle de Unity Cloud bir noktaya kadar geliştirildi sonra bırakıldı. Çünkü aynısını denemeye çalışan bir çok şirket ve ekip vardı ancak kimse bunu yapamadı. Çünkü ölçeklenebilirliği kontrol altında tutmak çok zordur. Anlık güncelleme olayı çok farklı bir işlevdir. Üç farklı çeşit anlık güncelleme bulunur. SRTS/HRTS ve NRTS bunların her birinin kullanım alanları farklı olsa da biz çoğunlukla NRTS kullanıyoruz. Ayrıca StarWars Old The Republic oyunu HeroEngine ile prototiplenmiştir ve real-time sisteme sahiplerdi ancak daha sonra engine değiştirdiler, bunun nedeni de tamamen HeroEngine'in çok eski bir sürümüne sahip olmalarıydı. Şuanki güncel oyun motoru bizim dışımızda hiç bir kaynaktan temin edilemiyor buda benzersizliğini net olarak ifade ediyor. Sorunuza gelecek olursak;
- Biz bunu yapıyoruz ve sorunsuz çalışıyor, çünkü yaklaşık olarak 5k CCU'da stress testi yapıldı. Bu CCU'lar makine zamanlı CCU olarak çalıştı ancak bilirsiniz ki Makine zamanlı CCU yani PeakCCU gerçek zamanlı Increasing CCU aratmayacak değerler verebilir. Çünkü PCCU da her kullanıcının oturum açma, oyun oynama, oyun içi etkileşimler gibi belirli davranışları simüle eden senaryoları vardır. Apache JMeter ve Gatling raporlarımıza göre 20k CCU kadar ağ testi başarılı en azından %87 oranında. Test senaryolarında test süresi boyunca kullanıcı sayısını artırarak veya azaltarak sunucunun nasıl cevap verdiğini gözlemledik. Sunucu kısmında ise monitoring değerlerimizde sunucu yükünü sürekli olarak izledik ve performans sorunlarını belirlemek için metrikleri inceledik. CPU kullanımı, bellek kullanımı, ağ trafiği gibi verilerimizde 10k stress'de %40'ı aşmadı. İşte örnek bir CCU raporumuz aşağıdaki gibidir (metrik ve veriler belgelendirilmiş ve resmi şirket kimliği ile imzalanmıştır.);
LaniEngine DudeServer Stress Test Report - MH8830
Test Date: 06/15/2023
Testing Duration: 72 Hours
CCU Target: Phase 1 / 5,000 CCU's
Summary:
LaniEngine - DudeServer traffic and bandwidth module provides the results of stress testing on the game server's infrastructure. The purpose of the testing was to evaluate how the server handled a given Concurrent User (CCU) load. According to our analysis, DudeServer was quite successful in phase 1.
Test Scenario:
Specified Number of CCUs: 5000 CCUs
Test Duration: 24 Hours / Conditional channel behavior
User Behavior: Logins, character selection, gameplay, in-game interactions, social behavior, skill and chat usage.
Results:
CCU Success:
We successfully exceeded the stated target of 5000 CCU. The server easily accommodated the 8470 CCU with the predicted server hosting values (written on page 2).
Response times:
Average response time: 32ms
Maximum response time: 76ms
Response times supported a fast and user-friendly gaming experience. Min 8000Mb/s line required for the anticipated end user.
Server Resource Usage: (dudeserver/firestorm)
CPU usage: 43%
Memory usage: 67%
Network traffic: 108 Mbps // per-multi Instance
Server resources were used efficiently throughout the test. Due to real-time cloud performance, the average line required for the server is 10,000Mbps/s + redundancy.
Performance issues:
No significant performance issues were detected during testing. A 5,000mb/s line was used in use. In high CCU cases the projected line is 10,000Mb/s. The server was running stably under high CCU load. There were no DudeServer and FireStormAPI crashes. Our automatic dynamic scaling systems were under high routine.
Suggestions:
Backup and Backup Servers:
We must develop strategic redundancy plans with backup servers to ensure uninterrupted service during high CCU periods.
Solution:
Based on the results of this stress test, the LaniEngine server infrastructure is capable of successfully handling the specified high CCU loads. No performance issues were detected and server resources were used efficiently. However, recommended improvements should be implemented to ensure a seamless experience for a wider range of players. At least 10,000Mb/s server line is required.
Mesela haritanın bir yerine yeni bir ağaç eklediniz ve anlık olarak istemcilere gönderdiniz.
Verinin istemciye gidip gitmediğini nasıl kontrol ediyorsunuz?
Diyelim ki haritaya bir ağaç eklediniz. O anda sunucuda 100 kullanıcı var ve bunlardan 10 tanesine veri gönderilemedi. Bu durumda diğer oyuncular ağacı görürken geri kalan 10 oyuncu ağacı görmeden oynamaya devam mı edecek? Buradaki önleminiz nedir?
Yaptığınız bir değişiklik o anda bazı oyuncuları etkiliyorsa ne olacak? Örneğin bir yapı eklediniz ama o yapının olduğu yerde o anda oyuncular var. Yapıyı ekleyip istemcilere gönderdiğinizde o oyuncuların akıbeti ne olacak? Burada oluşabilecek hatalara karşı nasıl önlem aldınız?
Bir oyun nesnesi, statik veya dinamik olsun, öncelikle sunucunun Yerel Depo'sunda saklanır.
Sunucu fiziksel uygulamaları yaptıktan sonra, son kullanıcıya FQN ID olarak iletilir. Temelde eklenen nesneyi kullanıcıya göndermiyoruz; sunucu tarafındaki FQN verisini iletiyoruz ve son kullanıcının bunu görmesine ve etkileşimde bulunmasına olanak tanıyoruz. Ancak, nesne asla kullanıcının bilgisayarında işlenmez. Render işlemi sunucu tarafından gerçekleştirilir ve kullanıcı yalnızca yansımayı görür. Oyuncuya sunulan 2GB oyun istemcisi, aslında oyun motorunun teknik verisidir ve varlıklar veya oyun içeriği içermez.
Tüm veri sunucu tarafındaki Yerel Depo'da (Local Repository) saklanır. Sunucuda 100 kullanıcı bulunduğunda, FQN tüm 100 kullanıcıya aynı anda iletilir. Bu işlem, arka planda çalışan ayrı bir mikro işlem tarafından yönetilir ve veri anında milyonlarca kullanıcıya iletilebilir. Bazı kullanıcıların gördüğü ve diğerlerinin görmediği yanılgısına sahip olabilirsiniz ancak doğru değildir. FQN kullanımının temel nedeni, Oracle'ın büyük gücüdür. Oracle veritabanlarının milyarlarca veriyi aynı anda işleyebilme kapasitesine sahip olduğunu bilirsiniz. Bu nedenle CPU başına lisanslanır ve yıllık maliyeti 200.000 USD'yi aşar. (en azından bizimki aşıyor)
Yaptığımız herhangi bir değişiklik, oyun içindeki hiçbir anlık kullanıcıyı etkilemez. Bu, CCU'nun var olduğu haritanın aslında bir nesne olmadığı anlamına gelir. Yani basitçe bu harita yani INSTANCE Metin2 oyunundaki gibi pack dosyasında tutulmaz. Tasarlanan SeamlessWorld benzersizdir ve ayrı bir dinamik işlemdir. Benzersiz bir şekilde çalışır ve bir dinamik Instance gibidir. Yani, oyun içindeki bir Instance, örnek bir sunucu gibi çalışır ve shutdown edilebilir. Bu nedenle bomboş bir space olayımız editörümüzde yoktur, diğer oyun motorları gibi.
Daha önce belirtildiği gibi, tekrar edeyim: Daha fazla bilgi isterseniz, Discord veya Google Meeting üzerinden canlı bir görüşme ayarlayabiliriz. Teknolojimizi saklamıyoruz ve bunu çalışma zamanı ortamında göstermek, IP sorunu oluşturmaz. Ayrıca, bu teknolojinin devrim niteliğinde olduğunu ve oyun pazarını değiştirebileceğini belirtmek son derece kritik bir önme sahiptir.
@DaRKLoRD
Yukarıda ki yazılı yorumumun videolu sözel karşılığını konuya olan yoğun ilginizden kaynaklı sizin için yaptım. Aşağıda iki video mevcut. Bu videolardan birincisi FQN sistemini (yüzeysel) anlatıyor ve sorunuzun yanıtını veriyor. Video daha çok hafif eğlenceli bir simülasyon gibi oldu
Mesela haritanın bir yerine yeni bir ağaç eklediniz ve anlık olarak istemcilere gönderdiniz.
Verinin istemciye gidip gitmediğini nasıl kontrol ediyorsunuz?
Diyelim ki haritaya bir ağaç eklediniz. O anda sunucuda 100 kullanıcı var ve bunlardan 10 tanesine veri gönderilemedi. Bu durumda diğer oyuncular ağacı görürken geri kalan 10 oyuncu ağacı görmeden oynamaya devam mı edecek? Buradaki önleminiz nedir?
Yaptığınız bir değişiklik o anda bazı oyuncuları etkiliyorsa ne olacak? Örneğin bir yapı eklediniz ama o yapının olduğu yerde o anda oyuncular var. Yapıyı ekleyip istemcilere gönderdiğinizde o oyuncuların akıbeti ne olacak? Burada oluşabilecek hatalara karşı nasıl önlem aldınız?
İkinci video ise Instance ve channel yapımızı anlatan bir video aslında. Bu devasa işlemleri ne tür bir mimaride yapıyoruz ölçeklenebilirliği dinamik olarak nasıl sağlıyoruz bunları anlatan bir özet.
Videolar açılmazsa 30-40 dakika sonra tekrar deneyin, iyi çalışmalar.
Konu güncellendi, playlist'e yeni içerik dahil edildi. LSL (Lani Script Language) kullanımı ve gerçek zamanlı sunucu kodu yazma, derleme işlemi gösterildi. Değerlendirmelerinize açıktır