← Cloudflare Queues / queues / konfigurace
Souběžnost konzumentů
Souběžnost konzumenta umožňuje přijímající Worker zpracovávající zprávy z fronty automaticky horizontálně škálovat, aby udrželi tempo, s jakým se do fronty zapisují zprávy.
V mnoha systémech může rychlost zápisu zpráv do fronty snadno přesáhnout rychlost, jakou je jediný konzument dokáže číst a zpracovávat. Bývá to obvykle proto, že konzument musí parsovat obsah zpráv, zapisovat do úložiště nebo databáze, případně volat API třetích stran (nadřazených systémů).
Mějte na paměti, že produceři front se vždy škálují až do maximální podporovaný počet zpráv za sekundu (na frontu) limit.
Povolit souběžnost
Ve výchozím nastavení mají všechny fronty povolenou souběžnost. Konzumenti fronty se automaticky škálují nahoru k maximálnímu počtu souběžných vyvolání podle potřeby pro správu zásoby zpráv fronty a/nebo míry chyb.
Jak funguje souběžnost
Po zpracování dávky zpráv Queues zkontroluje, zda je třeba upravit počet souběžných konzumentů. Počet souběžných konzumentů spouštěných pro frontu se automaticky škáluje na základě několika faktorů, mimo jiné:
- Počet zpráv ve frontě (backlog) a rychlost jeho růstu.
- Poměr neúspěšných volání vůči úspěšným. K neúspěšnému volání dojde, když váš
queue()handler vrátí nezachycenou výjimku místovoid(nic). - Hodnota
max_concurrencynastavené pro tohoto spotřebitele.
Kde je to možné, Queues optimalizuje chod tak, aby zabránilo exponenciálnímu růstu backlogu, a minimalizovalo tak situace, kdy počet zpráv ve frontě naroste natolik, že dosáhne limit uchování zpráv před zpracováním.
Příklad
Pokud do fronty zapisujete 100 zpráv za sekundu a jediný souběžný konzument potřebuje na zpracování dávky 100 zpráv 5 sekund, počet zpráv čekajících na zpracování poroste rychleji, než je konzument stačí zpracovávat.
V tomto scénáři si Queues všimnou rostoucího backlogu a zvýší počet souběžných vyvolání konzumujících Workerů až na ustálený stav přibližně pěti (5), dokud se rychlost příchozích zpráv nesníží, konzument nezačne zprávy zpracovávat rychleji nebo nezačne generovat chyby.
Proč se moji konzumenti automaticky neškálují?
Pokud se vaši konzumenti automaticky neškálují, může to mít několik pravděpodobných příčin:
max_concurrencybyl nastaven na 1.- Worker konzumenta místo zpracování zpráv vrací chyby. Zkontrolujte konzumenta a ověřte, že funguje správně.
- Právě se zpracovává dávka zpráv. Queues kontroluje, zda má automaticky škálovat konzumenty, až po zpracování celé dávky zpráv, takže během zpracování dávky ke škálování nedojde. Zvažte zmenšení dávek nebo úpravu konzumenta tak, aby zprávy zpracovával rychleji.
Omezení souběžnosti
Pokud je váš pracovní postup omezen nadřazeným API nebo systémem, může být výhodnější nechat backlog růst a přijmout vyšší celkovou latenci výměnou za to, že nadřazený systém nepřetížíte.
Konkurenci Workeru konzumenta můžete nakonfigurovat dvěma způsoby:
- Nastavení souběžnosti v Cloudflare dashboardu
- Nastavte souběžnost pomocí Konfigurační soubor Wrangler
Nastavení souběžnosti v Cloudflare dashboardu
Chcete-li nakonfigurovat nastavení souběžnosti pro váš konzumentský Worker z dashboardu:
-
V dashboardu Cloudflare přejděte na Queues stránce.
Přejděte na Queues ↗ -
Vyberte frontu > Nastavení.
-
Vyberte Upravit konzumenta v části Podrobnosti spotřebitele.
-
Nastavte Maximální počet vyvolání konzumenta na hodnotu mezi
1a250. Tato hodnota udává maximální počet souběžných vyvolání konzumenta dostupných pro vaši frontu.
Chcete-li odstranit pevně stanovenou maximální hodnotu, vyberte automaticky (doporučeno).
Mějte na paměti, že pokud do fronty zapisujete zprávy rychleji, než je stíháte zpracovávat, mohou nakonec dosáhnout maximální doba uchování nastavené pro tuto frontu. Jednotlivé zprávy, které dosáhnou tohoto limitu, ve frontě vyprší a budou odstraněny.
Nastavte souběžnost v Konfigurační soubor Wrangler
Chcete-li nastavit pevný maximální počet souběžných spuštění consumeru pro danou frontu, nakonfigurujte max_concurrency v souboru Wrangler:
{
"queues": {
"consumers": [
{
"queue": "my-queue",
"max_concurrency": 1
}
]
}
}[[queues.consumers]]
queue = "my-queue"
max_concurrency = 1Chcete-li limit odstranit, odeberte max_concurrency nastavení z [[queues.consumers]] konfiguraci dané fronty a volání npx wrangler deploy k odeslání aktualizace konfigurace.
Billing
Když se vyvolá více Worker konzumentů, každé vyvolání Workeru s sebou nese Náklady na dobu CPU.
- Pokud chcete zpracovat všechny zprávy zapsané do fronty, efektivní celkové náklady zůstávají stejné, a to i s povolenou souběžností.
- Povolení souběžnosti tyto náklady jednoduše posune dopředu a může pomoct zabránit tomu, aby zprávy dosáhly limit uchování zpráv.
Fakturace konzumentů se řídí Standardní model využití Workers to znamená, že se vývojáři účtuje požadavek i čas CPU využitý v tomto požadavku.
Příklad
Worker konzumenta, kterému zpracování dávky zpráv trvá 2 sekundy, bude mít při zpracování 50 milionů (50,000,000) zpráv stejné celkové náklady bez ohledu na to, zda je zpracovává souběžně (rychleji), nebo jednotlivě (pomaleji).