Neye ihtiyacın var (ve burada CDN ne yapar)
Elinde bir oyun var — PC ya da mobil — oyuncular kurup güncel tutuyor: çoğu zaman birkaç gigabaytlık bir istemci, düzenli yamalar ve indirilebilir içerik veya asset paketleri. Bir de cdn.com.tr hesabın. Liste bu kadar. Kendi indirme sunucusu filonu kurmuyor, küresel bir ağ inşa etmiyorsun.
Baştan dürüst kapsam, çünkü önemli: CDN, oyuncularının indirdiği ve oyununun HTTP üzerinden sunduğu her şeyi dağıtır — istemci, yamalar, DLC, asset paketleri ve oyun ile hesap API yanıtların. Gerçek-zamanlı çok oyunculu oyun sunucularının yerine geçmez — otoriter simülasyon, matchmaking ve UDP netcode ayrı bir katmandır. Bundan sonrası dağıtım tarafıyla ilgili; ki çoğu oyun için operasyonun en büyük, en ani-yüklü ve en çok saldırıya uğrayan kısmı budur.
Nasıl çalışır: origin'den edge'e, edge'den oyuncuya
CDN, dosyalarının önbelleklenmiş kopyalarını ağ boyunca edge konumlarında tutar. Bir oyuncu istemcini ya da bir yamayı indirdiğinde, uzakta veya çoktan aşırı yüklenmiş tek bir sunucu yerine en yakın edge'den servis alır. Origin'in — ya da build'i tutan CDN depolaması — yalnızca bir edge dosyaya henüz sahip değilse dokunulur: ilk istek önbelleği ısıtır, sonrasında herkes yerelden servis edilir.
Lansman gününde ya da büyük bir yama düştüğünde tam da istediğin davranış bu. Tek bir indirme sunucusunu eritecek indirme seli ağa yayılır ve her oyuncuya yakın karşılanır; origin'in ise arkada sakin kalır. Uzaktaki oyuncular için daha hızlı indirme ve origin'in herkese her baytı servis etmesi yerine önbellek-verimli edge trafiğini yansıtan bir fatura elde edersin.
Build'ini CDN depolamasına yükle
İstemci ve yama dosyalarını CDN'in kendisine koy ki işletmen gereken bir indirme sunucusu olmasın. Panelden Dosyalar alanını kullanarak build'leri bir dosya yöneticisi gibi yükleyip düzenle. Terminalden cdnctl scp gibi yükler — ve kritik nokta: her build'i yol içinde bir versiyonun altına koyarsın ki değişmez (immutable) olsun ve sıkıca önbelleklenebilsin. Ekip pipeline'ları veya S3 araçları ve erişim anahtarları isteyen çok sayıda build makinesi için S3-uyumlu object storage'a geç (cdnctl object-storage buckets create ...).
cdnctl login --email siz@studio.com --password ...
cdnctl accounts use <account_uuid>
# tum build, versiyonlu (immutable) yol altinda
cdnctl cp -r ./build/1.4.2 builds/1.4.2/
# tek bir artimli yama dosyasi
cdnctl cp ./patches/1.4.1-to-1.4.2.pak patches/1.4.1-to-1.4.2.pak
Asla bayat yama servis etmeyen önbellek ve versiyonlama
Güvenli oyun dağıtımının püf noktası değişmez, versiyonlu URL'lerdir. builds/1.4.2/client.pak bir kez yayınlandıktan sonra asla değişemeyeceği için, onu edge'de fiilen sonsuza dek önbelleğe alabilirsin — oyuncular her dosyayı tam olarak bir kez indirir. 1.4.3'ü yayınladığında yepyeni bir yolda yaşar; yani savaşacak bayat bir kopya ve beklenecek küresel bir purge yoktur.
Değişen tek şey, hangi versiyonun güncel olduğunu söyleyen küçük manifesttir. Onu sabit bir URL'de kısa önbellekle tut (ya da yayınlarken purge et), her build dosyasını ise değişmez tut. Bu bileşim, gigabaytlarca build verin kalıcı olarak önbellekte dururken, manifesti çevirdiğin an bir yamanın canlıya geçmesini sağlayan şeydir.
Versiyonlu build vs manifest için Cache-Control
# versiyonlu build dosyalari asla degismez -> siki onbellekle
Cache-Control: public, max-age=31536000, immutable
# guncel versiyona isaret eden manifest -> taze tut
Cache-Control: public, max-age=60
Launcher'ına veya patcher'ına bağla
Otomatik güncelleyicinin de özel sunuculara ihtiyacı yok. CDN'de, güncel versiyonu ve her dosyayı yolu, boyutu ve hash'iyle listeleyen küçük bir JSON manifest barındır. Başlangıçta launcher manifesti en yakın edge'den çeker, hash'leri oyuncuda zaten olanla karşılaştırır ve yalnızca değişen dosyaları indirir — her biri edge'den, bağlantı ortada koparsa her biri HTTP Range ile kaldığı yerden devam eder.
Güncelleyicinin tamamı bu: bir manifest artı versiyonlu dosyalar, hepsi CDN'den servis edilir. İşletilecek bir indirme backend'i yok, kovalanacak yarım-indirme hataları yok; aynı tasarım bir PC launcher'ı için de, ilk açılışta asset paketi ve remote config çeken bir mobil oyun için de çalışır.
CDN'den servis edilen versiyon manifesti
{
"version": "1.4.2",
"base_url": "https://cdn.oyunun.com/builds/1.4.2/",
"files": [
{ "path": "client.pak", "size": 4213374208, "sha256": "..." },
{ "path": "audio.pak", "size": 812934144, "sha256": "..." }
]
}
Lansman ani yüklerini ve DDoS'u karşıla
Oyunlar internetteki en ani-yüklü ve en çok saldırıya uğrayan şeyler arasındadır: bir lansman ya da indirim her oyuncuyu aynı anda indirmeye gönderir ve online oyunlar gözde bir DDoS hedefidir. İndirmeleri edge'den servis etmek meşru ani yükü zaten karşılar; çünkü ağ onu origin'in yerine oyunculara yakın yanıtlar.
Bunun üstüne, CDN WAF ve DDoS korumasını indirme uç noktalarının ve oyun ile hesap API'nin önüne koy, ve rate limiting ekle ki tek bir istemci bir giriş veya yama-kontrol rotasını dövemesin. Gerçek origin'in edge'in arkasında gizli kalır; böylece hem lansman seli hem de saldırı, sunucuna değil onları karşılamak için kurulmuş ağa iner. (Kapsam konusunda net olalım: bu, HTTP dağıtımını ve API'ni kalkanlar — gerçek-zamanlı UDP oyun sunucularına yönelik saldırıları hafifletmek ayrı, uzmanlaşmış bir katmandır.)
Stüdyoların bu yolla dağıttıkları
Yama düştüğü an çöken bir indirme sunucusu yerine, GB'larca istemciyi ve sık yamaları edge'den kaldığı yerden devam eden indirmelerle dağıt.
İndirilebilir içeriği, asset paketlerini ve remote config'i mobil oyunculara yakın bir edge'den sun; ilk açılış ve güncellemeler dünya genelinde hızlı olsun.
Otomatik güncelleyicini CDN'de barınan bir manifest ve versiyonlu dosyalarla besle — özel indirme altyapısı yok, WAF ve DDoS korumasıyla kalkanlı.
Oyunlar için CDN — sık sorulanlar
CDN gerçek-zamanlı oyun sunucumu barındırır mı?
Hayır, ve dürüst sınır bu. CDN oyun indirmeni ve içeriğini dağıtır: istemci, yamalar, DLC, asset paketleri ve HTTP oyun ile hesap API yanıtların. Gerçek-zamanlı çok oyunculu netcode — otoriter oyun sunucuları, matchmaking ve UDP trafiği — CDN'in yerine geçmediği ayrı bir katmandır. CDN'i oyuncuların indirdiği her şey için ve API'ni korumak/önbelleklemek için kullan.
GB'larca istemci dosyasını servis edebilir mi?
Evet. Büyük build dosyalarını CDN dosya depolamasına ya da S3-uyumlu object storage'a yükle ve edge'den servis et. İndirmeler HTTP Range destekler; böylece istemciler çok büyük dosyaları baştan başlatmak yerine akıtabilir ve kaldığı yerden sürdürebilir.
Bir yamayı yayınladığım an oyuncular nasıl alır?
Her build'i yolunda versiyonla (builds/1.4.3/...) ki yeni yama asla önbelleklenmemiş yepyeni bir URL olsun, sonra güncel versiyona işaret eden küçük manifesti güncelle. Purge edilecek bayat bir kopya ve beklenecek küresel bir önbellek boşaltması yoktur.
İndirme yarıda kesilirse ne olur?
Edge'den servis edilen dosyalar HTTP Range isteklerini destekler; böylece bir launcher ya da tarayıcı GB'larca indirmeyi baştan başlatmak yerine kaldığı yerden sürdürür.
Bu lansman ya da indirim gününde nasıl yardımcı olur?
İndirme seli tek bir origin yerine ağa yayılmış edge önbelleklerinden karşılanır, ve CDN WAF, DDoS koruması ve rate limiting origin'ini ve API'ni hem meşru ani yükten hem de saldırılardan kalkanlar.