Blog / Turnuvalar / Çevrimdışı İlk Lig Kurmak: İnternet Kesintilerine Dayanıklı Eşleştirme, Senkronizasyon ve Yedekleme Rehberi
Çevrimdışı İlk Lig Kurmak: İnternet Kesintilerine Dayanıklı Eşleştirme, Senkronizasyon ve Yedekleme Rehberi
Turnuvalar

Çevrimdışı İlk Lig Kurmak: İnternet Kesintilerine Dayanıklı Eşleştirme, Senkronizasyon ve Yedekleme Rehberi

İnternetin güvenilir olmadığı ortamlarda bile sorunsuz çalışan bir lig altyapısı kurmak mümkündür. Bu rehberde, bir çevrimdışı ilk lig (offline league) kurarken karşılaşacağınız teknik ve operasyonel zorluklara karşı pratik, uygulanabilir çözümleri ayrıntılı şekilde ele alacağım. Eşleştirme (matchmaking), senkronizasyon ve yedekleme süreçlerine odaklanacağız; ayrıca örnek senaryolar ve kontrol listeleri paylaşacağım.

Neden çevrimdışı lig kurulur? Riskler ve beklentiler

Genellikle internet kesintileri, bant genişliği sınırlamaları veya güvenlik politikaları nedeniyle yerel ağlarda turnuva düzenlenir. Bu durumlar için başarılı bir çevrimdışı lig altyapısı kurmak, katılımcı memnuniyeti ve operasyonel süreklilik sağlar. Ancak beklentileri doğru yönetmek gerekir:

  • Gerçek zamanlı global senkronizasyon yerine sonradan uyumlaştırma (deferred reconciliation) yaklaşımları tercih edilmelidir.
  • Tek bir merkezi otorite (host) internet yokken de karar alabilmeli; ama internete erişim sağlandığında diğer düğümlerle tutarlı hale gelmelidir.
  • Veri kaybı kabul edilemezse, yerel yedekleme ve fiziksel taşıma (USB/HDD) prosedürleri uygulanmalıdır.

Eşleştirme stratejileri: deterministic (deterministik) ve offline algoritmalar

Eşleştirme, turnuvanın kalbi gibidir. Çevrimdışı senaryolarda iki ana yaklaşım vardır:

  1. Deterministik eşleştirme: Tüm istemciler aynı başlangıç verisini (katılımcı listesi, seed, tur numarası) kullanarak aynı eşleştirme sonuçlarını üretir. Örneğin, seeded PRNG (örn. SHA256 tabanlı seed) ile oyuncu listesinin karıştırılması ve ardından Swiss veya Round-Robin algoritmasının uygulanması. Bu yöntem, internet yokken bile tüm düğümlerin aynı eşleşmeyi görebilmesini sağlar.
  2. Otoriter host tabanlı eşleştirme: Tek bir local sunucu (tournament director) eşleştirmeleri hesaplar ve yerel ağ üzerinden dağıtır. Avantajı kontrol; dezavantajı hostun çökmesi durumunda fallback mekanizması gerektirmesidir. Bu nedenle host için yedek veya otomatik lider seçimi önerilir.

Pratik örnek: 16 oyunculu Swiss turnuvası için başlangıç seed olarak organizasyon zaman damgası (UTC) kullanın, oyuncu ID’lerini alfabetik sıralayıp SHA256(seed + ID) ile sıralama yapın. Her turda aynı deterministik fonksiyon çalıştırıldığında tüm düğümler aynı eşleşmeyi üretir.

Senkronizasyon modelleri: eventual consistency, CRDT ve log tabanlı replikasyon

İnternetin sık kesildiği ortamlarda anlık güçlü tutarlılık (strong consistency) sağlamak zordur. Bunun yerine pratik modeller kullanmalısınız:

  • Eventual consistency: Değişiklikler yerel olarak kabul edilir, daha sonra diğer düğümlerle eşleştirilir. Uyuşmazlıklar, önceden tanımlanmış politika ile çözülür (ör: en yüksek sürüm numarası, otorite önceliği).
  • CRDT (Conflict-free Replicated Data Types): Basit veri tipleri (sayma, set, map) için çatışmasız birleşim sağlar. Örneğin oyuncu skorlarının toplanması gibi durumlarda CRDT tercih edilebilir.
  • Log tabanlı replikasyon: Her düğüm değişiklikleri append-only bir olay (event) günlüğüne yazar. Eşleme esnasında günlükler merge edilir; idempotent işlemler kullanılırsa tekrar uygulama problemi çözülür.

Örnek sorun ve çözüm: İki hakem aynı maç için farklı sonuç girerse nasıl davranılır? Çözüm yolları:

  • Otoriteye (tournament director) referans verme: aktarılan veriler otoritenin kaydıyla karşılaştırılır.
  • Vector clock veya sürüm numarası kullanarak en yeni girdiyi tercih etme.
  • Çatışma durumunda manuel müdahale gerektiren bir işlem kuyruğu oluşturma.

Teknik altyapı önerileri: donanım, veri tabanı ve ağ

