Apa perbedaan antara model Aktor dan Layanan Mikro?

23

Keduanya tampak seperti MPI paralel yang mengomunikasikan jaringan proses. Saya mengidentifikasi aktor dengan layanan. Apakah aktor lebih dinamis (Anda dapat membuat mereka dan membunuh sebagai bernafas sedangkan jaringan layanan lebih statis) atau apa?

Alien kecil
sumber
1
speakerdeck.com/rore/…
Robert Harvey

Jawaban:

11

Model aktor - adalah model matematika untuk perhitungan bersamaan, dan layanan mikro - implementasi arsitektur berorientasi layanan. Persamaannya cukup kebetulan.

Tentunya mungkin untuk membangun layanan microser berdasarkan pada beberapa model aktor, dan memodelkan beberapa arsitektur layanan microser dengan model aktor, tetapi tidak berarti ini setara. Ganti "sistem microservice" dengan "sistem email", dan itu akan tetap benar. Ganti "model aktor" dengan "Mengkomunikasikan proses sekuensial" (CSP), dan itu juga akan "benar", karena CSP dan sistem model aktor dapat dimodelkan satu sama lain.

Model aktor yang diberikan Anda dapat pergi dan menerapkannya menggunakan layanan microser, atau SOA, atau bahkan email, tetapi itu tidak berarti mereka berada pada tingkat abstraksi yang sama untuk benar-benar membandingkan.

Juga, model aktor menekankan buffer (dapat dianggap sebagai antrian pesan di dunia layanan microser), sehingga beberapa aktor / layanan mikro dapat tidak siap sementara komunikasi asinkron secara inheren masih dimungkinkan.

Dengan kata lain, perbandingan dengan model aktor dapat membawa beberapa wawasan kreatif pada tingkat pertimbangan yang sangat tinggi, tetapi sebagian besar itu adalah apel vs jeruk.

Jika tujuannya adalah untuk membandingkan model matematika SOA / microservices dengan model Aktor, maka itu juga tidak sepele, karena: 1) tidak ada model matematika yang disepakati untuk SOA, 2) model biasanya mencakup tujuannya. Dan pemodelan SOA / microservices sangat mungkin berbeda dari tujuan model aktor. Salah satu contoh upaya untuk memodelkan SOA di sini .

Tentu saja, seseorang dapat membuat sistem model aktor dengan layanan mikro dan menyebut setiap layanan sebagai aktor (lihat definisi ketat tentang apa model aktor). Namun ini tidak berarti ada hubungan yang bermakna antara keduanya secara umum.

Roman Susi
sumber
Maksud saya model aktor tidak bisa dibandingkan dengan layanan microser pada level yang sama. Biarkan saya memperbarui jawaban saya
Roman Susi
Saya tidak mengatakan itu. Layanan Microsoft dapat menerapkan mode aktor, serta program perakitan atau C dapat. Tetapi saya tidak mengatakan bahwa mereka selalu melakukannya atau bahkan sering. Dan ya, Erlang juga merupakan contoh implementasi model aktor. Tidak yakin saya mengerti argumen Anda.
Roman Susi
Maaf, saya pertama kali membaca bahwa Aktor adalah model matematika dan implement uServices (model itu). Saya belum memperhatikan bahwa mereka mengimplementasikan Arsitektur Layanan. Jadi, pertanyaan saya adalah bagaimana dua model matematika, Aktor dan SOA dibandingkan satu sama lain. Layanan adalah sesuatu yang memiliki loop pesan yang menerima permintaan dan menghasilkan pesan respons. Aktor ini adalah / tidak. Apa perbedaannya dari microservice di SOA? Dengan kata lain, ketika saya memiliki jaringan layanan terdistribusi, haruskah saya merujuk mereka sebagai layanan-layanan mikro atau aktor?
Alien Kecil
Perhatikan bahwa ini adalah situs tanya jawab, bukan forum atau umpan berita. Moniker seperti UPDATE dan EDIT tidak diperlukan; setiap posting di Stack Exchange sudah memiliki riwayat edit terperinci yang dapat dilihat siapa pun.
Robert Harvey
1

