I've telah bekerja dengan akka selama 7-8 bulan sekarang sehari-hari. Ketika saya mulai, saya akan bekerja pada aplikasi dan melihat bahwa aktor-aktor yang akan digunakan pada dasarnya di mana saja sekali dalam aktor sistem untuk berkomunikasi antara sebagian besar benda-benda. Jadi saya melakukan hal yang sama - spin up aktor lain untuk x/y/z.
Tampaknya bagi saya bahwa ini mungkin terlalu sembarangan, menambah kompleksitas di mana itu bukan't diperlukan - tapi aku bisa't menemukan diskusi di mana aktor vs polos sinkron atau bahkan async logika melalui kontrak harus digunakan. Saya mulai merenungkan sikap saya setelah rekan kerja saya sebutkan sesuatu yang serupa. Saya menyadari beberapa kasus baru-baru ini di mana saya telah merenungkan tugas dan kemudian dihindari membuat aktor lain karena saya bisa mencapai hasil yang sama dengan aman di abadi implementasi - misalnya sesuatu seperti mendapatkan nilai konfigurasi dari db atau file ke suatu tempat di mana anda akses sangat jarang dan akan menunggu hasilnya adalah penggunaan yang sebenarnya terjadi.
Secara khusus, tampaknya bagi saya bahwa setiap kasus di mana anda're bermain dengan berubah negara, aktor menciptakan kompleksitas dan membatasi throughput - murni fungsi dalam suatu objek, misalnya, dapat disebut secara bersamaan dengan tidak ada risiko dengan tingkat concurrency, namun seorang aktor yang hanya dapat memproses satu pesan pada satu waktu. Alternatif pertimbangan anda'll park benang jika anda perlu untuk menunggu hasilnya, kecuali jika anda mulai menggunakan berjangka tapi kasus-kasus di mana anda don't perlu khawatir tentang async pesan atau skala tampaknya itu mungkin berlebihan untuk mempekerjakan seorang aktor.
Jadi pertanyaan saya adalah apakah ada waktu yang buruk untuk menggunakan aktor? I'm penasaran bagaimana erlang terlihat dan akan benar-benar seperti orang lain's wawasan. Atau jika ada beberapa prinsip aktor gunakan.
Ini adalah pertanyaan saya tertarik dan saya telah melakukan beberapa penelitian. Untuk sudut pandang lain, lihat ini blog post oleh Noel Walsh atau pertanyaan pada Stack Overflow. Saya punya beberapa pendapat yang saya ingin menawarkan:
Seperti Jason, saya tertarik untuk mendengar orang lain's wawasan di sini. Bagaimana saya dapat mengatasi beberapa masalah di atas, dan gunakan Akka baik?
It's baiknya mempertimbangkan apa yang aktor model ini digunakan untuk: aktor model
Ini adalah berharga karena menggunakan ruang negara dari beberapa benang akan benar-benar sulit, terutama ketika ada hubungan antara komponen yang berbeda dari berbagi negara yang harus terus disinkronkan. Namun, jika anda memiliki domain komponen di mana:
kemudian aktor model tidak akan memberikan banyak (jika ada) manfaat.
Harapan yang membantu.
Intuisi anda adalah benar, IMHO. Menggunakan aktor-aktor di mana-mana adalah seperti memiliki pepatah palu dan hanya melihat kuku.
Dalam Erlang praktek terbaik adalah dengan menggunakan proses/aktor untuk semua kegiatan yang terjadi secara bersamaan. Yaitu, seperti dalam kehidupan nyata. Kadang-kadang sulit untuk menemukan yang tepat granularity, tetapi sebagian besar waktu anda hanya tahu dengan melihat model domain dan menggunakan sedikit akal sehat. I'm takut aku don't memiliki metode yang lebih baik dari itu, tapi saya harap ini membantu.
Dalam rangka input/output pesan:
Baru-baru ini saya bertemu dengan sebuah akka berbasis aplikasi di mana aktor model yang benar-benar menyebabkan masalah konkurensi, model sederhana akan cukup baik di bawah beban.
Masalahnya adalah bahwa pesan masuk yang bergerak dalam berbagai 'jalur' (melalui berbagai aktor jalan) tapi kode diasumsikan pesan akan tiba di tujuan akhir mereka dalam urutan yang sama mereka tiba. Asalkan data yang tiba dengan cukup besar interval ini bekerja karena hanya akan ada satu pesan yang bertentangan balap ke tujuan. Ketika interval menurun mereka mulai tiba rusak dan menyebabkan perilaku aneh.
Masalah telah diselesaikan dengan benar dengan sedikit kurang pelaku, tapi itu's mudah untuk membuat kesalahan ketika overusing mereka.
Menurut saya ada dua kasus penggunaan untuk Aktor. Sumber daya bersama seperti pelabuhan dan sejenisnya, dan negara besar. Yang pertama telah dibahas dengan baik oleh diskusi sejauh ini, tapi negara besar ini juga alasan yang sah.
Struktur besar yang berlalu dengan setiap panggilan prosedur dapat menggunakan banyak tumpukan. Keadaan ini dapat dimasukkan ke dalam proses yang terpisah, struktur diganti dengan id proses, dan proses itu bertanya pada dasar yang diperlukan.
Database seperti mnesia dapat dianggap sebagai menyimpan keadaan eksternal untuk proses query.