Bir Metin2 sunucusunun bana dağıtık sistemler hakkında öğrettikleri.
Çocukken Metin2 adlı bir MMO için bir PvP sunucusu işletiyordum. Bir oyun işlettiğimi sanıyordum. Aslında ilk dağıtık sistemimi işletiyordum — canlı bir ekonomi, bir yük problemi, bir kötüye-kullanım yüzeyi ve dakikalar içinde her hatayı bulacak birkaç yüz kullanıcı. Şimdi çoklu-ajan sistemlerinde yaptığım her şeyi, önce yanlış, sonra doğru, o sunucuda öğrendim.

Atakan Özalan
Kurucu ortak & mühendislik lideri, GOGOGO LLC

'Dağıtık sistem' lafını duymadan önce, bir tane işletiyordum. Çocukken Metin2 adlı bir MMO için bir PvP sunucusu barındırdım — büyürken içinde yaşadığım oyunlardan biri. Kafamda bir oyun işletiyordum. Geriye bakınca, ilk gerçek üretim sistemimi işletiyordum: kalıcı bir dünya, canlı bir ekonomi, birkaç yüz eşzamanlı kullanıcı, bir kötüye-kullanım yüzeyi ve bir çalışma süresi beklentisi. O sunucudan, çoğunlukla onu bozarak, sonradan aldığım herhangi bir dersten daha fazla mühendislik öğrendim. Bana öğrettiği bu — çünkü her ders, yıllar sonra, GOGOGO LLC'de çoklu-ajan sistemlerinde geri geldi.
Ders 1 — Kullanıcılar çekişmeli bir yük testidir
Bir oyuncu kitlesinin sana öğrettiği ilk şey, sistemini nasıl kullanacaklarını hayal edemeyeceğindir. Bir sunucu ayarını ince ayarlardım, kendimi zeki hissederek, ve dakikalar içinde bir oyuncu zeki ayarımı bir kopyalama açığına ya da bir çökmeye çeviren eylem kombinasyonunu bulurdu. Tek oyuncu değil — nüfus. Birkaç yüz kişi, hepsi aynı anda sistemini dürtüyor, bıraktığın her kenarı hızla bulacak.
Bu bir saldırı gibi hissettirmeyi bıraktı ve bir hizmet gibi hissettirmeye başladı. Oyuncular bedava, amansız, çekişmeli bir test paketiydi. En kötü girdinin geleceğini varsayarak tasarlamayı öğrendim, çünkü canlı bir sunucuda her zaman gelirdi, anında. Şimdi çoklu-ajan sistemleri kurarken aynısını varsayıyorum: düşünmediğim girdi çoktan yolda ve değerlendirme harness'ı, müşteri olmadan önce çekişen olmak için var.
Ders 2 — Canlı bir ekonomi, bozabileceğin bir geri besleme döngüsüdür
Metin2 sunucusunun bir ekonomisi vardı: düşme oranları, para birimi, eşya değerleri, oyuncu ticareti. O sayıları ayar sandım. Ayar değillerdi — bir geri besleme döngüsüydüler. Bir düşme oranını biraz yükselt ve oyun-içi para birimi şişer, fiyatlar bozulur ve bir hafta sonra tüm ekonomi, hiçbir tek değişikliğin sorumlu görünmediği bir şekilde bozuktur.
Bu, değişikliklerine tepki veren bir sistemle ilk gerçek karşılaşmamdı — tek bir değişken hakkında izole akıl yürütemezsin çünkü her şey oyuncuların davranışı üzerinden bağlı. Bir çoklu-ajan sistemi tam olarak bu. Bir ajanın prompt'unu değiştir ve aşağı akışındaki ajanlar farklı davranır ve etki üç adım ötede ortaya çıkar. Bir ajanı izole ayarlayamazsın, tıpkı bir düşme oranını izole ayarlayamadığım gibi. Onu değiştirirsin, tüm ekonomiyi izlersin, ölçersin.
Ders 3 — Asıl düşman durum bozulmasıdır
Metin2 sunucusundaki bir çökme can sıkıcı ama dürüsttü — düşerdi, yeniden başlatırdım, oyuncular söylenir, hayat devam ederdi. Gerçekten canı yakan şey durum bozulmasıydı: hiçbir şeyi çökertmeyen ama sessizce bir oyuncunun envanterini ya da ekonomiyi imkânsız bir durumda bırakan bir hata. Fark ettiğinde, kötü durum ticaretler üzerinden yayılmıştı ve geri dönülecek temiz bir nokta yoktu.
Bu bana sessiz bozulmadan, yüksek sesli başarısızlıktan çok daha fazla korkmayı öğretti. Bugün tam da bu yüzden gözlemlenebilirlik ve yeniden-oynatılabilir çalıştırmalar konusunda fanatiğim. Yüksek sesle başarısız olan bir çoklu-ajan sistemi sorun değil — görürsün, düzeltirsin. Sessizce belleğe yanlış bir olgu yazan ve devam eden bir çoklu-ajan sistemi, büyümüş Metin2 bozuk-envanter hatasıdır. Yüksek sesli başarısızlık bir baş belası. Sessiz kötü durum, seni öldüren şey.
Ders 4 — Her zaman nöbettesin
Bir oyun sunucusu programını umursamaz. Oyuncular ben okuldayken, uyurken, akşam yemeği yerken çevrimiçiydi. Sunucunun bensiz tutması gerekiyordu. Onu çalışır tutan şey ben olamazdım — sistemin onu çalışır tutması gerekiyordu ve işim onu, beni gece 3'te gerektirmeyecek şekilde kurmaktı.
Bu, mühendisliği benim için kalıcı olarak yeniden çerçeveledi. Hedef asla 'işletebileceğim bir sistem' değildi. 'Bensiz çalışan bir sistem'di. O zamandan beri her kurucu dersi ve her mimari karar bu şekle sahip — bizimki gibi küçük bir ekibin neden tek runtime üzerinde dört ürün işletebildiği dahil. Daha çok saat çalışarak ölçeklenmezsin. Saatlerini gerektirmeyen şeyi kurarak ölçeklenirsin.
“Çocukluğumu bir oyun oynayarak geçirdiğimi sandım. Aslında üretim mühendisliğinde on yıllık bir avans alıyordum — çekişmeli yük, bağlı ekonomiler, sessiz durum bozulması ve bensiz çalışma süresi. Sunucu müfredattı. Sadece bir adı olduğunu henüz bilmiyordum.”
Bu hikâyeyi neden anlatıyorum
Nostalji için değil. Anlatıyorum çünkü aldığım en faydalı mühendislik eğitimi eğitim gibi görünmüyordu — arkadaşları için bir oyun sunucusunu hayatta tutmaya çalışan bir çocuk gibi görünüyordu. Dersler gerçekti çünkü bahis gerçekti: sunucu düşerse, gerçek insanlar akşamlarını kaybederdi. Bu, notu olan herhangi bir ödevden daha iyi bir öğretmendir.
Gençsen ve gelişigüzel, canlı bir şey işletiyorsan — bir sunucu, bir bot, insanların gerçekten kullandığı küçük bir site — 'sadece oyalanmıyorsun.' Aldığım eğitimin aynısını alıyorsun. Onu ciddiye al, neyin bozulduğunu yaz ve dersin şeklinin teknolojiyi onlarca yıl aştığına dikkat et. Uzun yaydan daha fazlası atakanozalan.com, ya da o yıllardan beri taşıdığım takma ad için ezagor.