Bagikan melalui


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.

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

Partisi dan distribusi actor

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.

Langkah berikutnya