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 verilerin anlık görüntülerini kapsayıcıya düzenli aralıklarla kaydeder ve bu da bu noktaya kadar verilerde yapılan tüm değişiklikleri özetler. Normal yükleme sırasında en son anlık görüntü alınır ve sonraki değişiklikler bu durumun üzerine uygulanır.

En son anlık görüntü veya sonraki değişiklikler bozuksa, Sıvı bunları normal şekilde yükleyemeyebilir. Bu durumda Fluid, depolanan anlık görüntü sürümlerini görüntülemek ve bunları sonraki değişiklikler uygulanmadan yalnızca görüntüleme modunda yüklemek için bir API koleksiyonu sunar. Bu, işbirliğini sürdürmek için verilerin ayıklanıp isteğe bağlı olarak yeni bir kapsayıcıya eklenip eklenmemesini sağlar.

Azure istemci API'leri

Kapsayıcı sürümlerini görüntülemek ve yüklemek için API'ler

AzureClient, bu senaryoyu desteklemek için aşağıdaki yöntemlere sahiptir:

Kapsayıcı sürümlerini alma

getContainerVersions(id, options?)

'den yüklenebilen kullanılabilir sürümlerin listesini alın.

Parameters:

  • id: Kapsayıcı kimliği. Bu, çağrılırken getContainerkullanılan kimlikle aynıdır.
  • options?: İsteğe bağlı olarak, belirtilmesi gereken seçenekler nesnesi:
    • maxCount: Alınacak en fazla sürüm sayısı. İstenenden daha fazla sürüm varsa, en yeni sürümler alınır. Varsayılan: 5

Returns: Kullanılabilir sürümleri temsil eden bir nesne dizisine çözümlenen bir söz (en yeniden en eskiye sıralanmış). Nesneler aşağıdaki özelliklere sahiptir:

  • id: Sürüm kimliği.
    • Not: Bu, kapsayıcı kimliğinden farklıdır ve özellikle kapsayıcı yerine anlık görüntü sürümüne başvurur.
  • date: Sürümün oluşturulduğu zaman damgası.

Kapsayıcı sürümünü görüntüleme

viewContainerVersion(id, containerSchema, version, compatibilityMode)

Yalnızca görüntülemek için kapsayıcının belirli bir sürümünü yükleyin. sürümünden getContainerVersions alınan tüm sürümler kullanılabilir, ancak bozuk verileri kurtarmak için en son sürümle başlayıp en son bozulmamış sürümü bulmak için geriye doğru çalışmanız önerilir.

Kapsayıcı duraklatılmış bir durumda yüklenir; başka bir deyişle, anlık görüntü oluşturma işleminden sonra gerçekleşen sonraki değişiklikleri uygulamaz. Bu durumda yüklendiğinde kapsayıcı verileri okunabilir ancak düzenlenemez.

Parameters:

  • id: Kapsayıcı kimliği. Bu, çağrılırken getContainerkullanılan kimlikle aynıdır.
  • containerSchema: Kapsayıcı şeması. Bu, çağrılırken getContainerkullanılan şemayla aynıdır.
  • version: Yüklenecek sürüme başvuran sürüm nesnesi. Sürüm nesnesi aracılığıyla getContainerVersionsalınabilir.
  • compatibilityMode: Uyumluluk modu. Bu, çağrılırken getContainerkullanılan uyumluluk moduyla aynıdır.

Returns: Yüklenen kapsayıcıyı tek bir özelliğe sahip temsil eden bir nesneye çözümlenen bir söz:

  • container: Kapsayıcı nesnesi. Bu, tarafından getContainerdöndürülen kapsayıcı nesnesiyle aynı nesne türüdür, ancak seçili sürümden önceki durumunda duraklatılır.

Örnek

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();

Ö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.