Bagaimana Reliable Actors menggunakan platform Service Fabric
Artikel ini menjelaskan cara kerja Reliable Actor pada platform Azure Service Fabric. Reliable Actor berjalan dalam kerangka kerja yang dihosting dalam implementasi reliable service yang disebut actor service. Actor service berisi semua komponen yang diperlukan untuk mengelola siklus hidup dan pengiriman pesan untuk actor Anda:
- Actor Runtime mengelola siklus hidup, pengumpulan sampah, dan memberlakukan akses single-threaded.
- Sebuah actor service yang mengelola jarak jauh pendengar listener menerima panggilan akses jarak jauh ke actor dan mengirimnya ke dispatcher guna dirutekan ke instans actor yang sesuai.
- Actor State Provider membungkus penyedia status (seperti penyedia status Reliable Collections) dan menyediakan adaptor untuk manajemen status actor.
Komponen-komponen ini bersama-sama membentuk kerangka Reliable Actor.
Lapisan layanan
Karena actor service itu sendiri merupakan reliable service, semua konsep model aplikasi, siklus hidup, pengemasan, penyebaran, peningkatan, dan penskalaan Reliable Service berlaku dengan cara yang sama untuk actor service.
Diagram sebelumnya menunjukkan hubungan antara kerangka kerja aplikasi Service Fabric dan kode pengguna. Elemen biru mewakili kerangka kerja aplikasi Reliable Service, jingga mewakili kerangka kerja Reliable Actor, dan hijau mewakili kode pengguna.
Dalam Reliable Service, layanan Anda mewarisi kelas StatefulService
. Kelas ini sendiri berasal dari StatefulServiceBase
(atau StatelessService
untuk layanan stateless). Dalam Reliable Actor, Anda menggunakan actor service. Actor service adalah implementasi yang berbeda dari kelas StatefulServiceBase
yang mengimplementasikan pola actor di mana actor Anda berjalan. Karena actor service itu sendiri hanyalah implementasi dari StatefulServiceBase
, Anda dapat menulis layanan Anda sendiri yang berasal dari ActorService
dan menerapkan fitur tingkat layanan dengan cara yang sama seperti yang Anda lakukan ketika mewarisi StatefulService
, seperti:
- Pencadangan dan pemulihan layanan.
- Fungsionalitas bersama untuk semua aktor, misalnya, pemutus arus.
- Prosedur jarak jauh memanggil actor service itu sendiri dan pada setiap actor individu.
Untuk informasi selengkapnya, lihat Menerapkan fitur tingkat layanan di actor service Anda.
Model aplikasi
Actor service adalah reliable service, sehingga model aplikasinya sama. Namun, alat build kerangka kerja actor menghasilkan beberapa file model aplikasi untuk Anda.
Manifes layanan
Alat build kerangka kerja actor secara otomatis menghasilkan konten file ServiceManifest.xml actor service Anda. Berkas ini mencakup:
- Jenis actor service. Nama jenis dihasilkan berdasarkan nama proyek actor Anda. Berdasarkan atribut persistensi pada actor Anda, bendera HasPersistedState juga diatur untuk menyesuaikan.
- Paket kode.
- Paket konfigurasi.
- Sumber daya dan titik akhir.
Manifes aplikasi
Alat build kerangka kerja actor secara otomatis membuat definisi layanan default untuk actor service Anda. Alat build mengisi properti layanan default:
- Jumlah set replika ditentukan oleh atribut persistensi pada actor Anda. Setiap kali atribut persistensi pada actor Anda diubah, jumlah set replika dalam definisi layanan default akan direset.
- Skema dan jangkauan partisi diatur ke Uniform Int64 dengan rentang kunci Int64 lengkap.
Konsep partisi Service Fabric untuk actor
Actor service adalah layanan stateful yang dipartisi. Setiap partisi actor service berisi satu set actor. Partisi layanan didistribusikan secara otomatis melalui beberapa node di Service Fabric. Instans actor didistribusikan sebagai hasilnya.
Reliable Service dapat dibuat dengan skema partisi dan rentang kunci partisi yang berbeda. Actor service menggunakan skema partisi Int64 dengan rentang kunci Int64 lengkap untuk memetakan actor ke partisi.
ID Actor
Setiap actor yang dibuat dalam layanan memiliki ID unik yang terkait dengannya, diwakili oleh kelas ActorId
. ActorId
adalah nilai ID opaque yang dapat digunakan untuk distribusi actor yang seragam di seluruh partisi layanan dengan menghasilkan ID acak:
ActorProxy.Create<IMyActor>(ActorId.CreateRandom());
ActorProxyBase.create<MyActor>(MyActor.class, ActorId.newId());
Setiap ActorId
dihashing ke Int64. Inilah sebabnya mengapa actor service harus menggunakan skema partisi Int64 dengan rentang kunci Int64 penuh. Namun, nilai ID kustom dapat digunakan untuk ActorID
, termasuk GUID/UUID, string, dan Int64.
ActorProxy.Create<IMyActor>(new ActorId(Guid.NewGuid()));
ActorProxy.Create<IMyActor>(new ActorId("myActorId"));
ActorProxy.Create<IMyActor>(new ActorId(1234));
ActorProxyBase.create(MyActor.class, new ActorId(UUID.randomUUID()));
ActorProxyBase.create(MyActor.class, new ActorId("myActorId"));
ActorProxyBase.create(MyActor.class, new ActorId(1234));
Saat Anda menggunakan GUID/UUID dan string, nilainya dihashing ke Int64. Namun, ketika Anda secara eksplisit menyediakan Int64 ke ActorId
, Int64 akan memetakan langsung ke partisi tanpa hashing lebih lanjut. Anda dapat menggunakan teknik ini untuk mengontrol partisi mana actor tersebut ditempatkan.