Jak jsem dosáhl nečekaného výkonu a škálovatelnosti Zubokliku?
V dnešním článku vám představím, jak v Zubokliku optimalizujeme výkon pomocí Hotwire/Turbo/Stimulus, využíváme nové funkce Ruby 3.3 a Rails 7.2, a dosahujeme bleskových odpovědí při zpracování požadavků uživatelů. Zuboklik je díky těmto optimalizacím rychlý, stabilní a připraven na vysokou zátěž.
V Zubokliku se zaměřujeme na rychlost a stabilitu. Jak? Využíváme výhod nových verzí Ruby 3.3 a Rails 7.2, kombinovaných s rámcem Hotwire/Turbo/Stimulus pro co nejefektivnější načítání stránek a práci se servery.
Hotwire/Turbo/Stimulus – žádné zbytečné načítání
Dříve byly jednou z výzev u Rails aplikací dlouhé odezvy při generování celé stránky. V Zubokliku ale místo načítání celého rozhraní pokaždé využíváme TurboFrames pro načítání jen těch částí stránky, které se skutečně mění. Například pokud sestra přidá nebo upraví termín, systém aktualizuje pouze danou část stránky.
Naše řešení TurboStream nám umožňuje okamžitě zasílat aktualizace přímo do aplikace bez nutnosti obnovovat stránku. Když například lékař objedná pacienta nebo když dojde ke změně v kalendáři, stránka se automaticky aktualizuje pomocí Stimulus controllerů – což je nejen rychlé, ale také udržuje uživatele neustále informované o aktuálním stavu.
Minimalizace zátěže na server
Díky tomu, že Hotwire-rails je plně integrovaný do Ruby on Rails, můžeme obsluhovat vše pomocí klasického MVC přístupu (model-view-controller). Nemusíme psát komplikované JavaScriptové requesty ani řešit poolování dat – data z backendu jednoduše posíláme jako „push“ a na klientské straně se zobrazují bez nutnosti složitého frontendového kódu.
Na serveru využíváme Puma server, který podporuje spuštění několika workerů na jedno jádro. Každý worker dokáže zvládnout až 20 požadavků za vteřinu, takže při 16 jádrech na serveru zvládneme až 320 požadavků za vteřinu. Pokud by aplikace čelila ještě vyšší zátěži, můžeme přidat load balancer a posílit výkon pomocí dalších serverů.
Ruby 3.3 a nový JIT pro vyšší výkon
Velký vliv na rychlost aplikace má Ruby 3.3 s novým JIT (Just-In-Time) kompilátorem. JIT umožňuje překládat kód za běhu a optimalizovat ho na základě častých operací. Výsledkem je vyšší rychlost zpracování, zejména u často opakovaných kódů, což je klíčové při vyřizování velkého množství požadavků v reálném čase.
Díky JIT jsou Rails 7.2 schopné pracovat efektivněji s pamětí, což zajišťuje plynulý běh aplikace i při složitějších operacích. Nové Ruby a Rails dohromady znamenají o 30 % rychlejší reakce oproti předchozím verzím, což je skvělé pro udržení plynulosti i u náročných aplikací, jako je Zuboklik.
Průměrná rychlost odpovědí a výsledky optimalizací
Díky výše zmíněným optimalizacím je průměrná odezva na uživatelský požadavek u Zubokliku mezi 30 a 50 milisekundami. Tato rychlost je výsledkem kombinace částečného načítání stránky, efektivního využití serverových prostředků a optimalizace pomocí JIT.
Při jakýchkoli delších úlohách, jako je složitější zpracování dat na pozadí, využíváme background joby synchronizované přes PostgreSQL s využitím funkce FOR... SKIP LOCKED, takže doba čekání pro uživatele zůstává minimální. Server zároveň posílá notifikace přímo na web díky TurboStream, a pokud je třeba upozornit na akci přímo uživatele, postará se o to Stimulus controller, který zobrazí notifikaci nebo dialog v reálném čase.
Závěr
Díky těmto optimalizacím je Zuboklik rychlý a efektivní, a dokáže zvládnout i vysokou zátěž, což přináší plynulý uživatelský zážitek. Ať už se jedná o rychlé načítání částí stránky nebo efektivní zpracování background jobů, optimalizace výkonu v Zubokliku nás posouvají vpřed, abychom mohli lépe sloužit našim uživatelům.
Komentáře
Okomentovat