Ano, čtete správně. Zpomalit.
Rychlost, to je oč tu běží
V dnešní době je u aplikací obrovský tlak na rychlost. A ani my nejsme výjimkou – výkon je pro nás dlouhodobě jeden z klíčových parametrů. Aplikaci jsme proto opakovaně optimalizovali a často se ukázalo, že i drobná změna dokáže výrazně zlepšit uživatelský komfort – jak pro návštěvníky, tak pro pokladní.
Díky těmto optimalizacím dnes například u jednoho klienta zvládáme:
- více než 10000 termínovaných akcí v nabídce
- zobrazení aktuální obsazenosti v reálném čase
To ale není případ, o kterém dnes chceme mluvit.
Pomalé turnikety vs. rychlá aplikace
Při realizaci projektu pro sportovní halu jsme propojovali náš vstupenkový systém s turnikety. První testy vypadaly ideálně. Všechno fungovalo přesně tak, jak mělo.
Jenže po chvíli testování se začal objevovat zásadní problém:
Návštěvník přišel k turniketu s platnou vstupenkou…a turniket ho nepustil.
Celkem zásadní problém celého řešení.
Kde byl problém?
Po analýze logů jsme rychle našli viníka. Turniket byl vybaven vícepaprskovou čtečkou, která při přiložení vstupenky často načetla QR kód opakovaně. Každé načtení přitom odeslalo požadavek do našeho systému. Rozdíl mezi těmito požadavky byl v řádu milisekund.
A náš systém reagoval přesně tak, jak byl navržen:
- první požadavek → vstupenka označena jako použitá ✅
- druhý požadavek → vstupenka už je použitá ❌
Z pohledu systému všechno správně. Jenže turniket nestíhal. Zpracoval až ty „pozdější“ odpovědi, které říkaly, že vstupenka už není platná – a návštěvníka nepustil dovnitř.
Dá se to vyřešit?
Po diskuzi s dodavatelem turniketů jsme zjistili, že na jejich straně problém řešit nelze. Nikdy se nesetkali s tím, že by systém odpovídal tak rychle, a jejich řídicí jednotka neumožňovala úpravy. Řešení tak zůstalo na nás.
Když je řešením zpomalení
Po analýze možností jsme došli k překvapivému závěru:
👉 Nejjednodušší a nejspolehlivější řešení je aplikaci zpomalit.
Samozřejmě ne plošně. Zpomalení jsme aplikovali pouze na rozhraní pro kontrolu vstupenek a navíc vždy pro konkrétní terminál (turniket).
Současně jsme doplnili logiku pro detekci duplicitních požadavků, aby:
- nedocházelo k blokaci vstupu
- systém správně vyhodnotil opakované čtení stejné vstupenky
Z logů jsme zjistili, že turniket dokázal během cca 2 sekund poslat i více než 40 identických požadavků. Ano, čtyřicet. Výsledek?
Po nasazení úprav začalo celé řešení fungovat přesně tak, jak mělo. Turnikety komunikovaly se systémem spolehlivě, odbavení bylo plynulé a bez problémů jsme zvládli odbavit desetitisíce návštěvníků.
Pointa na závěr
Ne vždy platí, že rychlejší = lepší.
Někdy je potřeba systém zpomalit, aby celek fungoval správně. A přesně to je moment, kdy se z „rychlé aplikace“ stává dobře navržené řešení.