Layanan Microsoft adalah cara untuk mengatur perangkat lunak dengan memisahkan setiap area yang menjadi perhatian ke dalam artifak yang dapat digunakan sendiri (dapat dieksekusi, skrip, JAR, PERANG, dll). Ini memberi Anda fleksibilitas, misalnya dengan memungkinkan Anda meningkatkan skala dengan menggunakan lebih banyak instance saat dibutuhkan. Katakanlah pengguna menghabiskan lebih banyak waktu melihat katalog Anda daripada menambahkan barang ke keranjang belanja; satu artefak yang dapat digunakan menangani fungsi katalog, yang lain menangani fungsi keranjang belanja - Anda dapat menjalankan lebih banyak salinan layanan katalog untuk menangani pemuatan.

Itu juga mengisolasi mereka dari perubahan internal. Katakanlah Anda pindah dari database relasional ke database dokumen untuk menyimpan data produk - kemungkinan besar layanan keranjang belanja Anda tidak perlu berubah.

Model aktor adalah level yang lebih rendah dari artifak yang dapat digunakan, lebih banyak tentang jenis objek yang telah Anda gunakan untuk mengimplementasikan layanan. Melanjutkan dengan contoh di atas, Anda mungkin memiliki keranjang belanja di sistem Anda diwakili oleh aktor, sehingga setiap keranjang pengguna adalah aktor yang berbeda, dan pesan mengatakannya untuk menambahkan item, menghapus item, merespons dengan konten saat ini, menambahkan pengiriman, memeriksa , dll. Dalam hal ini, Anda masih memiliki layanan mikro, dan ini diterapkan dengan model aktor.

Rob Crawford
sumber
Ketika Anda telah mengatakan bahwa Anda dapat memiliki banyak contoh dari layanan yang sama, saya mulai berpikir bahwa itu berlawanan: layanan adalah tipe sedangkan aktor adalah objek :)
Little Alien
Aktor tidak dapat ditempatkan secara individual? Apakah kamu yakin dotnet.github.io/orleans/Documentation/Grain-Versioning/…
Daffy Punk
Bagi saya tampaknya ada, implementasi bijak, mungkin sedikit konvergensi yang terjadi antara dua konsep ...
Daffy Punk
1

Saya akan mengatakan bahwa perbedaan utama adalah perbedaan.

Untuk model aktor itu relatif berbutir halus, di mana seorang aktor cenderung mewakili setara dengan satu objek di OOP.

Untuk layanan mikro relatif berbutir kasar, di mana layanan mikro tunggal dapat terdiri dari sejumlah besar aktor atau objek.

Perhatikan bahwa Anda tidak perlu memperluas imajinasi Anda terlalu jauh untuk mengatakan bahwa web modern adalah hal yang sama pada granularitas yang lebih besar ("layanan makro"); dan bahwa (mis.) server HTTP adalah layanan makro, server database adalah layanan makro, browser web adalah layanan makro, dll.

Semuanya kira-kira sama - potongan terisolasi yang berkomunikasi. Hanya ukuran keping (dan karenanya jumlah keping) yang berubah.

Brendan
sumber
Setiap aplikasi java, tidak peduli seberapa besar, adalah objek tunggal. Objek terbuat dari objek lain dan dapat tumbuh lebih besar tanpa batas. Saya kira bahwa uServices juga merupakan jenis aplikasi yang terbuat dari objek lain.
Little Alien
0

Microservices skala horisontal dengan menciptakan beberapa replika, yang masing-masing mampu melayani permintaan karena stateless sifat layanan. Mereka tahan terhadap kegagalan berdasarkan sifat tanpa kewarganegaraan mereka.

Aktor skala dengan memindahkannya ke partisi dengan beban lebih sedikit atau lebih banyak sumber daya yang tersedia. Mereka adalah negara . Mereka tahan terhadap kegagalan karena - tergantung pada kerangka aktor - aktor lain dapat diputar secara dinamis atau cadangan panas aktor dapat dipertahankan setiap saat untuk menghadapi kegagalan aktor utama.

Sekali lagi, layanan microser bisa menjadi stateful juga, tetapi bertentangan dengan prinsip-prinsip desain dari layanan microser.

Sushant
sumber