Saya menghabiskan minggu terakhir menyelam dalam-dalam ke dokumen Akka dan akhirnya memahami apa sistem aktor, dan masalah yang mereka pecahkan.
Pemahaman saya (dan pengalaman dengan) pialang pesan tradisional JMS / AMQP adalah bahwa mereka ada untuk menyediakan yang berikut:
- Pemrosesan yang tidak sinkron antara produsen dan konsumen; dan
- Jaminan pengiriman pesan, termasuk ketekunan, coba lagi, dan fallback
Tetapi bukankah Akka menyediakan ini, tanpa semua infrastruktur dan biaya operasional yang diperlukan?
- Di Akka, semua komunikasi Aktor tidak sinkron dan non-pemblokiran; dan
- Di Akka,
SupervisorStrategies
ada untuk mencapai coba lagi, mundur dan naik. Aktor dapat dikonfigurasi untuk bertahan pada hampir semua jenis toko, jika ini merupakan persyaratan juga.
Jadi ini membuat saya bertanya-tanya: jika aplikasi saya menggunakan Akka, apakah saya pernah perlu membawa broker JMS / AMQP (mis. ActiveMQ, RabbitMQ, Kafka) ke dalam gambar? Dengan kata lain, apakah ada yang pernah kasus penggunaan di mana aplikasi baru berbasis Akka akan kemudian juga menjamin pengenalan baru JMS / AMQP broker klaster? Mengapa atau mengapa tidak?
Satu-satunya argumen adalah mungkin aplikasi Akka saya harus berintegrasi dengan sistem lain. Tetapi dalam kasus itu, modul Akka-Camel memungkinkan Akka untuk memasuki daftar lengkap kemampuan integrasi Camel yang hampir tak terbatas (TCP, FTP, ZeroMQ, daftarnya berjalan terus dan terus ...).
Pikiran?
Jawaban:
Model Aktor
Model aktor adalah strategi ilmu komputer untuk membangun aplikasi yang menangani banyak komputasi bersamaan dan pemrosesan stateful. Ini bukan satu-satunya strategi tetapi ini adalah pendekatan yang teruji dengan sangat baik, sederhana, dan andal yang menggerakkan komputasi menjadi aktor , yang berkomunikasi melalui pesan yang mereka proses satu per satu dan dalam urutan.
Akka adalah kerangka kerja yang mengimplementasikan model aktor dan memungkinkan Anda untuk membangun sistem aktor dengan semua infrastruktur dan fitur yang sudah dibangun (seperti menggunakan JQuery alih-alih javascript).
Olahpesan
Sistem pesan adalah aplikasi yang dapat mengirim dan mengambil pesan. Ada banyak variasi dari antrian dasar ke perangkat lunak perusahaan besar dengan topik, pub / sub, kegigihan dan fitur lainnya tetapi tujuan akhirnya adalah sama. Simpan beberapa byte di suatu tempat dan ambil lagi nanti, dengan semacam pemesanan. Kasus penggunaan utama hari ini adalah memisahkan sistem dan memungkinkan pemrosesan asinkron pada jadwal atau kecepatan yang berbeda. RabbitMQ, NATS, Kafka, dll adalah contoh dari sistem pesan.
Perbandingan
Model Aktor dan kerangka kerja Akka adalah alat tingkat rendah yang merupakan cara terbaik untuk membangun aplikasi , seperti antrian pesan.
Bisakah Anda menggunakan Akka sebagai ganti antrian pesan? Tentu. Jika Anda membuat perangkat lunak yang sudah menggunakan model aktor maka Anda mungkin tidak perlu antrian pesan eksternal, terutama untuk mengirim pesan dalam utas atau aplikasi yang sama. Anda dapat menggunakan kemampuan Akka Remoting untuk bahkan mengirim pesan ke sistem aktor lain yang berjalan di mesin lain.
Namun, apakah ini membuat sistem pesan usang? Benar-benar tidak. Hanya karena Anda dapat mengkodekan semua hal ini sendiri bukan berarti Anda harus melakukannya, terutama ketika model aktor tidak baik untuk masalah Anda atau Anda memerlukan bahasa, aplikasi, API eksternal, sistem operasi, database, dll yang berbeda untuk berkomunikasi satu sama lain (apakah mereka sistem aktor atau tidak).
Jika Anda hanya perlu mengirimkan beberapa pesan di antara dua sistem, gunakan antrian pesan. Jika Anda memerlukan pemrosesan bersyarat negara dan pesan latensi rendah dalam aplikasi yang sama, maka gunakan model aktor. Keduanya ada pada level yang sangat berbeda dan bagaimana Anda menggunakannya tergantung pada solusi yang Anda buat.
Ada jawaban yang bagus pada SO tentang model aktor yang sama ini vs perpesanan: /programming/5693346/when-to-use-actors-instead-of-messaging-solutions-such-as-websphere-mq- atau-Tibco
sumber