Donanım tercihi, kullanım senaryosuna bağlıdır. Küçük lokal ligler için güçlü bir laptop, orta ölçekli etkinlikler için yerel sunucu (mini-PC veya NUC), büyük LAN etkinlikleri için rack sunucu veya edge cihaz önerilir. Ağ tercihlerinde:

  • Yerel ağ (LAN) sabit kablolu bağlantı öncelikli olsun; kablosuz (Wi-Fi) yedek olarak kullanılsın.
  • Ad-hoc mesh veya Wi-Fi Direct gibi alternatifler, altyapı yoksa hızlı geçici ağ oluşturur.
  • SSH ve rsync ile dosya transferi; veri bütünlüğü için SHA256 kontrolleri kullanın.

Veri tabanı olarak SQLite offline, küçük ölçek için uygundur; WAL (write-ahead log) ile birlikte kullanıldığında günlük dosyalarını taşıyarak replikasyon sağlanabilir. Daha büyük ve karmaşık gereksinimler için LevelDB veya RocksDB kullanılabilir. Transaction logları kopyalanıp sırayla uygulanarak konsistens sağlanır.

Yedekleme stratejileri: 3-2-1 kuralının offline yorumu

3-2-1 kuralı şu şekilde offline ortamda uygulanır:

  1. 3 toplam kopya: birincil, yerel yedek, dışsal taşıma kopyası.
  2. 2 farklı ortam: disk ve taşınabilir HDD/USB.
  3. 1 offsite kopya: internete erişim sağlandığında buluta gönderme veya fiziksel olarak farklı bir lokasyona taşıma.

Operasyonel ipuçları:

  • Her günün sonunda otomatik snapshot oluşturun (SQLite dump veya DB snapshot). Dosyaları sıkıştırın (zstd/zip) ve SHA256 ile imzalayın.
  • Günlük incremental yedeklemeler için rsync veya borgbackup kullanın. Bu, taşıma ve depolama maliyetini düşürür.
  • Fiziksel yedekleri etiketleyin, tarih ve turnuva bilgisini yazın. Taşıma sırasında veri şifrelemesi (gpg) ile güvenliği sağlayın.

Operasyonel akış: örnek bir günlük çalışma planı

Pratik bir örnek akış (küçük lig, 32 oyuncu):

  1. 08:00 – Donanımlar açılır, baş sunucu leader olarak atanır. Deterministik eşleştirme için seed belirlenir.
  2. 08:15 – Oyuncu kayıtları alınır, tüm cihazlarda aynı oyuncu listesi güncellenir.
  3. 08:30 – Tur 1 eşleşmeleri dağıtılır (deterministik veya otoriter host).
  4. Her turun sonunda – maç sonuçları yerel loglara kaydedilir, anlık yedek disk'e snapshot alınır.
  5. Gün sonunda – tüm günlükler toplanır, rsync ile yedek HDD’ye aktarılarak SHA256 doğrulaması yapılır. İnternet varsa yedek buluta gönderilir.

Pratik hata senaryoları ve çözümleri

1) Host çökmesi: Önceden belirlenen yedek host otomatik leader election ile devreye girer. Basit algoritma: en yüksek uptime veya statik öncelik numarası olan düğüm lider olur.

2) Saat senkronizasyonu farklılığı: Deterministik eşleştirme için UTC timestamp yerine organizasyonun belirlediği manuel seed kullanın. Saat hataları çatışmaları önler.

3) Veri bozulması: Her veri dosyası için SHA256 hash saklayın. Yedekten geri yükleme işlemleri için checksum doğrulaması yapın.

Checklist: sahada unutmamanız gerekenler

  • Deterministik eşleştirme fonksiyonu ve seed belirlenmiş mi?
  • Otoriter host ve yedek host mekanizması hazır mı?
  • Günlük snapshot, incremental yedekleme ve fiziksel taşıma prosedürü dokümante edildi mi?
  • Çatışma çözme politikası (LWW, manual review, vector clock) net mi?
  • Kritik veriler için şifreleme ve checksum uygulanıyor mu?

Sonuç: Güvenilirlik ve basitlik dengesi

Çevrimdışı bir ilk lig kurmak teknik olarak mümkün ve yinelenebilir bir süreçtir. Anahtar noktalar: deterministik eşleştirme, log tabanlı senkronizasyon ve katmanlı yedekleme. Karmaşık dağıtık sistem teorileri fayda sağlar ancak uygulamada basit, iyi belgelenmiş ve test edilmiş prosedürler her zaman daha etkilidir. Sahada küçük testler, yedek senaryoları prova etmek ve operasyon personelini eğitmek başarıyı getirir.

Pratik kural: Her kritik veri için en az iki farklı ortamda kopya; her kritik operasyon için bir yedek plan olsun.

Bu rehberi kendi altyapınıza göre uyarlayarak ilk çevrimdışı lig deneyiminizi güvenli ve sürdürülebilir hale getirebilirsiniz. İsterseniz mevcut altyapınızın detaylarını paylaşırsanız, daha somut bir uygulama planı hazırlayabilirim.