Share via


Kapsayıcı verilerini kurtarma

Bu senaryoda veri kurtarmayı keşfedeceğiz. Kapsayıcı, başka kullanıcı eylemlerini işleyemedi geçersiz bir duruma ulaştığında verilerin bozuk olduğunu düşünüyoruz. Bozuk durumun sonucu, kapsayıcının beklenmedik bir şekilde kapatılmasıdır. Genellikle geçici durumdur ve yeniden açıldıktan sonra kapsayıcı beklendiği gibi davranabilir. Birden çok yeniden denemeden sonra bile kapsayıcının yüklenemediği durumlarda, aşağıda açıklandığı gibi verilerinizi kurtarmak için kullanabileceğiniz API'ler ve akışlar sunuyoruz.

Akıcı Çerçeve ve Azure Akıcı Geçiş tasarruf durumu

Akıcı çerçeve, kullanıcı tarafından başlatılan herhangi bir açık yedekleme eylemi olmadan, özet olarak adlandırılan durumu düzenli aralıklarla kaydeder. Bu iş akışı, kullanıcı etkinliği yoksa her bir (1) dakikada bir veya bekleyen 1000'den fazla işlem varsa daha erken gerçekleşir. Bekleyen her işlem kabaca henüz özetlenmemiş tek bir kullanıcı eylemine (seçme, metin girişi vb.) çevrilir.

Azure istemci API'leri

AzureClient'a geliştiricilerin bozuk kapsayıcılardan veri kurtarmasını sağlayan aşağıdaki yöntemleri ekledik.

getContainerVersions(ID, options)

getContainerVersions geliştiricilerin kapsayıcının önceden oluşturulmuş sürümlerini görüntülemesine olanak tanır.

copyContainer(ID, containerSchema)

copyContainer geliştiricilerin başka bir kapsayıcının belirli bir sürümünden yeni bir ayrılmış kapsayıcı oluşturmasına olanak tanır.

Örnek kurtarma akışı


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"));
}

Önemli gözlemler

Yeni bir Kapsayıcı oluşturuyoruz

Mevcut kapsayıcıyı kurtarmıyoruz (geri alınıyor). copyContainer bize özgün kapsayıcıdan veri kopyalanan yeni bir örnek verir. Bu işlemde eski kapsayıcı silinmez.

Yeni Kapsayıcı ayrıldı

Yeni kapsayıcı başlangıçta detached durumundadır. Ayrılmış kapsayıcıyla çalışmaya devam edebilir veya hemen ekleyebiliriz. Çağrısı attach yaptıktan sonra, yeni oluşturulan örneği temsil eden benzersiz Kapsayıcı Kimliği'ni geri alacağız.

Kurtarma sonrası ile ilgili dikkat edilmesi gerekenler

Kurtarma sonrası senaryolarla ilgili kullanım örnekleri oluşturmaya gelince, uzak ortak çalışanlarının aynı kapsayıcı üzerinde yeniden çalışmasını sağlamak için hangi uygulamanın yapmak isteyebileceği konusunda dikkat edilmesi gereken birkaç nokta aşağıdadır.

Uygulama verilerinizi yalnızca akışkan kapsayıcıları kullanarak modellediyseniz, kapsayıcı bozulduğunda iletişim "bağlantısı" etkili bir şekilde bozulur. Benzer gerçek dünya örneği, özgün yazarın bağlantıyı katılımcılarla paylaştığı ve bu bağlantının artık çalışmadığı görüntülü arama olabilir. Bu perspektif göz önünde bulundurularak, kurtarma izinlerini özgün yazarla sınırlandırmak ve özgün kapsayıcının kopyasını kurtardıktan sonra özgün bağlantıyı paylaştıkları şekilde yeni kapsayıcı bağlantısını paylaşmalarına izin vermek bir seçenektir.

Alternatif olarak, yalnızca geçici veriler için akıcı çerçeve kullanıyorsanız, daha otonom kurtarma iş akışlarını yönetmek için her zaman kendi gerçeklik kaynağı verilerinizi ve destekleyici hizmetleri kullanabilirsiniz. Örneğin, uygulamanızın kurtarılan ilk kopyasına sahip olana kadar birden çok istemci kurtarma işlemini başlatabilir. Uygulamanız daha sonra tüm katılan istemcilere yeni bir kapsayıcıya geçmeleri konusunda bildirimde bulunabilir. Şu anda etkin olan herhangi bir istemci, işbirliğine devam etmek için katılan grubun engelini kaldıraabildiği için bu yararlı olabilir. Burada dikkate alınacak noktalardan biri, yedeklilik maliyetlerinin tahakkuk ettirilir.