Share via


Ajánlott eljárások az optimális teljesítményhez

Az Apache Cassandra Azure Managed Instance egy teljesen felügyelt szolgáltatás tiszta nyílt forráskódú Apache Cassandra-fürtökhöz. A szolgáltatás lehetővé teszi a konfigurációk felül bírálását is az egyes számítási feladatok adott igényeitől függően, ami maximális rugalmasságot és szabályozást tesz lehetővé, ahol szükséges. Ez a cikk tippeket nyújt a teljesítmény optimalizálásához.

Optimális beállítás és konfigurálás

Replikációs tényező, lemezek száma, csomópontok és termékváltozatok száma

Mivel a legtöbb régióban három rendelkezésre állási zónát Azure-támogatás, és a Cassandra felügyelt példány a rendelkezésre állási zónákat állványokra képezi le, javasoljuk, hogy válasszon magas számosságú partíciókulcsot a gyakori elérésű partíciók elkerülése érdekében. A megbízhatóság és a hibatűrés legjobb szintje érdekében javasoljuk, hogy konfiguráljon egy 3-ás replikációs tényezőt. Azt is javasoljuk, hogy adja meg a replikációs tényező többszörösét a csomópontok számaként, például 3, 6, 9 stb.

RAID 0-t használunk a kiépített lemezek számához. Az optimális IOPS eléréséhez ellenőriznie kell a P30-lemez IOPS-jával együtt kiválasztott termékváltozat maximális IOPS-ját. Az SKU például Standard_DS14_v2 51 200 nem csatlakoztatott IOPS-t támogat, míg egyetlen P30-lemez alapteljesítménye 5000 IOPS. Tehát négy lemez 20 000 IOPS-t eredményezne, ami jóval a gép korlátai alatt van.

Határozottan javasoljuk, hogy a számítási feladat széles körű teljesítményértékelését a termékváltozat és a lemezek száma alapján mérje fel. A teljesítménymérés különösen fontos a mindössze nyolc maggal rendelkező termékváltozatok esetében. Kutatásunk azt mutatja, hogy nyolc magos processzor csak a legkevésbé igényes számítási feladatokhoz működik, és a legtöbb számítási feladatnak legalább 16 magra van szüksége a teljesítményhez.

Elemzési és tranzakciós számítási feladatok

A tranzakciós számítási feladatokhoz általában alacsony késésre optimalizált adatközpontra van szükség, míg az elemzési számítási feladatok gyakran összetettebb lekérdezéseket használnak, amelyek végrehajtása hosszabb időt vesz igénybe. A legtöbb esetben külön adatközpontokat szeretne:

  • Alacsony késésre optimalizált
  • Elemzési számítási feladatokhoz optimalizált

Elemzési számítási feladatok optimalizálása

Javasoljuk, hogy az ügyfelek az alábbi cassandra.yaml beállításokat alkalmazzák az elemzési számítási feladatokhoz (lásd itt az alkalmazás módját).

Időtúllépések

Érték Cassandra MI alapértelmezett Elemzési számítási feladatokra vonatkozó javaslat
read_request_timeout_in_ms    5,000   10,000
range_request_timeout_in_ms 10,000 20000
counter_write_request_timeout_in_ms  5,000 10,000.
cas_contention_timeout_in_ms 1,000 2000
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

Gyorsítótárak

Érték Cassandra MI alapértelmezett Elemzési számítási feladatokra vonatkozó javaslat
file_cache_size_in_mb 2,048 6,144

További javaslatok

Érték Cassandra MI alapértelmezett Elemzési számítási feladatokra vonatkozó javaslat
commitlog_total_space_in_mb 8,192 16,384
column_index_size_in_kb 64 16
compaction_throughput_mb_per_sec 128 256

Ügyfélbeállítások

Javasoljuk, hogy a Kiszolgálón alkalmazott időtúllépéseknek megfelelően növelje a Cassandra-ügyfélillesztők időtúllépéseit.

Optimalizálás az alacsony késésre

