Globális adatterjesztés az Azure Cosmos DB-vel – a motorháztető alatt

A KÖVETKEZŐKRE VONATKOZIK: Nosql MongoDB Cassandra Gremlin Táblázat

Az Azure Cosmos DB egy alapvető szolgáltatás az Azure-ban, ezért világszerte minden Azure-régióban üzembe helyezve, beleértve a nyilvános, a szuverén, a védelmi minisztériumot (DoD) és a kormányzati felhőket.

Magas szinten az Azure Cosmos DB-tárolóadatok horizontálisan particionálva lesznek számos replikakészletre, amelyek minden régióban replikálják az írásokat. A replikakészletek tartósan véglegesítik az írásokat a többségi kvórum használatával.

Minden régió tartalmazza az Azure Cosmos DB-tároló összes adatpartícióját, és olvasási és írási műveletet is képes kiszolgálni, ha a többrégiós írás engedélyezve van. Ha az Azure Cosmos DB-fiók az N Azure-régiók között van elosztva, az összes adat legalább N x 4 példányban jelenik meg.

Egy adatközpontban üzembe helyezzük és felügyeljük az Azure Cosmos DB-t nagy méretű, dedikált helyi tárterülettel rendelkező gépeken. Egy adatközponton belül az Azure Cosmos DB számos fürtön van üzembe helyezve, amelyek mindegyike több generációnyi hardvert futtat. A fürtön belüli gépek általában 10–20 tartalék tartományban vannak elosztva a régión belüli magas rendelkezésre állás érdekében. Az alábbi képen az Azure Cosmos DB globális terjesztési rendszer topológiája látható:

Rendszertopológia

Az Azure Cosmos DB globális terjesztése kulcsrakész: Bármikor, néhány kattintással vagy egyetlen API-hívással programozott módon hozzáadhatja vagy eltávolíthatja az Azure Cosmos DB-adatbázishoz társított földrajzi régiókat. Az Azure Cosmos DB-adatbázisok viszont Azure Cosmos DB-tárolók készletéből állnak. Az Azure Cosmos DB-ben a tárolók a terjesztés és a méretezhetőség logikai egységei. A létrehozott gyűjtemények, táblák és grafikonok (belsőleg) csak Azure Cosmos DB-tárolók. A tárolók teljesen sémafüggetlenek, és hatókört biztosítanak egy lekérdezéshez. Az Azure Cosmos DB-tárolóban lévő adatok a betöltéskor automatikusan indexelve lesznek. Az automatikus indexelés lehetővé teszi, hogy a felhasználók séma- vagy indexkezelés nélkül kérdezik le az adatokat, különösen globálisan elosztott beállítás esetén.

  • Egy adott régióban a tárolón belüli adatok egy partíciókulcs használatával lesznek elosztva, amelyet ön biztosít, és az alapul szolgáló fizikai partíciók (helyi disztribúció) transzparens módon kezelik.

  • A rendszer minden fizikai partíciót replikál a földrajzi régiók (globális elosztás) között is.

Ha egy Azure Cosmos DB-t használó alkalmazás rugalmasan skálázza az átviteli sebességet egy Azure Cosmos DB-tárolón, vagy több tárterületet használ fel, az Azure Cosmos DB transzparensen kezeli a partíciókezelési műveleteket (felosztás, klónozás, törlés) az összes régióban. A skálázástól, elosztástól és hibáktól függetlenül az Azure Cosmos DB továbbra is egyetlen rendszerképet biztosít a tárolókon belüli adatokról, amelyek globálisan el vannak osztva tetszőleges számú régióban.

Ahogy az alábbi képen látható, a tárolón belüli adatok két dimenzióban oszlanak meg – egy régión belül és régiók között, világszerte:

fizikai partíciók

A fizikai partíciókat replikák egy csoportja, más néven replikakészlet implementálja. Minden gép több száz replikát üzemeltet, amelyek a rögzített folyamatok különböző fizikai partícióinak felelnek meg, ahogy a fenti képen látható. A fizikai partícióknak megfelelő replikák dinamikusan kerülnek elhelyezésre és terheléselosztásra a fürtben és az adatközpontokban lévő gépek között egy régión belül.

