latency se čte lejtnsiTakéOdezva, Doba odezvy, Zpoždění, LatencyZákladní
Definice
Latence je doba, která uplyne mezi vysláním požadavku a příchodem odpovědi. Měří se v milisekundách nebo mikrosekundách a skládá se z času na přenos signálu, zpracování na serveru, čekání ve frontách a serializace dat. Latence je nezávislá na propustnosti: rychlá linka může mít vysoké zpoždění a naopak.
Nezaměňujte: V sítích latence označuje zpoždění přenosu dat, v audiu zpoždění mezi vstupem a slyšitelným výstupem a v počítačové architektuře počet cyklů, než paměť vrátí data.
Než se na to spolehnete: Odkaz /slovnik/kvantitativni-trading v bodyHtml odpovídá povolené kategorii, ale nebyl v seznamu existujících hesel: pokud heslo neexistuje, odkaz odstraňte. Hodnota Wikidata Q1055710 pro latenci je uvedena z paměti a je vhodné ji ověřit. Údaj o 80 ms Praha: New York je řádový odhad reálné trasy, ne měřená hodnota.
Z čeho se latence skládá
Latence není jedno číslo, ale součet několika nezávislých částí. Fyzická vzdálenost dává tvrdou spodní hranici: světlo v optickém vlákně urazí zhruba 200 000 km za sekundu, takže cesta Praha: New York a zpět stojí kolem 80 ms i při dokonalé síti. K tomu se přičítá serializační zpoždění (jak dlouho trvá vytlačit rámec do linky), čekání ve frontách směrovačů, čas na zpracování na serveru a nakonec vykreslení v prohlížeči.
Ve webovém provozu se navíc platí za navazování spojení. TCP handshake stojí jednu okružní cestu, TLS podle verze další jednu až dvě. Právě proto se u HTTPS vyplatí udržovat spojení otevřená, používat session resumption a přiblížit koncový bod uživateli pomocí CDN.
Proč se latence nikdy neuvádí průměrem
Rozdělení dob odezvy je téměř vždy silně zešikmené: většina požadavků je rychlá, malá menšina extrémně pomalá. Průměr tuhle strukturu skryje. V praxi se proto sledují percentily, typicky p50, p95 a p99. Percentil p99 na hodnotě 900 ms znamená, že každý stý požadavek trvá skoro sekundu, a pokud jedna stránka spouští sto volání, dotkne se to prakticky každého uživatele.
Zdrojem chvostu bývá čekání ve frontě, garbage collector, studený start bezserverové funkce nebo souběh s dávkovou úlohou. Zvyšování výkonu bez zkrácení front pomůže málo: podle teorie front roste doba čekání strmě, jakmile se využití zdroje blíží sto procentům.
Latence versus propustnost
Propustnost říká, kolik dat projde za jednotku času; latence, jak dlouho čeká jeden konkrétní požadavek. Dávkový export dat může mít skvělou propustnost a mizernou odezvu, interaktivní API přesně naopak. Optimalizace obou zároveň si často odporují: dávkování a bufferování zvyšují propustnost, ale přidávají čekání, zatímco okamžité odesílání malých paketů odezvu zkracuje a linku vytěžuje hůř.
Kde se latence rozhoduje o produktu
Ve hrách a videokonferencích znamená zpoždění nad zhruba 150 ms znatelně horší zážitek. V elektronickém obchodu se pomalejší načítání promítá do konverze. V algoritmickém obchodování se rozdíly měří v mikrosekundách a řeší se umístěním serverů přímo v datovém centru burzy.
Jak latenci reálně snížit
- Zkrátit vzdálenost: edge lokality, regionální repliky databáze, cache blízko uživatele.
- Ušetřit okružní cesty: znovupoužití spojení, HTTP/2 nebo HTTP/3, sloučení sekvenčních volání do jednoho.
- Odstranit čekání: indexy v databázi, asynchronní zpracování toho, co nemusí být hotové před odpovědí.
- Měřit správně: percentily místo průměru, měření od klienta, ne jen ze serveru.
Příklady z praxe
Sekvenční volání API zbytečně násobí odezvu
Stránka s detailem objednávky načítá zákazníka, položky a dopravu třemi voláními za sebou. Při 120 ms na okružní cestu čeká uživatel 360 ms jen na síť, přestože dotazy na sobě nezávisí. Paralelizace zkrátí čekání na dobu nejpomalejšího z nich, tedy zhruba 120 ms.
// špatně: 3 okružní cesty za sebou const customer = await fetch('/api/customer/42').then(r => r.json()); const items = await fetch('/api/order/7/items').then(r => r.json()); const shipping = await fetch('/api/order/7/shipping').then(r => r.json()); // lépe: jedna okružní cesta v paralelu const [customer, items, shipping] = await Promise.all([ fetch('/api/customer/42').then(r => r.json()), fetch('/api/order/7/items').then(r => r.json()), fetch('/api/order/7/shipping').then(r => r.json()), ]);Průměr vypadá dobře, p99 pálí uživatele
Monitoring hlásí průměrnou odezvu 90 ms a tým je spokojený. Po zapnutí percentilů se ukáže p99 na 2,4 sekundy: pomalé jsou dotazy zákazníků s velkou historií, kde chybí index. Průměr tuto skupinu utopil v datech, přestože jde o nejhodnotnější zákazníky.
SELECT percentile_cont(0.5) WITHIN GROUP (ORDER BY duration_ms) AS p50, percentile_cont(0.95) WITHIN GROUP (ORDER BY duration_ms) AS p95, percentile_cont(0.99) WITHIN GROUP (ORDER BY duration_ms) AS p99 FROM request_log WHERE created_at > now() - interval '1 hour';
Časté omyly
- MýtusMáme gigabitovou linku, takže latenci máme nízkou.
- Ve skutečnostiKapacita linky a latence spolu přímo nesouvisí. Gigabitové satelitní připojení může mít odezvu přes 500 ms, zatímco pomalejší pozemní linka do sousedního datového centra jednotky milisekund. Šířka pásma řeší objem dat, ne dobu čekání na první bajt.
- MýtusLatenci vyřešíme silnějším serverem.
- Ve skutečnostiSilnější hardware pomůže jen tehdy, když je úzkým hrdlem výpočet. Pokud odezvu tvoří fyzická vzdálenost, počet okružních cest nebo čekání ve frontě u přetíženého zdroje, výkonnější stroj změní málo.
- MýtusPing ukazuje latenci mojí aplikace.
- Ve skutečnostiPing měří jen okružní cestu ICMP paketu k hostiteli. Skutečná odezva aplikace zahrnuje navíc navázání TCP a TLS spojení, zpracování na serveru, dotazy do databáze a vykreslení v prohlížeči, takže bývá násobně vyšší.
Časté dotazy
- Jaká latence je pro webovou aplikaci ještě přijatelná?
- Přijatelná latence závisí na typu interakce. Odezva do zhruba 100 ms působí okamžitě, do 300 ms je stále plynulá, nad jednu sekundu už uživatel vnímá čekání a přepíná pozornost jinam. U formulářů a vyhledávání s našeptávačem se cílí na desítky milisekund, u složitých reportů se toleruje i několik sekund, pokud aplikace ukáže průběh. Důležitější než jedno číslo je stabilita: kolísání odezvy mezi 50 a 2000 ms vnímají lidé hůř než konzistentních 400 ms.
- Jak se latence měří v produkčním provozu?
- Latence se v produkci měří na několika místech současně. Server zaznamenává dobu zpracování požadavku, reverzní proxy nebo load balancer čas včetně front, a měření na straně klienta (Real User Monitoring přes Performance API v prohlížeči) přidává síť a vykreslení. Distribuované trasování pak ukáže, kolik z celkové odezvy spotřebovala která služba. Data se agregují do histogramů a vyhodnocují percentily, ne průměry. Doplňkem je syntetické měření z různých geografických lokalit, které odhalí regionální problémy dřív než stížnosti uživatelů.
- Proč latence roste, i když server není vytížený?
- Latence roste i při zdánlivě nízkém vytížení kvůli frontám a sdíleným zdrojům. Průměrné využití procesoru 40 procent může skrývat krátké špičky, během nichž se požadavky hromadí. Dalšími viníky bývají vyčerpaný pool databázových spojení, zamykání v databázi, pauzy garbage collectoru, přeplněné buffery na síťových prvcích (bufferbloat) nebo pomalý externí API partner. Užitečné je proto sledovat vedle využití i délku front a dobu čekání na zámky.
- Snižuje HTTP/3 latenci oproti HTTP/2?
- HTTP/3 latenci obvykle snižuje, zejména na nestabilních sítích. Protokol běží nad QUIC, který slučuje navázání transportního a šifrovaného spojení do jedné okružní cesty a u opakovaných návštěv umožňuje odeslat data prakticky okamžitě. Zároveň odstraňuje blokování na úrovni TCP, kdy jeden ztracený segment pozdrží všechny souběžné streamy. Na kvalitní pevné lince bývá rozdíl malý, na mobilních sítích se ztrátovostí paketů znatelný. Přínos je ale menší než u optimalizací, které ubírají okružní cesty nebo přibližují obsah uživateli.
Zdroje
- Latency (engineering)(otevře se v novém okně)
- Performance API(otevře se v novém okně)
- RFC 9000: QUIC: A UDP-Based Multiplexed and Secure Transport(otevře se v novém okně)
- PostgreSQL Documentation: Aggregate Functions(otevře se v novém okně)