Saya telah bekerja dengan Node.js
sebentar dan menganggap diri saya cukup baik dengan Java. Tapi saya baru tahu Akka
dan langsung tertarik dengan pola aktornya (dari apa yang saya pahami).
Sekarang, dengan asumsi keterampilan JavaScript saya setara dengan keterampilan Scala / Java saya, saya ingin fokus pada kepraktisan sistem mana pun. Apalagi dalam hal layanan web.
Menurut pemahaman saya, Node sangat baik dalam menangani banyak operasi bersamaan. Saya membayangkan layanan web Node yang baik untuk sistem manajemen aset akan unggul dalam menangani banyak pengguna yang mengirimkan perubahan pada saat yang sama (dalam aplikasi lalu lintas yang besar dan padat).
Tapi setelah membaca tentang aktor di Akka, jahitannya akan unggul di hal yang sama. Dan saya suka gagasan mengurangi pekerjaan menjadi potongan-potongan seukuran gigitan. Plus, bertahun-tahun yang lalu saya mencoba-coba Erlang dan jatuh cinta dengan sistem penyampaian pesan yang digunakannya.
Saya mengerjakan banyak aplikasi yang berhubungan dengan logika bisnis yang kompleks dan saya pikir inilah saatnya untuk melompat lebih berat ke satu atau yang lain. Terutama mengupgrade aplikasi Struts dan C # lama.
Bagaimanapun, untuk menghindari perang suci, bagaimana kedua sistem itu berbeda secara fundamental? Sepertinya keduanya diarahkan pada tujuan yang sama. Mungkin arsitektur "penyembuhan diri" Akka memiliki keuntungan.
EDIT
Sepertinya saya hampir mendapatkan suara. Tolong jangan anggap pertanyaan ini sebagai "mana yang lebih baik, simpul atau akka?". Apa yang saya cari adalah perbedaan mendasar dalam perpustakaan yang digerakkan oleh peristiwa seperti Node dan yang berbasis aktor seperti Akka.
Jawaban:
Tanpa membahas detailnya (yang saya tahu terlalu sedikit dalam kasus Node.js), perbedaan utamanya adalah bahwa Node.js hanya mendukung konkurensi tanpa paralelisme sementara Akka mendukung keduanya. Kedua sistem sepenuhnya digerakkan oleh peristiwa dan dapat diskalakan ke beban kerja yang besar, tetapi kurangnya paralelisme membuatnya sulit di Node.js (yaitu paralelisme secara eksplisit dikodekan dengan memulai beberapa node dan mengirimkan permintaan yang sesuai; oleh karena itu tidak fleksibel pada waktu proses) , sementara itu cukup mudah di Akka karena pelaksana multi-utasnya yang merdu. Mengingat unit kerja kecil yang terisolasi (permintaan aktor) Akka secara otomatis akan memparalelkan eksekusi untuk Anda.
Perbedaan penting lainnya adalah bahwa Akka menyertakan sistem untuk menangani kegagalan secara terstruktur (dengan meminta setiap aktor diawasi oleh induknya, yang bersifat wajib) sedangkan Node.js bergantung pada konvensi bagi penulis untuk meneruskan kondisi kesalahan dari callback ke callback. Masalah yang mendasarinya adalah bahwa sistem asinkron tidak dapat menggunakan pendekatan standar pengecualian yang digunakan oleh sistem berbasis tumpukan sinkron, karena kode "panggilan" akan berpindah ke tugas yang berbeda pada saat kesalahan panggilan balik terjadi. Memiliki penanganan kesalahan yang dibangun ke dalam sistem membuatnya lebih mungkin bahwa aplikasi yang dibangun di atas sistem itu kuat.
Di atas tidak dimaksudkan untuk menjadi lengkap, saya yakin ada lebih banyak perbedaan.
sumber
Saya belum menggunakan Akka, tapi sepertinya itu erlang tapi di java. Dalam erlang semua proses seperti aktor di Akka, mereka memiliki kotak surat, Anda dapat mengirim pesan di antara mereka, Anda memiliki pengawas, dll.
Node.js menggunakan konkurensi kooperatif. Itu berarti Anda memiliki konkurensi saat Anda mengizinkannya (misalnya saat Anda memanggil operasi io atau beberapa peristiwa asinkron). Ketika Anda memiliki operasi panjang (menghitung sesuatu dalam putaran panjang) seluruh blok sistem.
Erlang menggunakan pengalihan tugas preemptive. Jika Anda memiliki loop yang panjang, sistem dapat menjedanya untuk menjalankan operasi lain dan melanjutkan setelah beberapa waktu. Untuk konkurensi besar-besaran, Node.js bagus jika Anda hanya melakukan operasi singkat. Keduanya mendukung jutaan klien: http://blog.caustik.com/2012/08/19/node-js-w1m-concurrent-connections/ http://blog.whatsapp.com/index.php/2012/01/ 1-juta-begitu-2011 /
Di java Anda membutuhkan utas untuk melakukan konkurensi, jika tidak, Anda tidak dapat menjeda eksekusi di dalam fungsi yang dilakukan erlang (sebenarnya erlang berhenti di antara pemanggilan fungsi, tetapi ini terjadi dengan semua fungsi). Anda dapat menjeda eksekusi antar pesan.
sumber
node vs akka
debat, tetapi saya memiliki masalah nyata yang harus saya selesaikan. Saya akan mengatakan keterampilan Java / JavaScript saya cukup dekat tetapi saya memiliki sedikit pengalaman dengan Node dan tidak ada dengan AKKA (atau Scala). Tetapi saya memiliki beberapa aplikasi (internal untuk saat ini tetapi untuk eksternal nanti) dan orang-orang mencari cara untuk mencari log yang sangat besar ini. Tidak dapat menggunakan opsi pihak ketiga eksternal karena masalah privasi. Sepertinya itu akan menangani pekerjaan itu. Tapi saya suka pesan yang lewat dari AKKA jadi saya bisa mengeksplorasinya. Ditambah Java didorong lebih banyak di sini daripada JS. Terima kasih.Saya tidak yakin ini perbandingan yang adil untuk menggambar. Saya membaca ini lebih sebagai "bagaimana sistem berbasis peristiwa dibandingkan dengan model aktor?". Nodejs dapat mendukung model aktor seperti yang dilakukan Scala di Akka, atau C # di Orleans, sebenarnya lihat nactor , seseorang tampaknya sudah mencobanya.
Mengenai bagaimana perbandingan antara sistem peristiwa vs. model aktor, saya akan membiarkan orang-orang yang lebih bijak menjelaskannya. Beberapa poin singkat tentang model Aktor:
Juga, lihat drama . Ini adalah implementasi model aktor nodejs lain.
sumber