deniz.in

Piyasalar

Hava durumu

Hava durumu yükleniyor

· kaynak Hacker News – Front Page (native)

Bir geliştiricinin PHP backend'i, on yıl boyunca yedi oyunu on bir platformda sessizce ayakta tuttu

On yıllık bir retrospektif, bir geliştiricinin Google App Engine üzerinde kendi yaptığı PHP backend'inin, C# ile yeniden yazılmadan önce on yıl boyunca ayda 10 ile 50 euro karşılığında yedi oyunu on bir platformda nasıl yönettiğini anlatıyor.

Bir geliştiricinin PHP backend'i, on yıl boyunca yedi oyunu on bir platformda sessizce ayakta tuttu

Bir geliştirici, çıkardığı her oyunu sessizce ayakta tutan, kendi eliyle yaptığı tek bir backend hakkındaki on yıllık retrospektifini yayımladı: yedi oyun, on bir platform ve ayda 10 ile 50 euro arasında bir hosting faturası. m2h.nl'de yayımlanıp Hacker News'in ana sayfasına taşınan yazı, yazarın Game Development Toolkit, kısaca GDT dediği sistemi belgeliyor — tek bir kişi tarafından geliştirilip bakımı yapılan, arkasında Firestore bulunan ve Google App Engine üzerinde çalışan yaklaşık 20.000 satırlık bir PHP kod tabanı.

Tek backend, her oyun

Yazıya göre sistem üzerinde çalışan oyunlar Marooners, Verdun, Tannenberg, Isonzo, Crash Drive 2 ve Crash Drive 3; bu yıl ise başka bir stüdyodan yedinci bir oyun katılmış. Platformlar arasında Steam, Epic, Windows Store, PlayStation 4 ve 5, Xbox One ve Series, Switch, iOS, Android ve WebGL yer alıyor.

Yazara göre PHP sürümü on yıl boyunca oyuncuların gözüken tek bir kesinti olmadan çalışmış ve Eylül 2026 itibarıyla Cloud Run üzerindeki C# sürümüyle değiştirilmiş. Ekonomisi sıfıra kadar ölçekleniyor: kimse oynamadığında servis hiçbir ücrete yol açmıyor, premium oyunlarda ise ödeme yapan oyuncu başına maliyet ihmal edilebilir düzeyde.

Çöpe atılıp duran scriptlerden on yıllık servise

Toolkit var olmadan önce geliştirici, her çevrimiçi ihtiyaç için bir haber akımı buraya, bir sürüm kontrolü şuraya gibi küçük, tek kullanımlık PHP scriptleri yazıyor ve her seferinde bunları sıfırdan yeniden yazıyordu. Dönüm noktası, parti oyunu Marooners'i konsola taşımak oldu. PC'de bir sorun Steam forumlarında hızla ortaya çıkar; konsolda ise sertifikasyon bir sorunu işaret edene kadar görünmez kalır.

Bir freelancer tarafından kurulan, Redis destekli Piwik ile yapılan ilk telemetri denemesi hiç düzgün çalışmadı ve geliştirici, başkasının mimarisini debug etmek yerine sistemi tamamen rafa kaldırdı. Yerine konan çözüm, App Engine ve Firestore üzerinde, şemasız ve frameworksüz PHP ile inşa edildi ve Hollanda'nın Ar-Ge vergi kredisi olan WBSO'ya yapılan başvuruyla resmî bir hale getirildi — para mütevazıydı ama projenin ciddiye alınmasını sağladı. İşlerin büyük kısmı tek bir Noel tatilinde tamamlandı ve ardından Verdun'a entegrasyon yalnızca birkaç gün sürdü.

API kökü hâlâ api_v1; plan, yeni bir oyunun yalnızca geriye dönük uyumluluk imkânsız hale geldiğinde api_v2'ye geçmesiydi ve yazıya göre o gün hiç gelmedi.

Toolkit gerçekte ne yapıyor

