Osvědčené postupy pro optimální výkon

Azure Managed Instance for Apache Cassandra je plně spravovaná služba pro čistě opensourcové clustery Apache Cassandra. Služba také umožňuje přepsání konfigurací v závislosti na konkrétních potřebách jednotlivých úloh, což umožňuje maximální flexibilitu a kontrolu tam, kde je to potřeba. Tento článek obsahuje tipy, jak optimalizovat výkon.

Optimální nastavení a konfigurace

Faktor replikace, počet disků, počet uzlů a skladové položky

Vzhledem k tomu, že podpora Azure ve většině oblastí tři zóny dostupnosti a Spravovaná instance Cassandra mapuje zóny dostupnosti na racky, doporučujeme zvolit klíč oddílu s vysokou kardinalitou, aby nedocházelo k horkým oddílům. Pro zajištění nejvyšší úrovně spolehlivosti a odolnosti proti chybám důrazně doporučujeme nakonfigurovat faktor replikace 3. Doporučujeme také zadat násobek faktoru replikace jako počet uzlů, například 3, 6, 9 atd.

Pro počet zřízených disků používáme RAID 0. Abyste získali optimální počet IOPS, musíte zkontrolovat maximální počet IOPS na skladové pořiďte společně s IOPS disku P30. Skladová položka Standard_DS14_v2 například podporuje 51 200 IOPS bez mezipaměti, zatímco jeden disk P30 má základní výkon 5 000 IOPS. Čtyři disky by tedy vedly k 20 000 IOPS, což je dobře pod limity počítače.

Důrazně doporučujeme provést rozsáhlé srovnávací testy vaší úlohy s skladovou jednotkou a počtem disků. Srovnávací testy jsou zvláště důležité v případě skladových položek s pouze osmi jádry. Náš výzkum ukazuje, že osm jader procesorů funguje jenom pro nejméně náročné úlohy a většina úloh potřebuje k výkonu minimálně 16 jader.

Analytické a transakční úlohy

Transakční úlohy obvykle potřebují datové centrum optimalizované pro nízkou latenci, zatímco analytické úlohy často používají složitější dotazy, které jejich spouštění trvá déle. Ve většině případů byste chtěli samostatná datová centra:

  • Jedna optimalizovaná pro nízkou latenci
  • Jedna optimalizovaná pro analytické úlohy

Optimalizace analytických úloh

Pro analytické úlohy doporučujeme zákazníkům použít následující cassandra.yaml nastavení (postup najdete tady ).

Časové limity

Hodnota Výchozí nastavení Cassandra MI Doporučení pro analytické úlohy
read_request_timeout_in_ms    5,000   10,000
range_request_timeout_in_ms 10,000 20,000
counter_write_request_timeout_in_ms  5,000 10,000
cas_contention_timeout_in_ms 1,000 2 000
truncate_request_timeout_in_ms 60,000 120 000
slow_query_log_timeout_in_ms 500 1000
roles_validity_in_ms 2,000 120 000
permissions_validity_in_ms 2,000 120 000

Mezipaměti

Hodnota Výchozí nastavení Cassandra MI Doporučení pro analytické úlohy
file_cache_size_in_mb 2,048 6 144

Další doporučení

Hodnota Výchozí nastavení Cassandra MI Doporučení pro analytické úlohy
commitlog_total_space_in_mb 8,192 16,384
column_index_size_in_kb 64 16
compaction_throughput_mb_per_sec 128 256

Nastavení klienta

Doporučujeme zvýšit časové limity klientských ovladačů Cassandra v souladu s časovými limity použitými na serveru.

Optimalizace pro nízkou latenci

Naše výchozí nastavení jsou už vhodná pro úlohy s nízkou latencí. Abychom zajistili nejlepší výkon pro koncové latence, důrazně doporučujeme použít klientský ovladač, který podporuje spekulativní spouštění a odpovídajícím způsobem konfiguruje klienta. Pro ovladač Java V4 najdete ukázku, která ilustruje, jak to funguje a jak povolit zásady.

Monitorování výkonových lahviček

Výkon procesoru

Stejně jako každý databázový systém funguje Cassandra nejlépe, pokud využití procesoru je přibližně 50 % a nikdy se nedostane nad 80 %. Metriky procesoru můžete zobrazit na kartě Metriky na portálu:

Screenshot of CPU metrics.

Pokud je procesor trvale vyšší než 80 % pro většinu uzlů, databáze se přetíží v několika časových limitech klienta. V tomto scénáři doporučujeme provést následující akce:

  • vertikálně navyšte kapacitu na skladovou položku s více jádry procesoru (zejména pokud jsou jádra pouze 8 nebo méně).
  • horizontálně škálovat přidáním dalších uzlů (jak je uvedeno výše, počet uzlů by měl být násobek faktoru replikace).

