Azure Cosmos DB Spark-összekötő: Átviteli sebesség vezérlése
A KÖVETKEZŐRE VONATKOZIK: NoSQL
A Spark-összekötő lehetővé teszi az Azure Cosmos DB-vel való kommunikációt az Apache Spark használatával. Ez a cikk az átviteli sebesség vezérlési funkció működését ismerteti. Tekintse meg Spark-mintáinkat a GitHubon az átviteli sebesség vezérlésének első lépéseihez.
Ez a cikk az Azure Cosmos DB Spark-összekötő globális átviteli sebesség-vezérlési csoportjainak használatát ismerteti, de a funkció a Java SDK-ban is elérhető. Az SDK-ban globális és helyi átviteli sebesség-vezérlési csoportokkal korlátozhatja a kérelemegységek (RU) használatát egyetlen ügyfélkapcsolati példány kontextusában. Ezt a megközelítést alkalmazhatja például egy mikroszolgáltatás különböző műveleteire, vagy akár egyetlen adatbetöltő programra is. További információkért tekintse meg, hogyan használhatja az átviteli sebesség vezérlését a Java SDK-ban.
Figyelmeztetés
Átjáró mód esetén az átviteli sebesség szabályozása nem támogatott. A kiszolgáló nélküli Azure Cosmos DB-fiókok esetében jelenleg egy százalékérték meghatározására targetThroughputThreshold
tett kísérlet sikertelenséget eredményez. A cél átviteli sebességének/RU-jának abszolút értékét csak a használatával spark.cosmos.throughputControl.targetThroughput
adhatja meg.
Miért fontos az átviteli sebesség szabályozása?
Az átviteli sebesség szabályozása segít elkülöníteni a tárolón futó alkalmazások teljesítményigényét. Az átviteli sebesség szabályozása korlátozza az adott Spark-ügyfél által használható kérelemegységek mennyiségét.
Az ügyféloldali átviteli sebesség szabályozása számos speciális forgatókönyvben előnyös:
- A különböző műveletek és feladatok eltérő prioritásokkal rendelkeznek: Előfordulhat, hogy az adatbetöltési vagy másolási tevékenységek miatt meg kell akadályozni a normál tranzakciók szabályozását. Egyes műveletek vagy tevékenységek nem érzékenyek a késésre, és toleránsabbak a szabályozásra, mint mások.
- Méltányosságot/elkülönítést biztosít a különböző felhasználók vagy bérlők számára: Egy alkalmazás általában sok felhasználóval rendelkezik. Előfordulhat, hogy egyes felhasználók túl sok kérést küldenek, amelyek az összes rendelkezésre álló átviteli sebességet felhasználják, és mások szabályozását okozzák.
- Az átviteli sebesség terheléselosztása a különböző Azure Cosmos DB-ügyfelek között: Bizonyos használati esetekben fontos, hogy az összes ügyfél méltányos (egyenlő) arányban kapja meg az átviteli sebességet.
Az átviteli sebesség szabályozása lehetővé teszi, hogy igény szerint részletesebb szintű RU-sebességkorlátozást biztosítsunk.
Hogyan működik az átviteli sebesség szabályozása?
A Spark-összekötő átviteli sebesség-vezérlésének konfigurálásához először létre kell hoznia egy tárolót, amely meghatározza az átviteli sebesség vezérlésének metaadatait. A partíciókulcs engedélyezve van groupId
és ttl
engedélyezve van. Ezt a tárolót a Spark SQL használatával hozza létre, és hívja meg:ThroughputControl
%sql
CREATE TABLE IF NOT EXISTS cosmosCatalog.`database-v4`.ThroughputControl
USING cosmos.oltp
OPTIONS(spark.cosmos.database = 'database-v4')
TBLPROPERTIES(partitionKeyPath = '/groupId', autoScaleMaxThroughput = '4000', indexingPolicy = 'AllProperties', defaultTtlInSeconds = '-1');
Az előző példa létrehoz egy automatikus skálázású tárolót. Ha a standard kiépítést részesíti előnyben, lecserélheti a kifejezésre autoScaleMaxThroughput
manualThroughput
.
Fontos
A partíciókulcsot úgy kell definiálni, és /groupId
ttl
engedélyezni kell, hogy az átviteli sebesség-vezérlési funkció működjön.
Egy adott alkalmazás Spark-konfigurációja során megadhatja a számítási feladat paramétereit. Az alábbi példa az átviteli sebesség vezérlését a következőképpen állítja enabled
be: . A példa egy átviteli sebesség-vezérlési csoport name
paraméterét és egy paramétert targetThroughputThreshold
határoz meg. Megadhatja az database
container
átviteli sebesség-vezérlési csoport fenntartásának paramétereit is:
"spark.cosmos.throughputControl.enabled" -> "true",
"spark.cosmos.throughputControl.name" -> "SourceContainerThroughputControl",
"spark.cosmos.throughputControl.targetThroughputThreshold" -> "0.95",
"spark.cosmos.throughputControl.globalControl.database" -> "database-v4",
"spark.cosmos.throughputControl.globalControl.container" -> "ThroughputControl"
Az előző példában a targetThroughputThreshold
paraméter 0,95-ként van definiálva. A sebességkorlátozás akkor történik (és a kérések újrapróbálkozásra kerülnek), ha az ügyfelek a tárolóhoz rendelt átviteli sebesség több mint 95 százalékát (+/- 5-10 százalékát) fogyasztják. Ez a konfiguráció dokumentumként van tárolva az átviteli sebesség tárolójában, amely a következő példához hasonlóan néz ki:
{
"id": "ZGF0YWJhc2UtdjQvY3VzdG9tZXIvU291cmNlQ29udGFpbmVyVGhyb3VnaHB1dENvbnRyb2w.info",
"groupId": "database-v4/customer/SourceContainerThroughputControl.config",
"targetThroughput": "",
"targetThroughputThreshold": "0.95",
"isDefault": true,
"_rid": "EHcYAPolTiABAAAAAAAAAA==",
"_self": "dbs/EHcYAA==/colls/EHcYAPolTiA=/docs/EHcYAPolTiABAAAAAAAAAA==/",
"_etag": "\"2101ea83-0000-1100-0000-627503dd0000\"",
"_attachments": "attachments/",
"_ts": 1651835869
}
Az átviteli sebesség szabályozása nem hajtja végre az egyes műveletek ru-előszámítását. Ehelyett a válaszfejléc alapján nyomon követi a művelet utáni ru-használatokat. Így az átviteli sebesség szabályozása egy közelítésen alapul, és nem garantálja , hogy a csoport számára bármikor elérhető az átviteli sebesség.
Ezért ha a konfigurált ru olyan alacsony, hogy egyetlen művelet is használhatja az összeset, az átviteli sebesség szabályozása nem tudja elkerülni, hogy a ru túllépje a konfigurált korlátot. Az átviteli sebesség szabályozása akkor működik a legjobban, ha a konfigurált korlát nagyobb, mint bármely olyan művelet, amelyet az adott vezérlőcsoport ügyfélprogramja végrehajthat.
Amikor lekérdezéssel vagy változáscsatornával olvas, az oldalméretet spark.cosmos.read.maxItemCount
(alapértelmezett 1000) szerény mennyiségre kell konfigurálnia. Ily módon az ügyfél átviteli sebességének szabályozása magasabb gyakorisággal újraszámítható, és pontosabban tükrözhető bármely adott időpontban. Ha tömegesen használ átviteli sebesség-vezérlést egy írási feladathoz, a rendszer automatikusan beállítja az egyetlen kérelemben végrehajtott dokumentumok számát a szabályozási sebesség alapján, hogy az átviteli sebesség vezérlőelem a lehető leghamarabb elindulhasson.
Figyelmeztetés
A targetThroughputThreshold
paraméter nem módosítható. Ha módosítja a cél átviteli sebesség küszöbértékét, létrejön egy új átviteli sebesség-vezérlési csoport. (Ha a 4.10.0-s vagy újabb verziót használja, az ugyanazzal a névvel rendelkezhet.) A csoportot használó összes Spark-feladatot újra kell indítania, ha biztosítani szeretné, hogy az összes felhasználó azonnal felhasználja az új küszöbértéket. Ellenkező esetben a következő újraindítás után felveszik az új küszöbértéket.
Az átviteli sebesség-vezérlési csoportot használó összes Spark-ügyfélhez létrejön egy rekord a ThroughputControl
tárolóban néhány másodperccel ttl
. Ennek eredményeképpen a dokumentumok gyorsan eltűnnek, ha egy Spark-ügyfél már nem fut aktívan. Példa:
{
"id": "Zhjdieidjojdook3osk3okso3ksp3ospojsp92939j3299p3oj93pjp93jsps939pkp9ks39kp9339skp",
"groupId": "database-v4/customer/SourceContainerThroughputControl.config",
"_etag": "\"1782728-w98999w-ww9998w9-99990000\"",
"ttl": 10,
"initializeTime": "2022-06-26T02:24:40.054Z",
"loadFactor": 0.97636377638898,
"allocatedThroughput": 484.89444487847,
"_rid": "EHcYAPolTiABAAAAAAAAAA==",
"_self": "dbs/EHcYAA==/colls/EHcYAPolTiA=/docs/EHcYAPolTiABAAAAAAAAAA==/",
"_etag": "\"2101ea83-0000-1100-0000-627503dd0000\"",
"_attachments": "attachments/",
"_ts": 1651835869
}
Az attribútum minden ügyfélrekordban loadFactor
az adott ügyfél terhelését jelöli az átviteli sebesség-vezérlési csoport többi ügyféléhez képest. Az allocatedThroughput
attribútum azt mutatja, hogy jelenleg hány kérelemegység van lefoglalva ehhez az ügyfélhez. A Spark-összekötő a terhelése alapján módosítja az egyes ügyfelek lefoglalt átviteli sebességét. Ily módon minden ügyfél megkapja az elérhető átviteli sebesség azon részét, amely arányos a terhelésével. Az összes ügyfél együttesen nem használ fel többet, mint az ahhoz az átviteli sebesség-vezérlési csoporthoz lefoglalt összeg, amelyhez tartoznak.
Kapcsolódó tartalom
- Tekintse meg a Spark-mintákat a GitHubon.
- Megtudhatja, hogyan kezelheti az adatokat a NoSQL-hez készült Azure Cosmos DB Spark 3 OLTP-összekötővel.
- További tudnivalók az Apache Sparkról.
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: