Gambaran umum silo heterogen
Pada kluster tertentu, silo dapat mendukung serangkaian jenis biji-bijian yang berbeda:
Dalam contoh ini kluster mendukung biji-bijian jenis A
, , B
, C
D
, E
:
- Jenis
A
biji-bijian danB
dapat ditempatkan di Silo 1 dan 2. - Jenis
C
biji-bijian dapat ditempatkan di Silo 1, 2, atau 3. - Jenis
D
biji-bijian hanya dapat ditempatkan di Silo 3 - Jenis
E
Biji-bijian hanya dapat ditempatkan di Silo 4.
Semua silo harus mereferensikan antarmuka semua jenis biji-bijian kluster, tetapi kelas biji-bijian hanya boleh dirujuk oleh silo yang akan menghostingnya. Klien tidak tahu silo mana yang mendukung Jenis Butir tertentu.
Penting
Implementasi jenis biji-bijian tertentu harus sama pada setiap silo yang mendukungnya.
Skenario berikut ini tidak valid:
Pada Silo 1 dan 2:
public class C: Grain, IMyGrainInterface
{
public Task SomeMethod() { /* ... */ }
}
Pada Silo 3:
public class C: Grain, IMyGrainInterface, IMyOtherGrainInterface
{
public Task SomeMethod() { /* ... */ }
public Task SomeOtherMethod() { /* ... */ }
}
Konfigurasi
Tidak diperlukan konfigurasi, Anda dapat menyebarkan biner yang berbeda pada setiap silo di kluster Anda. Namun, jika perlu, Anda dapat mengubah interval bahwa silo dan klien memeriksa perubahan jenis yang didukung dengan TypeManagementOptions.TypeMapRefreshInterval properti .
Untuk tujuan pengujian, Anda dapat menggunakan properti GrainClassOptions.ExcludedGrainTypes, yang merupakan daftar nama jenis yang ingin Anda kecualikan pada silo.
Batasan
- klien Koneksi tidak akan diberi tahu jika kumpulan Jenis Butir yang didukung berubah. Dalam contoh sebelumnya:
- Jika Silo 4 meninggalkan kluster, klien masih akan mencoba melakukan panggilan ke butir jenis
E
. Ini akan gagal pada runtime dengan OrleansException. - Jika klien terhubung ke kluster sebelum Silo 4 bergabung dengannya, klien tidak akan dapat melakukan panggilan ke butir jenis
E
. Ini akan gagal dengan ArgumentException.
- Jika Silo 4 meninggalkan kluster, klien masih akan mencoba melakukan panggilan ke butir jenis
- Biji-bijian stateless tidak didukung: semua silo dalam kluster harus mendukung set biji-bijian stateless yang sama.
- ImplicitStreamSubscriptionAttributetidak didukung dan dengan demikian hanya langganan Eksplisit yang dapat digunakan dalam Orleans Aliran.