Bagikan melalui


Orleans direktori biji-bijian

Biji-bijian memiliki identitas logis yang stabil dan dapat diaktifkan (diinstansiasi) dan dinonaktifkan berkali-kali selama masa pakai aplikasi, tetapi paling banyak satu aktivasi biji-bijian ada kapan saja. Setiap kali biji-bijian diaktifkan, biji-bijian dapat ditempatkan pada silo yang berbeda di kluster. Ketika biji-bijian diaktifkan dalam kluster, biji-bijian terdaftar di registri global, direktori biji-bijian. Ini memastikan bahwa pemanggilan berikutnya dari biji-bijian itu akan dikirimkan ke aktivasi biji-bijian itu dan bahwa tidak ada aktivasi (instans) lain dari butir tersebut yang akan dibuat. Direktori biji-bijian bertanggung jawab untuk menyimpan pemetaan antara identitas biji-bijian dan di mana (silo mana) aktivasinya saat ini berada.

Secara default, Orleans menggunakan direktori dalam memori terdistribusi bawaan. Direktori ini akhirnya konsisten dan dipartisi di semua silo dalam kluster dalam bentuk tabel hash terdistribusi.

Dimulai dengan 3.2.0, Orleans juga mendukung implementasi direktori biji-bijian yang dapat dicolokkan.

Dua plugin tersebut disertakan dalam rilis 3.2.0:

Anda dapat mengonfigurasi implementasi direktori grain mana yang akan digunakan berdasarkan jenis per butir, dan Anda bahkan dapat menyuntikkan implementasi Anda.

Direktori grain mana yang harus Anda gunakan?

Sebaiknya selalu dimulai dengan direktori default (direktori terdistribusi dalam memori bawaan). Meskipun pada akhirnya konsisten dan memungkinkan aktivasi duplikat sesekali ketika kluster tidak stabil, direktori bawaan cukup mandiri tanpa dependensi eksternal, tidak memerlukan konfigurasi apa pun, dan telah digunakan dalam produksi sepanjang waktu.

Ketika Anda memiliki beberapa pengalaman dengan Orleans dan memiliki kasus penggunaan untuk direktori biji-bijian dengan jaminan aktivasi tunggal yang lebih kuat dan/atau ingin meminimalkan jumlah biji-bijian yang dinonaktifkan ketika silo dalam kluster dimatikan, pertimbangkan untuk menggunakan implementasi berbasis penyimpanan direktori biji-bijian, seperti implementasi Redis. Coba gunakan untuk satu atau beberapa jenis biji-bijian terlebih dahulu, dimulai dengan yang berumur panjang dan memiliki sejumlah besar status atau proses inisialisasi yang mahal.

Konfigurasi

Secara default, Anda tidak perlu melakukan apa pun; direktori grain dalam memori akan secara otomatis digunakan dan dipartisi di seluruh kluster. Jika Anda ingin menggunakan konfigurasi direktori grain non-default, Anda perlu menentukan nama plugin direktori yang akan digunakan. Ini dapat dilakukan melalui atribut pada kelas biji-bijian dan dengan injeksi dependensi dan plugin direktori dengan nama tersebut selama konfigurasi silo.

Konfigurasi biji-bijian

Menentukan nama plugin direktori grain dengan GrainDirectoryAttribute:

[GrainDirectory(GrainDirectoryName = "my-grain-directory")]
public class MyGrain : Grain, IMyGrain
{
    // ...
}

Konfigurasi silo

Di sini kami mengonfigurasi implementasi direktori grain Redis:

siloBuilder.AddRedisGrainDirectory(
    "my-grain-directory",
    options => options.ConfigurationOptions = redisConfiguration);

Direktori grain Azure dikonfigurasi seperti ini:

siloBuilder.AddAzureTableGrainDirectory(
    "my-grain-directory",
    options => options.ConnectionString = azureConnectionString);

Anda dapat mengonfigurasi beberapa direktori dengan nama yang berbeda untuk digunakan untuk kelas butir yang berbeda:

siloBuilder
    .AddRedisGrainDirectory(
        "redis-directory-1",
        options => options.ConfigurationOptions = redisConfiguration1)
    .AddRedisGrainDirectory(
        "redis-directory-2",
        options => options.ConfigurationOptions = redisConfiguration2)
    .AddAzureTableGrainDirectory(
        "azure-directory",
        options => options.ConnectionString = azureConnectionString);