Massiv (systém pro tvorbu online her)

Průběžná zpráva o stavu projektu MASSIV

Cíl projektu (výňatek ze specifikace)

Cílem projektu Massiv je naprogramovat systém založený na architektuře klient-server, který by umožňoval herním vývojářům vytvářet tzv. "online (internetové) hry" . Jejich společným znakem je perzistentní svět, ve kterém se pohybuje větší množství aktivně připojených hráčů, jejichž počet může jít řádově do tisíců. Svět je simulován 24 hodin denně na jednom nebo více serverech, hráči se k nim mohou kdykoliv připojit. Po odpojení hráče se jeho postava většinou dění ve světě neúčastní, ale zachovává si svoje vlastnosti a majetek.
Systém se skládá z několika komponent. Serverů, které simulují vlastní hru, starají se o správu účtů hráčů a zálohují herní data, a klientského software prezentujícího stav hry. Součástí projektu bude i demonstrační online hra.

Pro zaručení plynulosti simulace velkého světa a množství připojených hráčů je zátěž simulace rozložena na vícero serverů.

Systém je objektově orientován, přičemž herní svět je složen výlučně z objektů reprezentujících jednotlivé entity obsažené v něm. Každý server se pak stará o určitou podmnožinu objektů. Objekty mohou mezi servery migrovat a komunikují mezi sebou pomocí asynchronních zpráv. Posílání zpráv využívá stejné mechanismy jako migrace objektů.

Pro urychlení operací s objekty si každý server udržuje repliky (kopie) vzdálených objektů z ostatních serverů a průběžně je aktualizuje podle požadavků.

Systém dále podporuje další funkce potřebné pro simulaci. Je to např. distribuovaná archivace simulovaného světa, správa účtů hráčů, koordinace a logování klientů, poskytování dat potřebných pro simulaci (dynamický download, např. textury, modely, ...), zotavení z pádu některého ze serverů, apod.


Současný stav

Projekt je rozdělen na dvě hlavní části - jádro a skripty. Jádro je srdce celého systému a stará se o distribuovanou simulaci objektů. Vlastní logiku simulace (hry) pak tvoří skripty nad funkcemi poskytovanými vlastním jádrem.

Jádro je z velké části hotovo a poskytuje dostatečnou funkčnost pro psaní skriptů. Práce na skriptech již také začaly, ale zatím se jedná převážně o testovací skripty pro ověřování správného fungování všech částí jádra.

Zdrojové soubory čítají 85 tisíc řádek kódu (2 MB) v jazyce C++ a Perl.

Nejdůležitější části jádra:

Hodně času je také věnováno testování jednotlivých částí systému. Vedle zdrojových souborů Massivu jsou také implementovány testovací podprogramy, které testují správnost chování jednotlivých modulů a komponent, a také testovací servery.

Co chybí

V jádře chybí doimplementovat podporu replik, automatický download dat a dokončit globální synchronizaci uzlů (připojování uzlů, pád serverů). Dále je nutno naimplementovat demonstrační hru, což zahrnuje reprezentaci mapy, jednoduché skripty, uživatelské rozhraní a vykreslování mapy.

Historie

Projekt byl oficiálně zahájen v lednu 2002, ale práce započaly již v zimě 2001. První měsíce probíhal návrh jádra systemu (správa objektů a způsob komunikace mezi simulačními servery), který byl několikrát změněn. Zápisy ze všech projektových schůzek lze nalézt na webových stránkách projektu http://massiv.sourceforge.net (oddíly develper_notes, meetings).

Zima 2001 -
Návrh jádra systému - správa objektů, způsob komunikace mezi simulačními servery.
Návrh způsobu jak implementovat properties (automaticky archivovatelné a serializovatelné atributy objektů, u kterých systém monitoruje zápisy), object factories.
Výběr vývojářského prostředí a externích knihoven (STL, kryptování).
Návrh plánování událostí a jejich identifikace pro automatickou migraci.
Zobecnění jakékoli komunikace mezi servery na jedinou operaci a to migrace objektu, díky čemuž došlo k oddělení komunikačních protokolů jádra a skriptů.
Návrh průběžné archivace za běhu simulace.

