Reálné časy vlaků: jak funguje architektura aplikace Next Train
Skrytá infrastruktura za reálným časem
Stojíte na nástupišti a čekáte na vlak. Telefon ukáže, že přijede za čtyři minuty. Zdánlivě jednoduchá informace. Za ní ale stojí složitá architektura, která zpracovává data v reálném čase. A pokud stavíte aplikace s polohou nebo živými aktualizacemi, stojí za to pochopit, jak to funguje.
Problém: data, která se mění každou sekundu
Dopravní aplikace musí obsloužit tisíce uživatelů najednou a přitom jim poskytovat aktuální informace. Když se zpozdí vlak nebo změní nástupiště, musí se to projevit okamžitě. Zastaralá data znamenají ztrátu důvěry.
Otázka zní: jak doručit přesná data bez zahlcení infrastruktury?
Poloha jako vstupní bod
Nejprve aplikace zjistí, kde se uživatel nachází. Samotné GPS souřadnice nestačí. Potřebuje je převést na konkrétní stanice. K tomu slouží:
- Reverse geocoding pro převod souřadnic na čitelné názvy
- Výpočet vzdáleností k nejbližším stanicím
- Mezipaměť, která šetří opakované dotazy
Efektivní aplikace používají struktury jako GeoHash nebo QuadTree. Díky nim se nekontroluje vzdálenost ke všem stanicím ve městě, ale jen k těm v relevantních oblastech.
Databáze: statická vs. živá data
Dopravní data mají dvě vrstvy. Stálé informace jako polohy stanic a jízdní řády se mění pomalu. Naopak aktuální poloha vlaků nebo zpoždění se mění neustále.
Proto se data obvykle rozdělují:
- Statická data v PostgreSQL – stanice, trasy, jízdní řády
- Živá data v Redis – aktuální polohy, zpoždění
- Datové proudy přes Kafka nebo RabbitMQ – upozornění na změny
Statická data lze ukládat do mezipaměti na dny. Živá data potřebují aktualizace během zlomků sekundy.
API šité na mobilní použití
Jednoduchý přístup by byl vrátit všechna data při každém dotazu. V praxi ale vývojáři šetří přenosovou kapacitu:
- Posílají jen změny od posledního dotazu
- Používají Protocol Buffers nebo MessagePack místo JSON
- Nabízejí filtrování a stránkování výsledků
- Využívají CDN na regionální úrovni
WebSocket, nebo polling?
WebSocket vypadá jako ideální řešení pro živé aktualizace. U dopravních aplikací ale není vždy nejlepší volba. Pro běžné hledání nejbližšího spoje stačí dotazovat server každých 5–10 sekund. U prémiových funkcí, jako je sledování konkrétního spoje, se WebSocket vyplatí.
Provozování v praxi
Dopravní aplikace patří k infrastruktuře, na které záleží. Potřebuje:
- Redundanci přes více regionů
- Schopnost vracet data z mezipaměti při výpadku
- Omezení rychlosti dotazů
- Monitoring, který upozorní na zastaralá data dřív, než si toho všimnou uživatelé
Stejné principy jinde
Stejné vzorce se objevují v e-commerce při správě skladů, ve sdílených dopravních službách i v IoT dashboardech. Vždy jde o kombinaci statických a živých dat s efektivním dotazováním podle polohy.
NameOcean a infrastruktura pro reálný čas
Pokud stavíte aplikaci, která potřebuje rychlé odezvy, záleží i na doméně a hostingu. Potřebujete krátkou a zapamatovatelnou adresu, správně nastavené DNS pro failover a SSL bez zbytečného zpoždění. CDN by mělo být nakonfigurováno tak, aby nebrzdilo geografické dotazy.
Na NameOcean pomáháme vývojářům s registrací domén a nastavením infrastruktury, která zvládne Redis, Kafka i CDN. Právě tyto nástroje potřebují aplikace pracující v reálném čase.
Závěr
Když příště uvidíte čas příjezdu vlaku, vzpomeňte si, co všechno se skrývá za touto informací. Geoprostorové indexování, oddělení dat podle typu, edge caching a systémy pro zajištění dostupnosti. Dobrá uživatelská zkušenost začíná neviditelnou, ale promyšlenou architekturou.