Pokud je procesor jenom pro několik uzlů vysoký, ale pro ostatní, znamená to, že je horký oddíl a vyžaduje další šetření.

Poznámka:

Změna skladové položky se podporuje prostřednictvím webu Azure Portal, Azure CLI a nasazení šablon ARM. Šablonu ARM můžete nasadit nebo upravit a nahradit skladovou položku jedním z následujících způsobů.

  • Standard_E8s_v4
  • Standard_E16s_v4
  • Standard_E20s_v4
  • Standard_E32s_v4
  • Standard_DS13_v2
  • Standard_DS14_v2
  • Standard_D8s_v4
  • Standard_D16s_v4
  • Standard_D32s_v4
  • Standard_L8s_v3
  • Standard_L16s_v3
  • Standard_L32s_v3
  • Standard_L8as_v3
  • Standard_L16as_v3
  • Standard_L32as_v3

Upozorňujeme, že v současné době nepodporujeme přechod mezi rodinami skladových položek. Pokud například aktuálně máte a Standard_DS13_v2 zajímá vás upgrade na větší skladovou položku, například Standard_DS14_v2tato možnost není k dispozici. Můžete však otevřít lístek podpory a požádat o upgrade na vyšší skladovou položku.

Výkon disků

Služba běží na spravovaných discích Azure P30, což umožňuje "nárazové IOPS". Pokud jde o kritické body výkonu související s disky, vyžaduje se pečlivé monitorování. V tomto případě je důležité zkontrolovat metriky IOPS:

Screenshot of disk I/O metrics.

Pokud metriky zobrazují jednu nebo všechny následující charakteristiky, může to znamenat, že potřebujete vertikálně navýšit kapacitu.

  • Konzistentně vyšší než nebo rovno základnímu IOPS (nezapomeňte číslo vynásobit 5 000 IOPS počtem disků na uzel).
  • Konzistentně vyšší než nebo rovno maximálnímu počtu vstupně-výstupních operací za sekundu povolených pro skladovou položku pro zápisy.
  • Vaše skladová položka podporuje úložiště uložené v mezipaměti (mezipaměť pro zápis) a toto číslo je menší než IOPS ze spravovaných disků (toto bude horní limit pro počet IOPS pro čtení).

Pokud se u několika uzlů zobrazí zvýšení počtu vstupně-výstupních operací za sekundu, je možné, že máte horký oddíl a budete muset zkontrolovat data a zjistit potenciální nerovnoměrnou distribuci.

Pokud je počet IOPS nižší, než je podporovaná vybranou skladovou jednotkou, ale vyšší nebo rovna IOPS disku, můžete provést následující akce:

Pokud vaše IOPS maximum z toho, co vaše skladová položka podporuje, můžete:

Další informace najdete v tématu Výkon virtuálního počítače a disku.

Výkon sítě

Ve většině případů je dostatečný výkon sítě. Pokud ale často streamujete data (například časté horizontální vertikální navýšení nebo snížení kapacity) nebo dochází k velkému počtu příchozích/výchozích přesunů dat, může se to stát problémem. Možná budete muset vyhodnotit výkon sítě skladové položky. Skladová položka Standard_DS14_v2 například podporuje 12 000 Mb/s, porovnejte ji s bajtem in/out v metrikách:

Screenshot of network metrics.

Pokud se u několika uzlů zobrazí pouze zvýšená úroveň sítě, možná máte horký oddíl a potřebujete zkontrolovat rozdělení dat nebo vzory přístupu pro případnou nerovnoměrnou distribuci dat.

  • Vertikálně navyšte kapacitu na jinou skladovou položku, která podporuje více vstupně-výstupních operací sítě.
  • Horizontálně vertikálně navyšte kapacitu clusteru přidáním dalších uzlů.

Příliš mnoho připojených klientů

Nasazení by se měla naplánovat a zřídit tak, aby podporovala maximální počet paralelních požadavků požadovaných pro požadovanou latenci aplikace. V případě daného nasazení představuje zavedení většího zatížení systému nad minimální prahovou hodnotu, která zvyšuje celkovou latenci. Monitorujte počet připojených klientů a ujistěte se, že to nepřekračuje přípustné limity.

Screenshot of connected client metrics.

Místo na disku

Ve většině případů je dostatek místa na disku, protože výchozí nasazení jsou optimalizovaná pro IOPS, což vede k nízkému využití disku. Přesto doporučujeme občas zkontrolovat metriky místa na disku. Cassandra shromažďuje velké množství disků a pak ho snižuje při aktivaci komprimace. Proto je důležité zkontrolovat využití disků v delších obdobích, aby se vytvořily trendy, jako je komprimace, která nemůže získat místo.

