Odzyskiwanie danych kontenera

W tym scenariuszu eksplorujemy odzyskiwanie danych. Uważamy, że dane są uszkodzone, gdy kontener osiągnie nieprawidłowy stan, w którym nie może przetworzyć dalszych akcji użytkownika. Wynik uszkodzonego stanu to nieoczekiwanie zamknięty kontener. Często jest to stan przejściowy, a po ponownym otwarciu kontener może zachowywać się zgodnie z oczekiwaniami. W sytuacji, gdy kontener nie może załadować nawet po wielu ponownych próbach, oferujemy interfejsy API i przepływy, których można użyć do odzyskania danych, jak opisano poniżej.

Jak zapisać stan Elastyczna struktura i usługi Azure Fluid Relay

Struktura płynów okresowo zapisuje stan nazywany podsumowaniem bez jawnej akcji tworzenia kopii zapasowej zainicjowanej przez użytkownika. Ten przepływ pracy występuje co jedną (1) minutę, jeśli nie ma aktywności użytkownika lub wcześniej, jeśli istnieje więcej niż 1000 oczekujących operacji. Każda oczekująca operacja w przybliżeniu przekłada się na akcję pojedynczego użytkownika (zaznacz, wprowadzanie tekstu itp.), która nie została jeszcze podsumowana.

Interfejsy API klienta platformy Azure

Dodaliśmy następujące metody do klasy AzureClient, która umożliwia deweloperom odzyskiwanie danych z uszkodzonych kontenerów.

getContainerVersions(ID, options)

getContainerVersions Umożliwia deweloperom wyświetlanie wcześniej wygenerowanych wersji kontenera.

copyContainer(ID, containerSchema)

copyContainer Umożliwia deweloperom generowanie nowego odłączonego kontenera od określonej wersji innego kontenera.

Przykładowy przepływ odzyskiwania


async function recoverDoc(
    client: AzureClient,
    orgContainerId: string,
    containerScema: ContainerSchema,
): Promise<string> {
    /* Collect doc versions */
    let versions: AzureContainerVersion[] = [];
    try {
        versions = await client.getContainerVersions(orgContainerId);
    } catch (e) {
        return Promise.reject(new Error("Unable to get container versions."));
    }

    for (const version of versions) {
        /* Versions are returned in chronological order.
        Attempt to copy doc from next available version */
        try {
            const { container: newContainer } = await client.copyContainer(
                orgContainerId,
                containerSchema,
                version,
            );
            return await newContainer.attach();
        } catch (e) {
            // Error. Keep going.
        }
    }

    return Promise.reject(new Error("Could not recreate document"));
}

Kluczowe obserwacje

Tworzymy nowy kontener

Nie odzyskujemy istniejącego kontenera (wycofywania). copyContainer da nam nowe wystąpienie, a dane są kopiowane z oryginalnego kontenera. W tym procesie stary kontener nie jest usuwany.

Nowy kontener jest odłączony

Nowy kontener jest początkowo w detached stanie. Możemy kontynuować pracę z odłączonym kontenerem lub natychmiast dołączyć. Po wywołaniu attach wywołania zostanie wyświetlony unikatowy identyfikator kontenera reprezentujący nowo utworzone wystąpienie.

Zagadnienia dotyczące odzyskiwania po odzyskiwaniu

Jeśli chodzi o tworzenie przypadków użycia w scenariuszach po odzyskiwaniu, poniżej przedstawiono kilka zagadnień dotyczących tego, co aplikacja może zrobić, aby wszyscy współpracownicy zdalni pracowali nad tym samym kontenerem ponownie.

Jeśli modelujesz dane aplikacji wyłącznie przy użyciu kontenerów płynnych, komunikacja "link" zostanie skutecznie przerwana po uszkodzeniu kontenera. Podobny rzeczywisty przykład może być połączeniem wideo, w którym oryginalny autor udostępnił link uczestnikom i że link już nie działa. Mając na uwadze tę perspektywę, jedną z opcji jest ograniczenie uprawnień odzyskiwania do oryginalnego autora i zezwolenie im na udostępnianie nowego linku kontenera w taki sam sposób, jak w przypadku udostępniania oryginalnego linku po odzyskaniu kopii oryginalnego kontenera.

Alternatywnie, jeśli używasz struktury płynów tylko dla danych przejściowych, zawsze możesz użyć własnych danych źródłowych prawdy i usług pomocniczych do zarządzania bardziej autonomicznymi przepływami pracy odzyskiwania. Na przykład wielu klientów może rozpocząć proces odzyskiwania do momentu, aż aplikacja ma pierwszą odzyskaną kopię. Następnie aplikacja może powiadomić wszystkich uczestniczących klientów o przejściu do nowego kontenera. Może to być przydatne, ponieważ każdy aktualnie aktywny klient może odblokować uczestniczącą grupę, aby kontynuować współpracę. Jedną z kwestii jest to, że koszty nadmiarowości są naliczane.