Az alapértelmezett beállítások már alkalmasak alacsony késésű számítási feladatokhoz. A késések legjobb teljesítményének biztosítása érdekében javasoljuk, hogy használjon olyan ügyfélillesztőt, amely támogatja a spekulatív végrehajtást , és ennek megfelelően konfigurálja az ügyfelet. A Java V4-illesztőhöz egy bemutatót talál, amely bemutatja, hogyan működik ez, és hogyan engedélyezheti a szabályzatot.

Teljesítmény-palackok nyakának monitorozása

CPU-teljesítmény

Mint minden adatbázisrendszer, a Cassandra is akkor működik a legjobban, ha a processzorhasználat 50% körül van, és soha nem éri el a 80%-ot. A CPU-metrikákat a Metrikák lapon tekintheti meg a Monitorozás lapon a portálról:

Screenshot of CPU metrics.

Ha a processzor a legtöbb csomópont esetében végleg meghaladja a 80%-ot, az adatbázis túlterhelté válik, ami több ügyfél-időtúllépés során jelentkezik. Ebben a forgatókönyvben a következő műveleteket javasoljuk:

  • vertikálisan skálázható fel egy több processzormaggal rendelkező termékváltozatra (különösen akkor, ha a magok csak 8 vagy annál kisebbek).
  • horizontális skálázás további csomópontok hozzáadásával (ahogy korábban említettük, a csomópontok számának a replikációs tényező többszörösének kell lennie).

Ha a cpu csak néhány csomópont esetében magas, de a többiek számára alacsony, akkor egy gyakori partíciót jelez, és további vizsgálatot igényel.

Feljegyzés

A termékváltozat módosítása az Azure Portalon, az Azure CLI-vel és az ARM-sablon üzembe helyezésével támogatott. Az ARM-sablont üzembe helyezheti/szerkesztheti, és lecserélheti az SKU-t az alábbiak egyikére.

  • 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

Vegye figyelembe, hogy jelenleg nem támogatjuk a termékváltozat-családok közötti váltást. Ha például jelenleg rendelkezik termékváltozattal Standard_DS13_v2 , és nagyobb termékváltozatra Standard_DS14_v2szeretne frissíteni, ez a lehetőség nem érhető el. Megnyithat azonban egy támogatási jegyet a magasabb termékváltozatra való frissítés igényléséhez.

Lemezteljesítmény

A szolgáltatás azure P30-beli felügyelt lemezeken fut, amelyek lehetővé teszik a "burst IOPS"-t. A lemezzel kapcsolatos teljesítmény szűk keresztmetszetei esetén gondos monitorozásra van szükség. Ebben az esetben fontos áttekinteni az IOPS-metrikákat:

Screenshot of disk I/O metrics.

Ha a metrikák az alábbi jellemzők egyikét vagy mindegyikét mutatják, az azt jelezheti, hogy fel kell skáláznia.

  • Következetesen magasabb vagy egyenlő az alap IOPS-nál (ne felejtse el szorozni az 5000 IOPS-t a csomópontonkénti lemezek számával a szám lekéréséhez).
  • Következetesen magasabb vagy egyenlő az írási termékváltozathoz engedélyezett maximális IOPS-értéknél.
  • Az SKU támogatja a gyorsítótárazott tárolást (írási gyorsítótárazás), és ez a szám kisebb, mint a felügyelt lemezek IOPS-ja (ez lesz az olvasási IOPS felső korlátja).

Ha csak néhány csomópont esetében látja az IOPS-emelt szintű IOPS-t, előfordulhat, hogy van egy gyakori partíciója, és át kell tekintenie az adatokat egy esetleges eltérés miatt.

Ha az IOPS alacsonyabb a választott termékváltozat által támogatottnál, de magasabb vagy egyenlő a lemez IOPS-jával, a következő műveleteket hajthatja végre:

  • Adjon hozzá további lemezeket a teljesítmény növelése érdekében. A lemezek számának növeléséhez támogatási esetet kell létrehozni.
  • Az adatközpont(ok) vertikális felskálázása további csomópontok hozzáadásával.