Poznámka:

Aby se zajistilo dostupné místo pro komprimace, mělo by se využití disku udržovat přibližně na 50 %.

Pokud se toto chování zobrazí jenom u několika uzlů, možná máte horký oddíl a potřebujete zkontrolovat rozdělení dat nebo vzory přístupu pro potenciální nerovnoměrnou distribuci dat.

  • přidání dalších disků, ale mějte na paměti limity IOPS, které vaše skladová položka ukládá.
  • horizontální navýšení kapacity clusteru

Paměť prostředí JVM

Náš výchozí vzorec přiřadí k prostředí JVM polovinu paměti virtuálního počítače s horním limitem 31 GB, což je ve většině případů dobrou rovnováhu mezi výkonem a pamětí. Některé úlohy, zejména úlohy, které mají časté kontroly čtení mezi oddíly nebo rozsahy, můžou být náročné na paměť.

Ve většině případů se paměť efektivně uvolní uvolňováním paměti Jazyka Java, ale zejména v případě, že procesor často překročí 80 % není dostatek cyklů procesoru pro uvolňování paměti. Všechny problémy s výkonem procesoru by se proto měly vyřešit před problémy s pamětí.

Pokud procesor najet pod 70 % a uvolňování paměti není možné uvolnit paměť, možná budete potřebovat více paměti JVM. To platí hlavně v případě, že používáte skladovou položku s omezenou pamětí. Ve většině případů je potřeba zkontrolovat dotazy a nastavení klienta a snížit fetch_size počet vybraných v limit dotazu CQL.

Pokud skutečně potřebujete více paměti, můžete:

  • Vytvořte lístek pro nás, abychom zvýšili nastavení paměti prostředí JVM za vás.
  • Vertikální škálování na skladovou položku, která má k dispozici více paměti

Náhrobky

Opravy spouštíme každých sedm dní pomocí reaperu, který odebere řádky, jejichž hodnota TTL vypršela (označuje se jako "náhrobek"). Některé úlohy mají častější odstranění a zobrazují se upozornění, jako jsou Read 96 live rows and 5035 tombstone cells for query SELECT ...; token <token> (see tombstone_warn_threshold) v protokolech Cassandra, nebo dokonce chyby, které značí, že dotaz nemohl být splněn kvůli nadměrným náhrobkům.

Krátkodobé zmírnění rizik v případě, že dotazy nedostanou splněné, je zvýšit tombstone_failure_threshold konfiguraci Cassandra z výchozích 100 000 na vyšší hodnotu.

Kromě toho doporučujeme zkontrolovat hodnotu TTL na prostoru klíčů a potenciálně spustit opravy denně, aby se vymazaly více náhrobků. Pokud jsou seznamy TTL krátké, například méně než dva dny, a toky dat se rychle odstraní, doporučujeme zkontrolovat strategii komprimace a upřednostňovat Leveled Compaction Strategy. V některýchpřípadechch

Dávková upozornění

K tomuto upozornění může dojít v CassandraLogs a potenciálně souvisejících selháních:

Batch for [<table>] is of size 6.740KiB, exceeding specified threshold of 5.000KiB by 1.740KiB.

V takovém případě byste měli zkontrolovat dotazy, abyste zůstali pod doporučenou velikostí dávky. Vevýjimečných batch_size_fail_threshold_in_kb  

Upozornění velkého oddílu

V CassandraLogs můžete narazit na toto upozornění:

Writing large partition <table> (105.426MiB) to sstable <file>

To značí problém v datovém modelu. Tady je článek o přetečení zásobníku, který se podrobněji zabývá. To může způsobit závažné problémy s výkonem a je potřeba je vyřešit.

Specializované optimalizace

Komprese

Cassandra umožňuje výběr vhodného algoritmu komprese při vytvoření tabulky (viz Komprese) Výchozí hodnota je LZ4, což je vynikající pro propustnost a procesor, ale spotřebovává více místa na disku. Použití Zstd (Cassandra 4.0 a novější) šetří přibližně 12 % místa s minimální režií na procesor.

Optimalizace prostoru memtable haldy

Naše výchozí hodnota je použít 1/4 haldy JVM pro memtable_heap_space v cassandra.yaml. U aplikací orientovaných na zápis nebo na skladové položky s malou pamětí to může vést k častému vyprázdnění a fragmentování sstables, což proto vyžaduje větší komprimace. V takovýchpřípadechch

Další kroky

V tomto článku jsme stanovili některé osvědčené postupy pro optimální výkon. Teď můžete začít pracovat s clusterem: