← Cloudflare Load Balancing / load-balancing / understand-basics
Session affinity
Když zapnete session affinity, váš load balancer nasměruje všechny požadavky konkrétního koncového uživatele na jeden endpoint. Díky této kontinuitě se zachovávají informace o uživatelské relaci, například obsah nákupního košíku, které by se jinak mohly ztratit, kdyby se požadavky rozkládaly mezi více serverů.
Session affinity může také pomoci snížit počet síťových požadavků, což přináší úspory zákazníkům s fakturací podle využití.
Typy
Session affinity určuje typ session affinity, který má load balancer použít, pokud není uvedeno jinak jako "none" nebo "" (výchozí).
Pouze pomocí cookie Cloudflare
Při prvním požadavku na proxovaný load balancer se vygeneruje cookie, která obsahuje informaci o tom, na který koncový bod bude požadavek přesměrován. Další požadavky od stejného klienta na stejný load balancer se po dobu platnosti cookie posílají na koncový bod, který je v ní zakódovaný, dokud tento koncový bod zůstává zdravý. Jakmile cookie vyprší nebo koncový bod přestane být zdravý, vypočítá se a použije nový koncový bod.
Jak to funguje?
Session affinity automaticky směruje požadavky od stejného klienta na stejný koncový bod:
- Když klient odešle svůj první požadavek, Cloudflare nastaví
__cflbcookie u klienta (aby bylo možné sledovat přiřazený koncový bod). - Následující požadavky od stejného klienta jsou přesměrovány na daný endpoint po dobu platnosti cookie, dokud zůstává endpoint healthy.
- Pokud cookie vyprší nebo se endpoint stane nezdravým, Cloudflare nastaví nový cookie sledující nový failoverový endpoint.
flowchart LR
accTitle: Session affinity process
accDescr: Session affinity directs requests from the same client to the same server.
A[Client] --Request--> B{<code>__cflb</code> cookie set?}
B -->|Yes| C[Route to previous endpoint]
C --> O2
B ---->|No| E[Follow normal routing]
E --> O2
E --Set <code>__cflb</code> cookie--> A
subgraph P1 [Pool 1]
O1[Endpoint 1]
O2[Endpoint 2]
end
Všechny relace založené na souborech cookie mají ve výchozím nastavení délku 23 hodin, pokud si nenastavíte vlastní délku relace Doba životnosti (TTL).
Relační cookie je zabezpečené, když Always Use HTTPS je povoleno. Atribut HttpOnly je navíc u cookie vždy povolen, aby se zabránilo útokům typu cross-site scripting.
Pomocí cookie Cloudflare se záložní IP adresou klienta
Chová se podobně jako cookie s tím rozdílem, že počáteční výběr koncového bodu je stabilní a vychází z IP adresy klienta.
Pomocí HTTP hlavičky
Při prvním požadavku na proxovaný load balancer se vygeneruje klíč relace na základě nakonfigurovaných HTTP hlaviček. Tento klíč relace obsahuje hlavičky požadavku, podle kterých se ve stavu relace load balanceru ukládá informace o tom, na který koncový bod se má požadavek přesměrovat. Další požadavky na load balancer se stejnými hlavičkami se posílají na stejný koncový bod, dokud relace trvá a koncový bod zůstává zdravý. Pokud je relace neaktivní po dobu odpovídající TTL session affinity v sekundách nebo pokud koncový bod přestane být zdravý, vypočítá se a použije nový koncový bod.
Určete, jak se používají hlavičky
Ve výchozím nastavení musí být v požadavcích odesílaných na váš load balancer přítomna alespoň jedna z HTTP hlaviček, které jste nakonfigurovali pro session affinity podle HTTP hlavičky, aby mohly vzniknout relace založené na hlavičkách. Pokud klient ve svých požadavcích přidá nebo odebere HTTP hlavičky a relaci již má navázanou, vytvoří se nová relace na základě nových HTTP hlaviček nalezených v následujících požadavcích, pokud jsou uvedeny ve vaší konfiguraci.
Pokud chcete, aby byly pro vytvoření relace vyžadovány všechny vámi nakonfigurované HTTP hlavičky v požadavcích, nastavte session_affinity_attributes.require_all_headers na true přes Cloudflare API nebo přepněte Require all headers na enabled v dashboardu Cloudflare při úpravě load balanceru.
Aktivace Session Affinity na dashboardu Cloudflare
Povolte Session Affinity, když vytvořit nebo upravit load balancer, během Hostname krok.
Pokud povolíte Session Affinity, vyberte jednu z následujících možností:
- Pouze pomocí cookie Cloudflare: Nastaví
__cflbcookie ke sledování přiřazeného koncového bodu. - Pomocí cookie Cloudflare se záložní IP adresou klienta: Nastaví
__cflbcookie, ale pokud není cookie relační afinity k dispozici, použije také IP adresu klienta. - Pomocí HTTP hlavičky.
Aktivace Session Affinity přes API Cloudflare
Session affinity je vlastnost load balancerů, kterou lze nastavit pomocí následujících koncových bodů:
Přizpůsobte chování session affinity pomocí session_affinity, session_affinity_ttl, a session_affinity_attributes parametry.
Chcete-li povolit session affinity podle HTTP hlavičky, nastavte session_affinity hodnotu na header a přidejte názvy vašich
HTTP hlaviček do session_affinity_attributes.headers.
Podrobnosti o příkazech API v kontextu najdete v Vytvoření load balanceru pomocí API.
Endpoint Drain
Pomocí funkce endpoint drain můžete z endpointu odčerpat nebo úplně odstranit veškerý provoz, aniž by to ovlivnilo aktivní zákazníky. Další podrobnosti o funkci endpoint drain najdete v Provádění plánované údržby.
Zero-Downtime Failover
Zero-Downtime Failover automaticky směruje provoz na endpointy v rámci poolu při dočasných síťových problémech. Díky tomu se snižuje počet chyb zobrazených uživatelům, pokud k problému dojde mezi jednotlivými aktivními kontrolami stavu.
Můžete zapnout jednu ze tří možností:
- Žádné: Nedojde k žádnému failoveru a uživatelům se mohou zobrazovat chyby.
- Dočasné: Provoz se bude odesílat na jiné endpointy, dokud nebude opět dostupný původně přiřazený endpoint.
- Sticky: Cookie session affinity se aktualizuje a další požadavky se od té chvíle podle potřeby odesílají na nový endpoint.