Megosztás a következőn keresztül:


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.targetThroughputadhatja 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 enabledbe: . 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.