Dobrý den, nevím jestli přeci jen trochu toho hledání by se nevyplatilo víc, než psát vlastní projekt. Napadlo mě třeba řešit to pomocí Cephs, tedy https://github.com/OpenMPDK/KVCeph a pro zájemce ještě https://ceph.com/assets/pdfs/CawthonKeyValueStore.pdf
Okej, byla použita dokumentová databáze, ne key-value databáze.
V téhle fázi projektu komplet vyměnit základní technologii bylo moc náročné a vždycky se musíte dívat i s optikou "Mám běžící produkci, jak to udělat, aby nasazení nové verze proběhlo co s nejmenšími problémy".
Druhá věc je, netuším, jak je dobrá ta zmíněná databáze v indexaci. Ten problém o CouchDB byl, že každý uzel dostával plnou dardu requestů, protože v indexech se hledá formou map-reduce, tedy každý uzel poskytne své výsledky a ty se na agregačním uzlu zmergují. Byla tam ale relativně velká režije na samotné zpracování requestu, a to platí i pro requesty, které vracely prázdný výsledek.
Spíš by se vyplatilo, kdyby se indexace prováděla na separátní uzly, které by byly distribuované přes load balancer, aby se rozložila zátěž.
Tak pokud jsi četl celý článek, tak víš, že to nebylo cílem, cílem bylo jen přesunout kritické indexy co nejblíže k aplikačním serverům. Jiný přístup, který se běžně používá a který samozřejmě znám, je replikace main databáze na aplikační servery, takže ty si chodí pro indexy právě tam. Replikace není nic jiného než rozesílání updatů z hlavní databáze do těch replik, což je přesně to co se tady dělo. Mimochodem, naslouchání updatů z main db tam bylo od začátku, v zásadě to byl hlavní mechanismu jak se rozesílaly herní stavy mezi jednotlivé uzly. Takže zase tolik práce v tom nebylo, stačilo jen na místo, kam přicházela tahle data strčit nějakou mapu.
Využívalo se toho, že hráč, který hraje hru, si bude chodit pro zadání jednotlivých úkolů na server v řádově několika sekund až minut, takže v paměti byla cache pro všechny aktuálně hrající hráči, takže ve výsledku aplikační servery nechodily na databázi skoro vůbec, jen když se stalo, že některý stav vypadl z cache. Do databáze se posílaly jen updaty herních stavů.
Další možnou refaktorizací by pak už byl jen clusterizace hračů, jako že hra nepotřebovala kombinovat stavy mezi hráči - ne na realtime úrovni. Kromě finále, kde se tedy hrálo hromadně a kde byla potřeba jakási interakce mezi hrajícími a kde zase nehrálo tolik hráčů. Clusterizace by znamenala, že by vzniklo víc "datacenter", a každý hráč by měl přidělený vlastní centrum, kde by hrál, což by ale přineslo komplikace na non-realtime interakci, třeba vyhodnocování pořadí ve hře, statistiky a rozdávání cen a bodů.
Všechno to bylo backlogu, kdyby to televize v Covidové době nezrušila.
Intenzivně se zabývám programováním zejména v jazyce C++. Vyvíjím vlastní knihovny, vzory, techniky, používám šablony, to vše proto, aby se mi usnadnil život při návrhu aplikací. Pracoval jsem jako programátor ve společnosti Seznam.cz. Nyní jsem se usadil v jednom startupu, kde vyvíjím serverové komponenty a informační systémy v C++
Přečteno 50 600×
Přečteno 23 672×
Přečteno 22 663×
Přečteno 20 631×
Přečteno 17 621×