A replika egyedileg egy Azure Cosmos DB-bérlőhöz tartozik. Minden replika az Azure Cosmos DB adatbázismotorjának egy példányát üzemelteti, amely kezeli az erőforrásokat és a kapcsolódó indexeket. Az Azure Cosmos DB adatbázismotor atom-rekordütemezési (ARS) típusú rendszeren működik. A motor a séma fogalmához agnosztikus, elmosva a rekordok szerkezetének és példányértékeinek határát. Az Azure Cosmos DB teljes sémaelemzést tesz lehetővé azáltal, hogy a betöltéskor mindent automatikusan indexel, így a felhasználók anélkül kérdezhetik le globálisan elosztott adataikat, hogy sémával vagy indexkezeléssel kellene foglalkozniuk.

Az Azure Cosmos DB-adatbázismotor olyan összetevőkből áll, mint a koordinációs primitívek, a nyelvi futtatókörnyezetek, a lekérdezésfeldolgozó, valamint az adatok tranzakciós tárolásáért és indexeléséért felelős tárolási és indexelő alrendszerek implementálása. A tartósság és a magas rendelkezésre állás biztosítása érdekében az adatbázismotor megőrzi az adatokat és az indexet az SSD-ken, és replikálja azokat a replikakészlet(ek) adatbázismotor-példányai között. A nagyobb bérlők nagyobb átviteli sebességnek és tárterületnek felelnek meg, és nagyobb vagy több replikával rendelkeznek, vagy mindkettőt. A rendszer minden összetevője teljesen aszinkron – egyetlen szál sem blokkolja, és minden szál rövid élettartamú munkát végez anélkül, hogy szükségtelen szálkapcsolókat okozna. A sebességkorlátozás és a visszanyomás a teljes veremre kiterjed a belépés-vezérléstől az összes I/O-útvonalig. Az Azure Cosmos DB adatbázismotor úgy lett kialakítva, hogy kihasználja a finom szemcsés egyidejűséget, és magas átviteli sebességet biztosítson, miközben takarékos mennyiségű rendszererőforráson belül működik.

Az Azure Cosmos DB globális disztribúciója két fő absztrakcióra épül: replikakészletekre és partíciókészletekre. A replikakészlet egy moduláris Lego-blokk a koordinációhoz, a partíciókészlet pedig egy vagy több földrajzilag elosztott fizikai partíció dinamikus átfedése. A globális terjesztés működésének megértéséhez meg kell értenünk ezt a két fő absztrakciót.

Replikakészletek

A fizikai partíciók egy ön által felügyelt és dinamikusan elosztott replikacsoportként vannak létrehozva, amely több tartalék tartományra, úgynevezett replikakészletre terjed ki. Ez a készlet együttesen implementálja a replikált állapotgép-protokollt, hogy a fizikai partíción belüli adatok magas rendelkezésre állásúak, tartósak és konzisztensek legyenek. A replikakészlet N tagsága dinamikus – folyamatosan ingadozik az NMin és az NMax között a hibák, a felügyeleti műveletek és a sikertelen replikák újragenerálásának/helyreállításának ideje alapján. A tagság változásai alapján a replikációs protokoll újrakonfigurálja az olvasási és írási kvórumok méretét is. Az adott fizikai partícióhoz rendelt átviteli sebesség egységes elosztásához két ötletet alkalmazunk:

  • Először is, a vezetőre vonatkozó írási kérelmek feldolgozásának költsége magasabb, mint a frissítések követőn való alkalmazásának költsége. Ennek megfelelően a vezető több rendszererőforrást tervezett, mint a követők.

  • Másodszor, amennyire lehetséges, az adott konzisztenciaszint olvasási kvóruma kizárólag a követő replikákból áll. Ha szükséges, nem fordulunk a vezetőhöz olvasási célokra. Az Azure Cosmos DB által támogatott öt konzisztenciamodellhez számos ötletet alkalmazunk a kvórumalapú rendszerekben a terhelés és a kapacitás kapcsolatával kapcsolatban végzett kutatásból.

Partíciókészletek