Ha az IOPS maximálisan támogatja az SKU-t, a következőket teheti:

  • skálázás egy másik termékváltozatra, amely több IOPS-t támogat.
  • Az adatközpont(ok) vertikális felskálázása további csomópontok hozzáadásával.

További információkért tekintse meg a virtuális gép és a lemez teljesítményét.

Hálózati teljesítmény

A legtöbb esetben a hálózati teljesítmény elegendő. Ha azonban gyakran streameli az adatokat (például gyakori horizontális felskálázás/leskálázás), vagy hatalmas bejövő/kimenő adatmozgások vannak, ez problémát okozhat. Előfordulhat, hogy ki kell értékelnie az SKU hálózati teljesítményét. Az SKU például Standard_DS14_v2 12 000 Mb/s-ot támogat, hasonlítsa össze ezt a metrikák bájt/ki értékével:

Screenshot of network metrics.

Ha csak néhány csomópont esetében látja emelt szintűnek a hálózatot, előfordulhat, hogy egy gyakori partícióval rendelkezik, és át kell tekintenie az adateloszlási és/vagy hozzáférési mintákat egy esetleges eltérés esetén.

  • Vertikálisan felskálázható egy másik termékváltozatra, amely több hálózati I/O-t támogat.
  • Horizontálisan skálázza fel a fürtöt további csomópontok hozzáadásával.

Túl sok csatlakoztatott ügyfél

Az üzembe helyezéseket úgy kell megtervezni és kiépíteni, hogy támogassák az alkalmazás kívánt késéséhez szükséges párhuzamos kérelmek maximális számát. Egy adott üzembe helyezés esetén a rendszernek a minimális küszöbérték feletti nagyobb terhelés növeli az általános késést. Figyelje meg a csatlakoztatott ügyfelek számát, hogy ez ne lépje túl az elviselhető korlátokat.

Screenshot of connected client metrics.

Lemezterület

A legtöbb esetben elegendő lemezterület áll rendelkezésre, mivel az alapértelmezett üzemelő példányok IOPS-ra vannak optimalizálva, ami a lemez alacsony kihasználtságát eredményezi. Mindazonáltal javasoljuk, hogy időnként tekintse át a lemezterület-metrikákat. A Cassandra sok lemezt halmoz fel, majd csökkenti azt a tömörítés aktiválásakor. Ezért fontos áttekinteni a lemezhasználatot hosszabb időszakokban, hogy trendeket állapítsunk meg – például a tömörítés nem tudja visszavenni a helyet.

Feljegyzés

A tömörítéshez rendelkezésre álló hely biztosítása érdekében a lemezkihasználtságot 50% körül kell tartani.

Ha csak néhány csomópont esetében látja ezt a viselkedést, előfordulhat, hogy egy gyakori partícióval rendelkezik, és át kell tekintenie az adateloszlási és/vagy hozzáférési mintákat egy esetleges eltérés esetén.

  • további lemezeket adhat hozzá, de tartsa szem előtt az SKU által előírt IOPS-korlátozásokat
  • a fürt horizontális felskálázása

JVM-memória

Az alapértelmezett képlet a virtuális gép memóriájának felét 31 GB-os felső korláttal rendeli a JVM-hez , ami a legtöbb esetben jó egyensúly a teljesítmény és a memória között. Egyes számítási feladatok, különösen azok, amelyek gyakori keresztpartíciós olvasással vagy tartományvizsgálattal rendelkeznek, memóriabeli nehézségekkel járhatnak.

A legtöbb esetben a Java szemétgyűjtő hatékonyan visszanyeri a memóriát, de különösen akkor, ha a processzor gyakran 80% felett van, nincs elegendő processzorciklus a szemétgyűjtőnek. Ezért a processzorteljesítmény-problémákat a memóriaproblémák előtt kell kezelni.