Sistem bir analitik panelinden çok daha fazlası:

  • Oyun başına düzenlenmiş ekran görüntüleri ve log dosyalarıyla birlikte çökme ve hata raporlama.
  • Steam ticket'larını, Epic token'larını, Windows Store ve PSN kimliklerini tek bir kullanıcı kaydına dönüştüren bulut kimlik doğrulaması; oyun bazında ya da tüm oyunlarda aynı anda uygulanan yasaklarla birlikte.
  • İstemcinin bir gün önbelleğe aldığı tipli remote configuration; böylece denge değişiklikleri veya planlanmış etkinlikler patch gerektirmeden yapılıyor.
  • Kurcalanmış bir istemcinin bile yeniden yazamadığı, yalnızca ekleme yapılabilen (append-only) global istatistikler — Crash Drive 3 oyuncuları toplamda 149 milyon kilometre sürmüş, bunun 35 milyonu drift atarak geçilmiş ve 38 milyon varil uçurumdan itilmiş.
  • Steam ve Epic için DLC ve sahiplik kontrolleri; böylece oyun hiçbir zaman istemciye güvenmek zorunda kalmıyor.
  • Photon webhook'ları üzerine kurulu, platformlar arası arkadaşlıklar, davetler ve oturumlar.
  • Voucher'lar, basın ve testçiler için platform bazlı anahtar setleri ve gerçek dönüşümleri ölçen bir link takipçisi; ekip bir Discord linkinin, Twitter'daki aynı linkten kabaca on kat daha iyi performans gösterdiğini böyle öğrenmiş.

Jenkins panele bağlı; tek bir buton build'i başlatıyor, bir diğeri Steam'e yayımlıyor ve her adımın süresi build logunda tutuluyor. Benchmark'lar bir sahneyi çalıştırıp sayıları paylaşıyor ve build'ler arasında karşılaştırılabilir sonuçlar üretiyor. Discord kanalları yeni incelemeleri, küratör bahislerini, çökme artışlarını ve commit'leri alıyor. Kapalı test akışı, Steam üzerinde davet edilen kişinin önceki bir oyunu sahiplendiğini ve yeterince oynadığını doğruluyor, NDA için HelloSign'dan geçiriyor, Discord hesabını bağlıyor ve bir Steam anahtarı veriyor — yazar, yüzlerce testçinin tek bir elektronik tablo kullanılmadan bu şekilde yönetildiğini söylüyor.

Toplamları değil, oranları izleyen uyarılar

Yazar bunu sistemin tamamındaki en değerli kural olarak tanımlıyor: çökme uyarıları, ham sayılara değil, aktif kullanıcı başına istisna sayısı 0,05'i veya oturum başına hata sayısı 1,5'i aştığında tetikleniyor. Çıkış gününde binlerce oyuncu çevrimiçi olabilir ve hiçbir şey alarm vermez; yıllar sonra, küçük bir oyuncu kitlesinde bile gerçek bir sıçrama hâlâ yakalanıyor.

Neden önemli

Çoğu postmortem oyunları anlatır; bu yazı ise yedi sürümü ve bir dizi konsol portunu mümkün kılan görünmez tesisatı anlatıyor. Küçük stüdyolar için bu, yönetilen altyapı üzerinde tek sahipli, sakin bir servisin, kimlik doğrulamayı, çökme raporlamayı, remote config'i, build otomasyonunu ve test iş akışlarını on yıl boyunca sıfıra yakın bir maliyetle yönetebileceğinin işleyen bir kanıtı — ve frameworksüz düz PHP gibi seçimlerin birer taviz değil, özellik olduğunun. Tasarım kurallarından ikisi oyunların çok ötesine taşınabilir: izleme, oyuncu sayısındaki değişimlerden etkilenmesin diye uyarıları sayılara değil oranlara bağlayın; ve her yeni oyun aynı endpoint'e otursun diye API'leri geriye dönük uyumlu tutın. C# ile yeniden yazım ise çıkış yolunu gösteriyor: sistem küçük ve basit kaldığı için tek bir geliştirici, altındaki runtime'ı yıllar sürecek bir göç projesine girmeden değiştirebilmiş.

  • #game-development
  • #backend
  • #php
  • #google-cloud
  • #retrospective