A fizikai partíciók egy csoportja, amelyek mindegyike az Azure Cosmos DB adatbázisrégióival van konfigurálva, az összes konfigurált régióban replikált kulcsok ugyanazon készletének kezelésére van összeállítva. Ezt a magasabb szintű koordinációs primitívet partíciókészletnek nevezik , amely egy adott kulcskészletet kezelő fizikai partíciók földrajzilag elosztott dinamikus átfedése. Bár egy adott fizikai partíció (replikakészlet) hatóköre egy fürtön belül van, a partíciókészletek a fürtökre, adatközpontokra és földrajzi régiókra is kiterjedhetnek az alábbi képen látható módon:

Partíciókészletek

A partíciókészletek földrajzilag elosztott "szuperreplikakészletként" is felfoghatók, amelyek több olyan replikakészletből állnak, amelyek ugyanazt a kulcskészletet birtokolják. A replikakészlethez hasonlóan a partíciókészletek tagsága is dinamikus – implicit fizikai partíciókezelési műveletek alapján ingadozik, hogy új partíciókat vegyen fel/távolítson el egy adott partíciókészletbe vagy abból (például amikor egy tárolón horizontálisan növeli az átviteli sebességet, hozzáad/eltávolít egy régiót az Azure Cosmos DB-adatbázishoz, vagy ha hibák történnek). Mivel minden partíció (partíciókészlet) kezeli a partíciókészlet-tagságot a saját replikakészletén belül, a tagság teljesen decentralizált és magas rendelkezésre állású. A partíciókészletek újrakonfigurálása során a fizikai partíciók közötti átfedés topológiája is létrejön. A topológia dinamikusan van kiválasztva a forrás és a cél fizikai partíciók közötti konzisztenciaszint, földrajzi távolság és rendelkezésre álló hálózati sávszélesség alapján.

A szolgáltatás lehetővé teszi az Azure Cosmos DB-adatbázisok konfigurálását egyetlen vagy több írási régióval, és a választástól függően a partíciókészletek úgy vannak konfigurálva, hogy pontosan egy vagy minden régióban fogadjanak el írásokat. A rendszer kétszintű, beágyazott konszenzusprotokollt alkalmaz – az egyik szint az írásokat elfogadó fizikai partíció replikáin belül működik, a másik pedig egy partíciókészlet szintjén, hogy teljes rendezési garanciát nyújtson a partíciókészleten belüli összes lekötött írásra. Ez a többrétegű, beágyazott konszenzus kritikus fontosságú a szigorú SLA-k magas rendelkezésre állása és az Azure Cosmos DB által az ügyfelek számára kínált konzisztenciamodellek megvalósítása szempontjából.

Ütközések feloldása

A frissítés propagálásának, a ütközések feloldásának és az okozatiság nyomon követésének tervezése a járványos algoritmusokkal és a Bayou-rendszerrel kapcsolatos korábbi munkából származik. Bár az ötletek kernelei túlélték, és kényelmes referenciakeretet biztosítanak az Azure Cosmos DB rendszertervének kommunikálásához, jelentős átalakításon estek át, amikor az Azure Cosmos DB-rendszerre alkalmaztuk őket. Erre azért volt szükség, mert az előző rendszereket nem az erőforrás-irányítással, sem az Azure Cosmos DB működéséhez szükséges léptékkel tervezték, sem a képességek (például a korlátozott elavultság konzisztenciája) és az Azure Cosmos DB által az ügyfeleknek nyújtott szigorú és átfogó SLA-k biztosítása érdekében.