Ha a processzor 70% alatt van, és a szemétgyűjtés nem tudja visszanyerni a memóriát, több JVM-memóriára lehet szüksége. Ez különösen akkor fordul fenn, ha korlátozott memóriával rendelkező termékváltozatot használ. A legtöbb esetben át kell tekintenie a lekérdezéseket és az ügyfélbeállításokat, és csökkentenie fetch_size kell a CQL-lekérdezésben limit kiválasztottakkal együtt.

Ha valóban több memóriára van szüksége, a következőkre van szüksége:

  • Küldjön nekünk egy jegyet a JVM memóriabeállításainak növeléséhez
  • Vertikális skálázás több memóriával rendelkező termékváltozatra

Sírkövek

A javításokat hét naponta reaperrel futtatjuk, amely eltávolítja azokat a sorokat, amelyek TTL-értéke lejárt (az úgynevezett "tombstone"). Egyes számítási feladatok gyakrabban törölnek, és figyelmeztetéseket látnak, például Read 96 live rows and 5035 tombstone cells for query SELECT ...; token <token> (see tombstone_warn_threshold) a Cassandra-naplókban, vagy akár olyan hibákat, amelyek azt jelzik, hogy a lekérdezés nem teljesíthető a túlzott sírkövek miatt.

Rövid távú kockázatcsökkentés, ha a lekérdezések nem teljesülnek, a Cassandra konfigurációjának növelése tombstone_failure_threshold az alapértelmezett 100 000-ről egy magasabb értékre.

Ezen kívül javasoljuk, hogy tekintse át a TTL-t a kulcstéren, és akár naponta futtassa a javításokat, hogy több sírkövet töröljön. Ha a TCL-ek rövidek, például kevesebb mint két nap, és az adatfolyamok gyorsan törlődnek, javasoljuk, hogy tekintse át a tömörítési stratégiát , és részesítse előnyben Leveled Compaction Strategy. Bizonyos esetekben az ilyen műveletek arra utalhatnak, hogy szükség van az adatmodell felülvizsgálatára.

Batch-figyelmeztetések

Ez a figyelmeztetés a CassandraLogsban és az esetlegesen kapcsolódó hibákban jelenhet meg:

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

Ebben az esetben érdemes áttekinteni a lekérdezéseket, hogy a javasolt kötegméret alatt maradjon. Ritka esetekben és rövid távú kockázatcsökkentésként a Cassandra konfigurációja az alapértelmezett 50-ről magasabb értékre növelhetőbatch_size_fail_threshold_in_kb.  

Nagyméretű partíció figyelmeztetése

Ez a figyelmeztetés a CassandraLogsban jelenhet meg:

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

Ez problémát jelez az adatmodellben. Íme egy halom túlcsordulásról szóló cikk , amely részletesebben is bemutatja. Ez súlyos teljesítményproblémákat okozhat, és meg kell oldani.

Speciális optimalizálás

Tömörítés

A Cassandra lehetővé teszi a megfelelő tömörítési algoritmus kiválasztását egy tábla létrehozásakor (lásd : Tömörítés). Az alapértelmezett érték az LZ4, amely kiválóan alkalmas az átviteli sebességre és a CPU-ra, de több helyet foglal el a lemezen. A Zstd (Cassandra 4.0 és újabb verzió) használata körülbelül ~12%-os helyet takarít meg minimális processzorterheléssel.

A memtable halomterület optimalizálása

Alapértelmezés szerint a JVM halom 1/4-ét használjuk a cassandra.yaml memtable_heap_space . Írásorientált alkalmazások és/vagy kis memóriával rendelkező termékváltozatok esetén ez gyakori kipiruláshoz és töredezett sstable-khoz vezethet, ami nagyobb tömörítést igényel. Ilyen esetekben a növekedés legalább 4048-ra előnyös lehet, de gondos teljesítménymérést igényel annak érdekében, hogy más műveletek (például olvasások) ne legyenek hatással.

Következő lépések

Ebben a cikkben bemutattunk néhány ajánlott eljárást az optimális teljesítmény érdekében. Most már megkezdheti a fürttel való munkát: