Zhruba někdy koncem března, když mi bylo nabídnuto účastnit se projektu nové CDN pro Stream.cz, jsem vůbec netušil o co jde. Po několika velice bouřlivých poradách, kterých se zůčastnili zástupci Seznamu a Stream.cz, kdy jsme původní specifikaci v podstatě rozebrali na kousky a zjistili, že něco takové ani není možné napsat, jsme se rozhodli navrhnout vlastní řešení. Asi po týdnu, kdy jsem se věnoval implementační analýze toho, jak by to mělo vlastně fungovat, se zrodil návrh, který se od konečného řešení sice hodně lišil, ale byla už v něm popsaná základní filozofie.
Jak to vlastně funguje? Cdn-ka je v podstatě několik serverů, které pouze servírujou staticky uložené soubory přes HTTP koncovému uživateli. Aby to nebylo málo, má i podporu pro tzv. asf soubory pro on-line streamování. Pak existuje jakási centrální jednotka (dispatcher), který rozhoduje, kam se uživatel pošle podle toho, jak jsou na tom jednotlivé "cache". Aby o tom měl přehled, pravidelně si obchází servisním procesem všechny servery a získává si informace, jak je na tom procesor, kolik packetů dává síťovka, jaký je momentální datový tok, jak je na tom paměť a spousta dalších údajů. Z těchto hodnot si vypočítá číslo, na základě kterého se pak rozhodne, kam se koncový uživatel pošle. V potaz se bere i IP adresa clienta. Celkově je to naprosto jednoduchý princip a v konečném důsledku i velmi dobře funkční.
Aby jsme si byli jisti, že nám CDN-ka bude splňovat to, co od ní potřebujeme, ještě před nasazením na Stream.cz jsme ji vyzkoušeli pro online streaming fotbalových zápasů pražské Dukly, kdy jsme potřebovali rozhazovat uživatele na servery podle vytížení síťovky. Cdnka nezklamala a všichni byli spokojeni.
Asi bych se měl zmínit i o tom, jaké technologie jsme použili. Dispatcher je napsaný v C++ jako FastRPC a HTTP modul do našeho seznamáckého (meta)serveru. Cache servery jsou to samé. Některé části, jako třeba downloader souborů a administrace celého systému jsou napsány v Pythonu, jako i některé další části. Data se uchovávají v MySQL databázi. Celý systém je designovaný na 10.000.000 souborů, což je zatím nedosažitelná hodnota a větší starosti budeme mít s místem na discích :).
A nakonec, co to vlastně streamu přineslo a jaká je budoucnost celé CDN-ky. Určitě v první řadě kvalitní a výkonné řešení toho, co potřebují a jednoduchou administraci. Protože je CDN postavena na Lighttpd, tak jako např. celé youtube.com, velice jednoduchou záležitostí byla podpora seekování pro flv soubory přes mod_flv_streaming. CDN-ka se dá bez problému využít a tak jí tak používáme pro rozklad zátěže při on-line streamování a možná pro ni najdeme v budoucnu i další použití.
Myslím, že se nakonec sluší poděkovat za spolupráci Edovi Velebovi, Petru Messnerovi a Vláďovi Šišmovi, kteří se zůčastnili implementace, pak určitě Mirovi Taláškovi, se kterým jsem dával dohromady implementační analýzu a dalším zůčastněným ze stream.cz, kteří se účastnili buď konzultací, oponentury a koneckonců i nasazení do provozu. Ať slouží....
