Saya sedang dalam proses memulai proyek baru (berbasis java). Saya perlu membangunnya sebagai arsitektur modular, terdistribusi, dan tangguh.
Oleh karena itu, saya ingin proses bisnis dapat berkomunikasi di antara mereka sendiri, dapat dioperasikan, tetapi juga independen.
Saat ini saya sedang melihat dua kerangka kerja yang, selain perbedaan usia, mengekspresikan 2 pandangan berbeda:
- Akka ( http://akka.io )
- Reaktor ( https://github.com/reactor/reactor )
Apa yang harus saya pertimbangkan saat memilih salah satu kerangka kerja di atas?
Sejauh yang saya pahami sampai sekarang, Akka entah bagaimana masih digabungkan (dengan cara saya harus 'memilih' aktor yang ingin saya kirimi pesan), tetapi sangat tangguh. Sementara Reaktor longgar (berdasarkan postingan acara).
Dapatkah seseorang membantu saya memahami bagaimana membuat keputusan yang tepat?
MEMPERBARUI
Setelah meninjau Bus Acara Akka dengan lebih baik, saya yakin dalam beberapa hal fitur yang diungkapkan oleh Reaktor sudah termasuk dalam Akka.
Misalnya langganan dan penerbitan acara, yang didokumentasikan di https://github.com/reactor/reactor#events-selectors-and-consumers , dapat diekspresikan di Akka sebagai berikut:
final ActorSystem system = ActorSystem.create("system");
final ActorRef actor = system.actorOf(new Props(
new UntypedActorFactory() {
@Override
public Actor create() throws Exception {
return new UntypedActor() {
final LoggingAdapter log = Logging.getLogger(
getContext().system(), this);
@Override
public void onReceive(Object message)
throws Exception {
if (message instanceof String)
log.info("Received String message: {}",
message);
else
unhandled(message);
}
};
}
}), "actor");
system.eventStream().subscribe(actor, String.class);
system.eventStream().publish("testing 1 2 3");
Oleh karena itu menurut saya sekarang perbedaan utama antara keduanya adalah:
- Akka, lebih dewasa, terikat pada Typeafe
- Reaktor, tahap awal, terikat ke Spring
Apakah interpretasi saya benar? Tapi apa perbedaan secara konseptual antara Aktor Akka dan Konsumen di Reaktor ?
Jawaban:
Sulit untuk mengatakannya pada saat ini karena Reaktor masih berupa sketsa dan saya (pimpinan teknologi Akka) tidak memiliki wawasan kemana arahnya. Akan menarik untuk melihat apakah Reaktor menjadi pesaing Akka, kami sangat menantikannya.
Sejauh yang saya bisa lihat, dari daftar kebutuhan Anda Reaktor kehilangan ketahanan (yaitu apa yang diberikan pengawasan kepada Anda di Akka) dan transparansi lokasi (yaitu mengacu pada entitas aktif dengan cara yang memungkinkan Anda mengabstraksikan pesan lokal atau jarak jauh; itulah yang Anda tersirat oleh "didistribusikan"). Untuk “modular” saya tidak cukup tahu tentang Reaktor, khususnya bagaimana Anda dapat mencari komponen aktif dan mengelolanya.
Jika Anda memulai proyek nyata sekarang dan membutuhkan sesuatu yang memenuhi kalimat pertama Anda, maka menurut saya tidak akan kontroversial untuk merekomendasikan Akka pada saat ini (seperti yang juga dicatat Jon). Jangan ragu untuk mengajukan pertanyaan yang lebih konkret tentang SO atau di milis pengguna akka .
sumber
Reaktor tidak terikat pada Spring, ini adalah modul opsional. Kami ingin Reactor menjadi portabel, yayasan seperti yang dijelaskan Jon.
Saya tidak akan percaya diri untuk mendorong produksi karena kami bahkan bukan Milestone (1.0.0.SNAPSHOT), dalam hal itu, saya akan melihat lebih dalam Akka yang merupakan IMO kerangka kerja asinkron yang fantastis. Juga pertimbangkan Vert.x dan Finagle yang mungkin diadaptasi jika Anda mencari platform (yang pertama) atau untuk masa depan yang dapat disusun (yang terakhir). Jika Anda menjaga berbagai pola asinkron, mungkin GPars akan memberi Anda solusi yang lebih lengkap.
Pada akhirnya, kita mungkin memiliki tumpang tindih, sebenarnya kita cenderung ke pendekatan campuran (eventing fleksibel yang dapat disusun, didistribusikan, dan tidak terikat pada strategi pengiriman apa pun) di mana Anda dapat dengan mudah menemukan bit dari RxJava , Vert.x , Akka , dll. Kami bahkan tidak keberatan dengan pilihan bahasa, meskipun kami sangat berkomitmen pada Groovy, orang-orang telah memulai port Clojure dan Kotlin . Tambahkan ke campuran ini fakta bahwa beberapa persyaratan didorong oleh Spring XD dan Grails .
Terima kasih banyak atas minat yang Anda saksikan, semoga Anda memiliki lebih banyak poin perbandingan dalam beberapa bulan :)
sumber
Ini adalah pertanyaan yang sangat bagus dan jawabannya akan berubah selama beberapa minggu mendatang. Kami tidak dapat membuat janji apa pun tentang seperti apa komunikasi antar-node saat ini hanya karena terlalu dini. Kami masih memiliki beberapa bagian untuk disatukan sebelum kami dapat mendemonstrasikan pengelompokan di Reactor.
Karena itu, hanya karena Reaktor tidak melakukan komunikasi antar-node, OOTB tidak berarti tidak bisa . :) Seseorang hanya membutuhkan lapisan jaringan yang cukup tipis untuk berkoordinasi antara Reaktor menggunakan sesuatu seperti Redis atau AMQP untuk memberikan beberapa kecerdasan berkerumun.
Kami pasti berbicara tentang dan merencanakan skenario terdistribusi di Reaktor. Masih terlalu dini untuk mengatakan dengan tepat bagaimana ini akan berhasil.
Jika Anda membutuhkan sesuatu yang melakukan pengelompokan sekarang, Anda akan lebih aman memilih Akka.
sumber