Birçok sağlayıcıdan slot, canlı krupiyeli oyun ve masa oyunu bağlayan bir casino backend'i tek bir agregasyon katmanına ihtiyaç duyar: operatörün verdiği oturumlar, yeniden denemelerden ve rollback'lerden sağ çıkan bakiye callback'leri, oturumdan sonra kapanabilen turlar ve her sağlayıcının kendi raporuyla günlük bir mutabakat. Bu katmanın nasıl bölündüğü ve sağlayıcı entegrasyonlarının genellikle nerede bozulduğu aşağıda.
Kendi casino backend'ini kuran ve birçok sağlayıcıdan slot, canlı krupiyeli oyun ve masa oyunu bağlayan bir operatör, sonunda sağlayıcı sayısı kadar entegrasyon sözleşmesiyle kalır: farklı başlatma akışları, farklı cüzdan çağrıları, turun ne olduğuna dair farklı fikirler. Agregasyon katmanı bunları tek bir iç sözleşmeye dönüştürür; böylece cüzdan, lobi, bonuslar, limitler ve raporlama bir kez yazılır ve her sağlayıcı bunlara uyarlanır.
Aşağıda bu katmanın genellikle nasıl bölündüğü anlatılıyor: sağlayıcıda ne kaldığı, oturumların nasıl verildiği, bakiye callback'lerinin yeniden denemelerden ve rollback'lerden nasıl sağ çıktığı, oturumdan sonra kapanan turların nasıl kaydedildiği ve sonucun sağlayıcının kendi rakamlarıyla nasıl mutabakata getirildiği.
Kısa yanıt: sağlayıcı başına bir adaptörle tek bir iç sözleşme. Oturumu operatör verir; her debit, credit ve rollback, sağlayıcının transaction ID'sini sağlayıcıya ve çağrı türüne göre kapsamlanmış bir idempotency anahtarı olarak taşır; cüzdanın hiç görmediği bir transaction için gelen rollback saklanır, böylece geç gelen orijinal transaction reddedilir; turlar, oturum sona erdikten sonra kapanabilen bir durum olarak kaydedilir; ve her sağlayıcının kendi raporu her gün cüzdan defteriyle mutabakata getirilir.
Oyunu sağlayıcı işletir: rastgele sayı üretimi, oyun matematiği, oyun istemcisi ve bunun bir test laboratuvarı tarafından sertifikalandırılması. Oyuncuya ve paraya dokunan her şey operatörde kalır: kimlik, bakiye, limitler, bonuslar, lobi ve bir düzenleyicinin ya da bir oyuncu uyuşmazlığının isteyebileceği kayıtlar. Agregasyon katmanı ikisinin arasında durur ve her sağlayıcının API'siyle konuşan tek sunucu tarafı kod o olmalıdır.
Sağlayıcılar bir operatörün parasına iki yoldan biriyle bağlanır. Seamless wallet'ta bakiye operatörde kalır ve sağlayıcı her bahis ve kazanç için operatörün cüzdanını çağırır. Transfer wallet'ta operatör, oyundan önce parayı sağlayıcı tarafında tutulan bir bakiyeye aktarır ve ancak kendisi talep ettiğinde geri aktarır.
Bu yazının geri kalanı seamless wallet'ı varsayar, çünkü orada her bahis ve kazanç bir cüzdan çağrısıdır.
Oyun başlatma operatör tarafında başlar. Backend, bu oyuncunun bu oyunu şu anda oynayabileceğini kontrol eder; bu kontrol hesap durumunu, kendini dışlamayı, limitleri ve oyunun oyuncunun yargı bölgesinde sunulup sunulamayacağını kapsar. Ardından oyuncuya, oyuna ve para birimine bağlı bir oturum oluşturur ve başlatma sırasında sağlayıcıya opak bir token iletir. Sağlayıcının sunucusu callback yaptığında, çağrının kimin bakiyesiyle ilgili olduğunu bu token belirler.
Yayımlanmış operatör dokümanları bunu açıkça söyler. Hub88'in cüzdan API'si, kazançlar ve rollback'ler bahis oynandıktan sonra gelebileceği için bunlarda token geçerliliğinin doğrulanmaması gerektiğini söyler. VeliGames, oturumun süresi dolmuş olsa bile operatörün bir turdaki kazancı reddedemeyeceğini söyler.
İki sunucu arasındaki her çağrı, karşı taraftaki iş tamamlandıktan sonra zaman aşımına uğrayabilir. Sağlayıcı, başarısız olan bir debit'i yanıtı kaybolan bir debit'ten ayırt edemez; bu yüzden çağrıyı tekrarlar ya da transaction'ı iptal eder. Cüzdanın işi, bunların ikisini de güvenli hâle getirmektir.
Yayımlanmış entegrasyon dokümanları, tekrarların ne kadar ısrarlı olduğunu gösterir. Hub88'in operatör cüzdan API'si, HTTP 200 almadığında bir bahsi başarısız sayar, bir rollback oluşturur ve bu rollback'i üstel back-off ile 500 kereye kadar yeniden dener. Gamomat, başarısız bir isteği 500 ms arayla iki kez yeniden dener, ardından bir rollback başlatır ve onu bir saniyeden 30 dakikaya kadar uzayan aralıklarla yeniden dener. Tom Horn Gaming'in cüzdan zaman aşımı 10 saniyedir; bu sürenin ardından otomatik olarak bir rollback gönderilir. Birkaç dakika boyunca çalışmayan bir cüzdan, geri geldiğinde sessizlikle değil, tekrarlardan ve rollback'lerden oluşan bir kuyrukla karşılaşır.
Bir tekrara beklenen yanıt da standart değildir. Hub88, aynı transaction ID'sine sahip isteklerin iki kez işlenmemesini ve tüm mükerrerler için yanıtın aynı olmasını şart koşar; VeliGames, HTTP status 409 ve DUPLICATE_TRANSACTION içeren bir hata ister; Tom Horn Gaming'in mükerrer bir referans için ayrı bir sonuç kodu vardır. Adaptör her sağlayıcıya kendi biçiminde yanıt verir, alttaki defter ise aynı kalır.
Bilinmeyen bir transaction'ın rollback'ini yanlış ele almak kolaydır. Cüzdan hiçbir şey saklamazsa, yolda yalnızca gecikmiş bir debit bir an sonra gelir ve başarılı olur; oyuncu da sağlayıcının zaten iptal ettiği bir bahsin bedelini öder. Önce rollback'i saklamak ve debit'in hesap kilidi altında onu kontrol etmek bu açığı kapatır.
Sağlayıcılar bu kuralı kendi dokümanlarında belirtir. St8'in operatör API'si, operatör daha önce işlemediği bir iptal için bir transaction ID'si aldığında, bu ID'nin sonradan işlenmesini önlemek için kaydedilmesi gerektiğini söyler. Tom Horn Gaming, cüzdan bir rollback'in işaret ettiği çekim (withdrawal) işlemini hiç işlemediğinde kendi bilinmeyen transaction sonuç kodunu bekler.
Tur, sağlayıcının oyun birimidir ve nadiren tek bir transaction'a karşılık gelir. Bir slot spini çoğu zaman bir debit ve bir credit'tir, bazen tek bir çağrı olarak gönderilir. Blackjack, split ya da double için debit'ler ekleyebilir. Canlı rulet, bir bahis penceresi boyunca birçok oyuncudan bahis alır ve sonuç belli olduğunda hepsini sonuçlandırır. Ücretsiz turlar, bir bütün oluşturan bir dizi kazanç üretebilir.
Oyuncu uyuşmazlıkları tur geçmişiyle çözülür. Her defter kaydını sağlayıcı, oyun, tur, tutarlar, önceki ve sonraki bakiye ve biri sağlayıcının, biri cüzdanın olmak üzere iki zaman damgasıyla birlikte tutun; API'si sunuyorsa sağlayıcının kendi tur ayrıntılarına bağlantı verin. Böylece tek bir spindeki parayla ilgili bir soru kayıtlardan yanıtlanır.
Bu geçmişin kapsaması gereken asgari düzeyi düzenleyiciler belirler. Gaming Laboratories International'ın interaktif oyun sistemleri standardı olan GLI-19, oyuncu için yeniden canlandırma ya da açıklama biçiminde bir oyun geri çağırma (game recall) özelliğini şart koşar. Birleşik Krallık Şans Oyunları Komisyonu'nun (UK Gambling Commission) uzaktan teknik standartları, lisans sahibiyle iletişime geçmeye gerek kalmadan en az üç aylık, talep üzerine ise en az 12 aylık hesap ve oyun geçmişini şart koşar. Malta Oyun Otoritesi'nin (Malta Gaming Authority) oyuncu koruma direktifi, oyuncuya hemen önceki altı aylık oyun geçmişine erişim sağlar.
Slotlar yükü zamana yayar, çünkü her oyuncu kendi temposunda spin yapar. Canlı krupiyeli masalar ise oyuncuları senkronize eder: masadaki herkesin bahisleri, bahisler kapanmadan önceki saniyelerde gelir ve sonuç belli olduğunda herkesin kazançları birlikte gelir. Popüler bir masa bunu bahis yapan her oyuncu için tekrarlar.
Sağlayıcı farklılıklarının yaşadığı yer adaptörlerdir ve yaşadıkları tek yer de onlar olmalıdır. Her adaptör şunları üstlenir:
İç sözleşme küçük kalır: oturum açma, bakiyeyi okuma, debit, credit, tek çağrıda debit ve credit, bahis olmadan ödeme, rollback, tur kapatma ve cüzdanın döndürebileceği sabit bir hata kümesi. Böylece yeni bir sağlayıcı bir adaptör ve bir test paketi demektir, cüzdanda bir değişiklik ise nadiren.
Her sağlayıcı her turun kendi kaydını tutar ve operatöre bu kayda göre fatura keser. Agregasyon katmanının defteri, aynı paranın operatör tarafıdır. İkisini her gün, her sağlayıcının gün sınırına ve saat dilimine göre, sağlayıcı, para birimi ve oyun başına mutabakata getirin:
Bu kanıtın ne kadar süre saklanması gerektiği entegrasyonun bir parçasıdır. Hub88, mutabakat amacıyla her transaction ID'sinin iki tarafta da en az dört ay saklanmasını ister; Gamomat'ın operatör API'si ise bir tarih aralığı ya da tek bir tur için mutabakat verisi döndürür.
Bu sorunun üç tür yanıtı vardır ve her biri farklı bir şey satar. Agregatörler ve platform tedarikçileri operatöre kendi katmanlarını kiralar: tek sözleşme, çok sayıda sağlayıcı, onların ticari koşulları. Anahtar teslim ve white-label platformlar katmanı, tedarikçinin sahip olduğu bir platformun içinde sunar. Mühendislik firmaları katmanı operatörün backend'inin içinde kurar ve operatör sağlayıcı sözleşmelerini kendisi imzalar.
Hangi türle görüşürseniz görüşün, bir ekibin bunu daha önce kurup kurmadığını şu sorular gösterir:
İlk ikisinde genel kalan bir yanıt, uç durumların üretimde bulunacağı anlamına gelir.
amBrain; trading platformları, matching engine'ler, real-time bidding sistemleri ve casino platformu mühendisliği alanlarında uzmanlaşmış bir yazılım geliştirme şirketidir. amBrain 2019'dan bu yana yazılım geliştiriyor.
iGaming'de amBrain'in ölçüme dayalı olarak yayımladığı rakamlar 500+ üçüncü taraf sağlayıcı entegrasyonu ve canlıda 12 operatördür.
amBrain üç formatta çalışıyor: tam teslim, özel ekip ya da sizin ekibinize yerleşen mühendisler. Müşteri, amBrain'in yeniden kullanılabilir bileşenleri dışında ürünün ve kodun tam mülkiyetini elinde tutar.
Bu yazı bir agregasyon katmanının nasıl çalıştığını anlatır; bir vaka çalışması değildir ve hiçbir müşterinin adını vermez.
Yani ilk karar hangi sağlayıcılarla sözleşme imzalanacağı değildir. Karar, her sağlayıcının uyarlanacağı ve ilk adaptör var olmadan önce hata durumlarıyla birlikte yazıya dökülmüş iç sözleşmedir.
Mevcut mimarinizi ve sizi endişelendiren hata senaryosunu getirin; yarım saatte birlikte üzerinden geçelim.