Tárolóadatok helyreállítása
Ebben a forgatókönyvben az adat-helyreállítást vizsgáljuk meg. Úgy gondoljuk, hogy az adatok sérültek, amikor a tároló érvénytelen állapotba kerül, ahol nem tudja feldolgozni a további felhasználói műveleteket. A sérült állapot eredménye, hogy a tároló váratlanul bezárul. Gyakran átmeneti állapotról van szó, és újranyitáskor a tároló a várt módon viselkedhet. Abban az esetben, ha egy tároló több újrapróbálkozás után sem töltődik be, api-kat és folyamatokat kínálunk az adatok helyreállításához az alábbiak szerint.
A Dinamikus keretrendszer és az Azure Fluid Relay mentési állapota
Dinamikus keretrendszer rendszeres időközönként menti a tárolóban lévő adatok pillanatképeit, amelyek összegzik az adatok ezen pontig végrehajtott módosításait. A normál betöltés során a rendszer lekéri a legújabb pillanatképet, és az azt követő módosításokat az adott állapotra alkalmazza.
Ha a legújabb pillanatkép vagy az azt követő módosítások sérültek, előfordulhat, hogy a Fluid nem tudja megfelelően betölteni őket. Ebben az esetben a Fluid API-k gyűjteményét kínálja a tárolt pillanatkép-verziók megtekintéséhez, és csak megtekintési módban tölti be őket, további módosítások nélkül. Ez lehetővé teszi az adatok kinyerését és opcionálisan egy új tárolóba való beszúrését az együttműködés folytatásához.
Azure-ügyfél API-k
API-k tárolóverziók megtekintéséhez és betöltéséhez
Az AzureClient a következő módszerekkel támogatja ezt a forgatókönyvet:
Tárolóverziók lekérése
getContainerVersions(id, options?)
Kérje le az elérhető verziók listáját, amelyekből betölthető.
Parameters:
id
: A tároló azonosítója. Ez ugyanaz az azonosító, amelyet a híváskorgetContainer
használnak.options?
: Opcionálisan megadható beállításobjektum:maxCount
: A lekérendő verziók maximális száma. Ha a kértnél több verzió érhető el, a rendszer lekéri a legújabb verziókat. Alapértelmezett: 5
Returns:
Ígéret, amely az elérhető verziókat (legújabbtól a legrégebbiig rendezve) képviselő objektumtömböt oldja fel. Az objektumok a következő tulajdonságokkal rendelkeznek:
id
: A verzióazonosító.- Megjegyzés: Ez eltér a tárolóazonosítótól, és a tároló helyett egy pillanatkép-verzióra hivatkozik.
date
: Az időbélyeg a verzió létrehozásakor.
Tárolóverzió megtekintése
viewContainerVersion(id, containerSchema, version, compatibilityMode)
Töltse be a tároló egy adott verzióját csak megtekintésre. Bármely lekért getContainerVersions
verzió használható, de a sérült adatok helyreállítása céljából ajánlott a legújabb verzióval kezdeni, és visszafelé dolgozni a legutóbbi javítás nélküli verzió megkereséséhez.
A tároló szüneteltetett állapotban van betöltve, ami azt jelenti, hogy nem alkalmazza a pillanatkép létrehozása után történt adatok későbbi módosításait. Ebben az állapotban a tárolóadatok olvashatók, de nem szerkeszthetők.
Parameters:
id
: A tároló azonosítója. Ez ugyanaz az azonosító, amelyet a híváskorgetContainer
használnak.containerSchema
: A tárolóséma. Ez ugyanaz a séma, amelyet híváskorgetContainer
használnak.version
: A verzióobjektum hivatkozik a betöltendő verzióra. A verzióobjektum lekérhető a következőn keresztülgetContainerVersions
: .compatibilityMode
: A kompatibilitási mód. Ez ugyanaz a kompatibilitási mód, amelyet híváskorgetContainer
használnak.
Returns:
Ígéret, amely egyetlen tulajdonsággal oldja fel a betöltött tárolót képviselő objektumot:
container
: A tárolóobjektum. Ez ugyanaz az objektumtípus, mint a tárolóobjektum általgetContainer
visszaadott objektum, de a rendszer a kijelölt verzióból szünetelteti a korábbi állapotában.
Példa
const azureClient = new AzureClient(/* ... */);
const versions = await azureClient.getContainerVersions(id);
// Since the versions are sorted in order from newest to oldest, versions[0] will attempt to load the most recent version.
// If the most recent version is corrupted, we could try again with versions[1] and so on to find the most-recent uncorrupted version.
const { container } = await azureClient.viewContainerVersion(id, containerSchema, versions[0], "2");
// We can now start reading the data from the container.
const someData = container.initialObjects.someSharedMap.get("hello");
// With the data extracted, we can inject it into a new uncorrupted container and attach it to start collaborating again.
const { container: newContainer } = await azureClient.createContainer(containerSchema, "2");
newContainer.initialObjects.someSharedMap.set("hello", someData);
const newId = await newContainer.attach();
Főbb megfigyelések
Új tárolót hozunk létre
A meglévő tároló helyreállítása (visszagördülése) nem. copyContainer
új példányt ad nekünk, és az adatok az eredeti tárolóból lesznek átmásolva. Ebben a folyamatban a régi tároló nem törlődik.
Az új tároló leválasztva
Az új tároló kezdetben állapotban detached
van. Folytathatjuk a munkát a leválasztott tárolóval, vagy azonnal csatolhatjuk. A hívás attach
után visszakapjuk az újonnan létrehozott példányt képviselő egyedi tárolóazonosítót.
A helyreállítás utáni szempontok
Ha használati eseteket szeretne létrehozni a helyreállítás utáni forgatókönyvek köré, az alábbiakban néhány szempontot figyelembe kell vennie azzal kapcsolatban, hogy az alkalmazás mit szeretne tenni annak érdekében, hogy a távoli közreműködők ismét ugyanazon a tárolón dolgozzanak.
Ha az alkalmazásadatokat kizárólag folyadéktárolók használatával modellezi, a "hivatkozás" kommunikációja gyakorlatilag megszakad a tároló sérülése esetén. Hasonló valós példa lehet a videohívás, ahol az eredeti szerző megosztotta a hivatkozást a résztvevőkkel, és ez a hivatkozás már nem működik. Ezt a perspektívát szem előtt tartva az egyik lehetőség az, hogy a helyreállítási engedélyeket az eredeti szerzőre korlátozza, és lehetővé teszi számukra az új tárolóhivatkozás megosztását ugyanúgy, mint az eredeti hivatkozást, miután helyreállította az eredeti tároló másolatát.
Alternatív megoldásként, ha csak átmeneti adatokhoz használ folyékony keretrendszert, akkor mindig használhatja a saját forrásadatait és a támogató szolgáltatásokat az autonómabb helyreállítási munkafolyamatok kezeléséhez. Előfordulhat például, hogy több ügyfél is elindítja a helyreállítási folyamatot, amíg az alkalmazás nem rendelkezik az első helyreállított másolatsal. Az alkalmazás ezután értesítheti az összes résztvevő ügyfelet egy új tárolóra való áttérésről. Ez hasznos lehet, mivel bármely jelenleg aktív ügyfél feloldhatja a részt vevő csoport letiltását az együttműködés folytatásához. Itt az egyik szempont a redundancia felmerülő költségei.