Jaro 2002 -
Návrh garbage collectoru.
Návrh swapování objektů pro snížení režie správy objektů.
Návrh distribuovaného vyhledávání objektů a s tím souvísející generování identifikátorů objektů.
Návrh migračních skupin a automatického udržování informací o migračních skupinách.
Implementace garbage collectoru.
Implementace správy objektů, udržování informací o migračních skupinách.
Implementace správa a plánování událostí.
Implementace generování identifikace objektů, distribuované lokalizace objektů.
Implementace properties (automaticky archivovatelné a serializovatelné atributy objektů), globalní persistentní konfigurační databaze.
Implementace podpory automatické binární a textové serializace objektů.
Implementace nejnižší síťové vrsty s podporou kryptování.

Léto 2002 -
Implementace systému zpráv pro komunikaci mezi uzly.
Implementace archivave a swapování objektů.
Přepsána správa a plánování událostí podle nového návrhu.
Implementace virtuálního filesystemu pro blokový přístup k souboru pro archivaci.

Zima 2002 -
Implementace asynchronního virtuálního filesystemu.
Implementace automatického generování object fatories z popisů objektů (IDL).
Implementace kryptování v síťové vrstvě pro bezpečné přenosy dat.
Práce na testovacích skriptech nad jádrem systému.
Úpravy jádra (statistiky, verifikace příchozích zpráv apod.).
Práce na globální synchronizaci uzlů (připojování uzlů, distribuovaná archivace).
Práce na na datovém manažeru pro automatický download dat a na synchronizaci času mezi jednotlivými uzly systému.

Dělba práce

Štěpán Vondrák: Vytvořil konfigurační program pro automatickou kompilaci a linkování zdrojových souborů, systém logování zpráv, podpora automatické binární a textové serializace objektů, práce na správě objektů, automatické generování object factories z popisu objektů (IDL), testovací servery.

Marek Vondrák: Naprogramoval garbage collector, správu objektů, spojování objektů do skupin dle referencí, properties (automaticky archivovatelne a serializovatelne atributy objektu) pro detekci zápisu do objektů, asynchronní virtuální filesystem pro blokový přístup k souboru pro archivaci, mapování kryptovací knihovny.

Petr Tovaryš: Naprogramoval správu a plánování událostí, protokol pro migraci objektů, systém zpráv pro komunikaci mezi uzly, archivaci a swapování objektů, distribuované hledání objektů. V současné době pracuje na globální synchronizaci simulačních uzlů a broadcastu pro potřeby komunikace uzlů.

Ondřej Pečta: Naprogramoval nejnižší síťovou vrstvu. Pracuje na kryptované siťové vrtsvě (autorizace, výměna klíčů, ...) a jejím propojení s vyšší komunikační vrstvou.

Marek Švantner: Naprogramoval globalní persistentní konfigurační databazi, pracuje spolu s Ondřejem Pečtou na kryptované síťové vrstvě.

Martin Havlista: Naprogramoval podporu vláken do jádra, pracuje na datovém manažeru pro automatický download dat potřebných při simulaci a způsobu jejich aktualizace, a na distribuované synchronizaci času mezi jednotlivými uzly systému.

Odhad termínu dokončení

Léto, případně podzim, 2003.

Co by mohlo projekt ohrozit

Velkou měrou se na opoždění prací na projektu projevila malá aktivita některých členů týmu. Personální problémy se nakonec podařilo vyřešit. Objevily se také problémy s kompilátory, které často nezvládají některé modernější části jazyka C++, což vedlo ke změně implementace některých částí jádra.
Jiné komplikace než výše uvedené tak neočekáváme.