Bagikan melalui


Penerapan versi antarmuka grain

Dalam artikel ini, Anda akan mempelajari cara menggunakan penerapan versi antarmuka biji-bijian. Penerapan versi status Grain berada di luar cakupan.

Gambaran Umum

Pada kluster tertentu, silo dapat mendukung versi yang berbeda dari jenis biji-bijian.

Cluster with different versions of a grain

Dalam contoh ini, klien dan Silo{1,2,3} dikompilasi dengan antarmuka A grain versi 1. Silo 4 dikompilasi dengan A versi 2.

Batasan

  • Tidak ada penerapan versi pada pekerja tanpa status
  • Antarmuka streaming tidak diberi versi

Mengaktifkan penerapan versi

Jika atribut versi tidak secara eksplisit ditambahkan ke antarmuka biji-bijian, maka butir memiliki versi default 0. Anda dapat membuat versi grain dengan menggunakan VersionAttribute pada antarmuka grain:

[Version(X)]
public interface IVersionUpgradeTestGrain : IGrainWithIntegerKey
{
}

Di mana X adalah nomor versi antarmuka biji-bijian, yang biasanya meningkat secara monoton.

Kompatibilitas dan penempatan versi grain

Saat panggilan dari biji-bijian versi tiba di kluster:

  • Jika tidak ada aktivasi, aktivasi yang kompatibel akan dibuat
  • Jika ada aktivasi:
    • Jika saat ini tidak kompatibel, itu akan dinonaktifkan dan yang kompatibel baru akan dibuat (lihat strategi pemilih versi)
    • Jika yang saat ini kompatibel (lihat butir yang kompatibel), panggilan akan ditangani secara normal.

Secara default:

  • Semua butir versi seharusnya hanya kompatibel mundur (lihat panduan kompatibilitas mundur dan butir yang kompatibel). Itu berarti bahwa butir v1 dapat melakukan panggilan ke butir v2, tetapi butir v2 tidak dapat memanggil v1.
  • Ketika beberapa versi ada di kluster, aktivasi baru akan ditempatkan secara acak pada silo yang kompatibel.

Anda dapat mengubah perilaku default ini melalui GrainVersioningOptions:

var silo = new HostBuilder()
    .UseOrleans(c =>
    {
        c.Configure<GrainVersioningOptions>(options =>
        {
            options.DefaultCompatibilityStrategy = nameof(BackwardCompatible);
            options.DefaultVersionSelectorStrategy = nameof(MinimumVersion);
        });
    });