Ne feledje, hogy egy partíciókészlet több régióban van elosztva, és az Azure Cosmos DB s (többrégiós írási) replikációs protokollt követi az adatok replikálásához az adott partíciókészletet tartalmazó fizikai partíciók között. Minden fizikai partíció (partíciókészlethez) írásokat fogad, és általában az adott régióban helyi ügyfeleknek szolgáltat olvasásokat. A régión belüli fizikai partíciók által elfogadott írások tartósan véglegesítve vannak, és magas rendelkezésre állásúvá válnak a fizikai partíción belül, mielőtt az ügyfél elismerené őket. Ezek feltételes írások, és a partíciókészlet más fizikai partícióira is propagálásra kerülnek egy anti-entrópia csatornával. Az ügyfelek feltételes vagy véglegesített írást kérhetnek egy kérelem fejlécének átadásával. Az anti-entrópia propagálása (beleértve a propagálás gyakoriságát) dinamikus, a partíciókészlet topológiája, a fizikai partíciók regionális közelsége és a konzisztenciaszint alapján konfigurálva. Egy partíciókészleten belül az Azure Cosmos DB egy elsődleges véglegesítési sémát követ egy dinamikusan kiválasztott arbiter partícióval. Az arbiter kiválasztása dinamikus, és szerves része a partíciókészlet újrakonfigurálásának az átfedés topológiája alapján. A véglegesített írások (beleértve a többsoros/kötegelt frissítéseket) garantáltan megrendelhetők.

Kódolt vektorórákat alkalmazunk (amelyek régióazonosítót és logikai órákat tartalmaznak, amelyek megfelelnek a replikakészlet és a partíciókészlet konszenzusszintjeinek) az ok-okozati nyomon követéshez és a verzióvektorokhoz a frissítési ütközések észleléséhez és megoldásához. A topológia és a társkijelölési algoritmus úgy lett kialakítva, hogy biztosítsa a rögzített és minimális tárhelyet, valamint a verzióvektorok minimális hálózati terhelését. Az algoritmus garantálja a szigorú konvergenciatulajdonságot.

A több írási régióval konfigurált Azure Cosmos DB-adatbázisok esetében a rendszer számos rugalmas automatikus ütközésfeloldási szabályzatot kínál a fejlesztők számára, amelyek közül választhatnak, például:

  • Last-Write-Wins (LWW), amely alapértelmezés szerint egy rendszer által definiált időbélyeg-tulajdonságot használ (amely az időszinkronizálási óraprotokollon alapul). Az Azure Cosmos DB lehetővé teszi az ütközések feloldásához használandó egyéb egyéni numerikus tulajdonságok megadását is.
  • Alkalmazás által definiált (egyéni) ütközésfeloldási szabályzat (egyesítési eljárásokkal kifejezve), amely az ütközések alkalmazás által definiált szemantikájának egyeztetésére lett kialakítva. Ezek az eljárások akkor lesznek meghívva, ha észlelik az írási-írási ütközéseket egy adatbázis-tranzakció égisze alatt a kiszolgáló oldalán. A rendszer pontosan egyszer biztosít garanciát az egyesítési eljárás végrehajtására a kötelezettségvállalási protokoll részeként. Számos ütközésfeloldási minta érhető el, amellyel játszhat.

Konzisztenciamodellek

Akár egyetlen vagy több írási régióval konfigurálja az Azure Cosmos DB-adatbázist, az öt jól definiált konzisztenciamodell közül választhat. Több írási régió esetén a konzisztenciaszintek néhány fontos aspektusa a következő:

A korlátozott elavultsági konzisztencia garantálja, hogy az összes olvasás k előtagon vagy T másodpercen belül lesz a legújabb írástól bármelyik régióban. Emellett a kötött állagú olvasási konzisztencia garantáltan monoton és konzisztens előtag-garanciával is jár. Az anti-entrópia protokoll sebességkorlátozott módon működik, és biztosítja, hogy az előtagok ne halmozódjanak fel, és a visszanyomást az írásokon ne kelljen alkalmazni. A munkamenet-konzisztencia garantálja a monoton olvasást, a monoton írást, a saját írások olvasását, az írás az olvasást és a konzisztens előtag-garanciákat világszerte. Az erős konzisztenciával konfigurált adatbázisok esetében a régiók közötti szinkron replikáció miatt a több írási régió előnyei (alacsony írási késés, magas írási rendelkezésre állás) nem érvényesek.

Az Azure Cosmos DB öt konzisztenciamodelljének szemantikáját itt ismertetjük, és matematikailag egy magas szintű TLA+ specifikációt használunk itt.

Következő lépések

A következő cikkekkel megtudhatja, hogyan konfigurálhatja a globális disztribúciót: