V dnešnom článku sme sa rozhodli trošku odhaliť jeden z receptov našej kuchyne. Povieme si o tom, odkiaľ máme dáta pre futbalnet.sk.
V prvom rade si je potrebné uvedomiť, že portál futbalnet.sk už prešiel treťou technologickou zmenou významného rozsahu.
ISSF – Informačný Systém Slovenského Futbalu.
Jedná sa o rozsiahly systém, ktorý používa Slovenský Futbalový Zväz a jednotlivé podzväzy a kluby. Cez tento systém sú priamo riadené všetky súťaže všetkých futbalových zväzov na Slovensku. Od rozlosovania, až po vyhodnotenie do tabuliek a štatistík.
Praportál futbalnet.sk, tá jeho prvá verzia bola priamo napojená na ISSF. Bol to jednoduchý portál s jednoduchým prehľadom výsledkov jednotlivých súťaží. Nespĺňal však požiadavky na modernú webovú aplikáciu a jeho výstupy boli veľmi obmedzené.
Vtedy SFZ nadviazalo spoluprácu s bart.sk, kde predmetom zákazky bol moderný portál ako oficiálny výsledkový servis pre všetky slovenské futbalové ligy.
Museli sme začať, ako sa hovorí od podlahy. Podmienka bolo vizualizovať dáta z ISSF. Ako prvé si bolo potrebné vytýčiť zodpovednosti. Kde končí zodpovednosť ISSF a kde začína zodpovednosť za portál. Na takéto vytýčenie pri komunikácii je najlepšia webslužba. Akákoľvek. Mali sme šťastie, že sme dostali možnosť si ju navrhnúť podľa seba. ISSF poskytlo v jednoduchom REST API základné dáta. Tieto sme však potrebovali nejakým spôsobom kombinovať, spracovávať a robiť komplexné prehľady pre budúci portál. Tak sme nad ISSF webslužbou urobili ďalšiu vrstvu, ktorá surové dáta z ISSF spája a pripravuje komplexné dátové štruktúry pre portál. Doteraz túto nadstavbu používame. Dali sme jej aj meno. Volá sa Lopatovač. Pretože transformuje dáta z jednej kopy na druhú, niečo prisype, niečo uberie.
Tento náš lopatovač sa stal základom pre moderný portál. Lopatovač nevlastní žiadne dáta a nemá vlastnú databázu. Dáta len cachuje do Redis-u.
Tento systém priniesol ako výhody, tak aj nevýhody. Výhodou boli jednoznačné a presné údaje priamo z ISSF. Nevýhody prišli postupne, kedy na portál začali chodiť v nedeľu po zápasoch masy návštevníkov. Výkon lopatovača sme ladili každý víkend. Pridávali sme cachovacie vrstvy a rôzne optimalizácie. To prinieslo neželaný vedľajší efekt, ktorým bolo oneskorenie v dátach. Niekedy trvalo aj 30 minút, kým sa výsledky prejavili na verejnom výsledkovom servise.
Spolupráca so SME a nová verzia portálu sportnet.sme.sk, priniesla ďalšie požiadavky, najmä na zlepšenie tohto oneskorenia.
Ako už z našich blogov a newslettrov iste viete, platforma SportNet.online má ako jednu z aplikácií aj Súťaže. Jedná sa o aplikáciu, cez ktorú si športové zväzy a kluby organizujú súťaže. Futbal nevynímajúc. Má prepracovanejšie API a integruje ďalšie služby platformy SportNet ako CRM, ticketing, feedy a podobne. Preto sme sa rozhodli pri tvorbe portálu sportnet.sme.sk, že použijeme práve toto API pre výsledkový servis slovenského futbalu.
Len ako dostať dáta z ISSF do aplikácie Súťaže?
Využili sme náš obľúbený redis a konkrétne redis streamy. O nich sme už aj písali.
Funkčnosť je popísaná v schematickom obrázku.
ISSF po zmene vypublikuje na redis stream message, ktorým nás notifikuje o tom, čo sa v ISSF zmenilo. Napríklad zmena osoby s registračným číslom 1315371. Alebo zmena zápasu s id 567460. Ďalší servis na serveri, voláme ho ISSF Listener túto správu zachytí a kontaktuje ďalší mini servis, ktorý voláme ISSF Konektor. Jedná sa o TCP server, ktorý dostane jednoduchý príkaz, napríklad update match id 567460. ISSF Konektor následne načíta všetky potrebné dáta z už spomínaného Lopatovača. Ten sme updatli a ISSF konektor pristupuje k necachovaným dátam v reálnom čase. Údaje sa spracujú a naimportujú do databázy pre službu Súťaže. Jednoduché však?
Samozrejme, nezaobišlo sa to s poriadnym ladením ako odchytenie prípadných chýb, tak ladenie výkonu. Škálovateľnosť je zabezpečená tým, že ISSF Listenerov, ktoré predstavujú konzumera pre Redis stream môže byť viacej. Momentálne ich je 16. Spracovávame ISSF správy o update vo futbale takto v 16 paralelných procesoch. Pridanie ďalšieho listenera je len otázkou spustenia nového Podman kontainera s upravenou ENV konfiguráciou.
Ako spracovávame chyby?
Všetko sa môže pokaziť a kazí sa. Napríklad dočasná nedostupnosť ISSF, alebo chybné dáta, s ktorými ISSF Konektor nepočítal. Ak v ISSF Listeneri vznikne akákoľvek chyba pri spracovaní, správa je odložená do takzvaného Error Streamu pre ďalšie, už opakované spracovanie. Error stream spracovávame raz za 10 minút. Ak sa opätovne nepodarí správa spracovať, ostáva v error streame až kým sa nespracuje manuálne, alebo kým spracovanie neprejde, ak bola chyba v dočasnej nedostupnosti niektorých služieb. Samozrejme o tom máme reporting a monitoring :).
Takto sa nám podarilo vyladiť systém aktualizácie údajov slovenského futbalu tak, aby bol jednoducho škálovateľný, aby portál a súťaže neboli závislé od ISSF systému. Aby dáta boli konzistentné, rýchle a v podstate v reálnom čase.
A máme už aj next-step. Tým, že je portál sportnet.sme.sk napojený priamo na modul Súťaže vieme aplikácie plnohodnotne rozširovať. Verím, že v najbližšej sezóne sa nám podarí dokončiť a spustiť novú mini aplikáciu – data kolektor. Chceli by sme tak na portál priniesť live výsledky a zápis z futbalového stretnutia v reálnom čase priamo na obrazovky vašich mobilov.
Vedeli ste, že aplikácia Súťaže zo SportNet platformy bola použitá aj ako hnací motor pre výsledkový servis MS v hokeji 2021, či Tour De France 2021?