Akka veya Reaktör [kapalı]


94

Yeni bir proje (java tabanlı) başlatma sürecindeyim. Bunu modüler, dağıtılmış ve esnek bir mimari olarak inşa etmem gerekiyor.

Bu nedenle iş süreçlerinin kendi aralarında iletişim kurmasını, birlikte çalışabilir ve aynı zamanda bağımsız olmasını istiyorum.

Şu anda yaş farklarının yanı sıra 2 farklı görüşü ifade eden iki çerçeveye bakıyorum:

Yukarıdaki çerçevelerden birini seçerken nelere dikkat etmeliyim?

Şimdiye kadar anladığım kadarıyla, Akka hala bir şekilde bağlı (bir şekilde mesajları göndermek istediğim oyuncuyu 'seçmek' zorunda kalıyorum), ama çok dayanıklı. Reactor gevşek haldeyken (olay gönderimine göre olduğu gibi).

Birisi nasıl doğru bir karar vereceğimi anlamama yardımcı olabilir mi?

GÜNCELLEME

Akka'nın Etkinlik Otobüsünü daha iyi inceledikten sonra , bir şekilde Reactor tarafından ifade edilen özelliklerin zaten Akka'da yer aldığına inanıyorum .

Örneğin https://github.com/reactor/reactor#events-selectors-and-consumers adresinde belgelenen abonelik ve etkinlik yayını Akka'da şu şekilde ifade edilebilir:

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");

Bu nedenle, şimdi bana öyle geliyor ki ikisi arasındaki temel farklar:

  • Akka, daha olgun, Typesafe'ye bağlı
  • Reaktör, erken aşama, bahara bağlı

Yorumum doğru mu? Peki Akka'daki Oyuncu ile Reaktördeki Tüketici arasındaki kavramsal fark nedir?


8
Akka, Scala tarafından kullanılmak zorunda değildir, aslında, çoğu Java'dan kullanmaktadır.
Viktor Klang

1
David: Şuna benzer bir şey: Akka EventBus API, Akka Actors ile uyum içinde Reactor Modelini uygular
Viktor Klang

9
Sadece açıklığa kavuşturmak için: Reaktör hiç Spring'e bağlı değil. Herhangi bir Spring bağımlılığını kasıtlı olarak dışarıda tutuyoruz çünkü temel bir çerçeve olarak kullanımını yalnızca Spring kullanıcılarıyla sınırlamak mantıklı değil. Bir Aktör ve Tüketici arasındaki farka gelince: Reactor söz konusu olduğunda, Tüketiciniz durum bilgisi olabilir veya olmayabilir. Durumsuz anonim bir sınıf veya Java 8 lambda kullanmak isteyeceğiniz varsayılıyor, ancak bu bir gereklilik değil. Ve cevabımda bahsettiğim gibi, Reactor araç seti, erken yinelemeler için kasıtlı olarak özlüdür. "Bir sonraki Akka" yı yaratmaya çalışmıyoruz.
Jon Brisbin

8
Araştırma yapanlar için benzer şekilde bazı ilginç kavramlarla aynı olay odaklı alanda olacağına inandığım için vertx.io'dan bahsetmiyorum .
Opentuned

1
Birkaç yıl geçtikten sonra ben de benzer bir durumdayım, Uygulamam öncelikle yay tabanlı ve şimdi olay odaklı bir özelliği kullanmam gerekiyor. Akka ve Spring reaktörü için net bir kazanan var mı? Daha karmaşık senaryolara ulaşmam durumunda aktif kullanıcı komünitelerine sahip bir çerçeve arıyorum.
tintin

Yanıtlar:


47

Bu noktada söylemek zor çünkü Reactor hala bir taslak ve ben (Akka teknoloji lideri) bunun nereye gideceğine dair bir fikrim yok. Reactor'ın Akka'ya rakip olması ilginç olacak, bunu dört gözle bekliyoruz.

Görebildiğim kadarıyla, gereksinimler listenizden Reactor, esnekliği (yani Akka'da denetimin size sağladığı şey) ve konum şeffaflığını (yani, yerel veya uzaktan mesajlaşmayı özetlemenizi sağlayacak şekilde aktif varlıklara atıfta bulunma) eksik; "dağıtılmış" olarak ima edilir). "Modüler" için Reactor hakkında yeterince bilgim yok, özellikle de aktif bileşenleri nasıl arayabileceğiniz ve onları nasıl yönetebileceğiniz.

Şimdi gerçek bir projeye başlarsanız ve ilk cümlenizi tatmin edecek bir şeye ihtiyacınız varsa, bu noktada Akka'yı tavsiye etmenin tartışmalı olacağını düşünmüyorum (Jon'un da belirttiği gibi). SO veya akka-kullanıcı posta listesinde daha somut sorular sormaktan çekinmeyin .


Teşekkürler Roland, her iki projeden de insanların cevaba katkıda bulunduğunu görmeyi seviyorum. Şu anda Akka'yı deniyorum. Tahmin ettiğiniz gibi, soruya son bir yanıt vermek için oldukça erken, ancak Reactor hala erken aşamalarda, bu nedenle henüz bir karşılaştırma için uygun değil. Öyleyse bekleyelim ve işlerin nasıl geliştiğini görelim :-) Teşekkürler, David
David Riccitelli

7
Cevabın için teşekkürler Roland. Reactor'ın bir Akka rakibi olmadığını açıklığa kavuşturmak istedim. Asenkron uygulamalarla ilgili olarak örtüşen bir endişe alanı nedeniyle benzerlikler vardır. Ancak Reaktör, diğer sistemlerin üzerine inşa edilebileceği temel bir çerçeve anlamına gelir. Bu diğer sistemler Akka ile Reactor'ün kendisinden daha fazla örtüşebilir. Ancak öngörülebilir gelecekte Reactor, diğer sistemleri mümkün kılan bir çerçeve olmaya devam edecek ve kendisi tam yığınlı bir çerçeve olmayacak. Reaktör / Akka çatışmasında hazzı ertelemeniz gerekecek. ;)
Jon Brisbin

Endişelenmeyin, bence iyi olacaksınız ve bu alana daha fazla kütüphane girdikçe çapraz tozlaşma göreceğimizden oldukça eminim.
Roland Kuhn

37

Reaktör Yaya bağlı değildir, isteğe bağlı bir modüldür. Reactor'ın taşınabilir olmasını istiyoruz, Jon'un da belirttiği gibi bir temel.

Milestone (1.0.0.SNAPSHOT) bile olmadığımız için üretimde ilerleme konusunda kendime güvenmeyeceğim, bu bakımdan, fantastik bir asenkron IMO çerçevesi olan Akka'ya daha derin bir göz atacağım . Ayrıca düşünün Vert.x ve finagle bir platforma (eski) veya composable vadeli (ikincisi) için ya bakarsak uyarlanabilir olabilir. Çok çeşitli eşzamansız kalıplara bakarsanız, belki de GPars size daha eksiksiz bir çözüm sağlayabilir.

Sonunda, kesinlikle çakışmalar olabilir, aslında RxJava , Vert.x , Akka vb . Bitleri kolayca bulabileceğiniz karma bir yaklaşıma (esnek birleştirilmiş olay oluşturma, dağıtılmış ve herhangi bir gönderim stratejisine bağlı olmayan) doğru eğiliyoruz. Groovy'ye sıkı sıkıya bağlı olsak bile, dil seçimi konusunda bile fikir sahibi değiliz, insanlar Clojure ve Kotlin limanlarını çoktan başlattılar . Bu karışıma, bazı gereksinimlerin Spring XD ve Grails tarafından yönlendirildiği gerçeğini ekleyin .

Şahit olduğunuz ilgi için çok teşekkürler, umarım birkaç ay içinde daha fazla karşılaştırma noktası elde edersiniz :)


Teşekkürler Stephane, cevabınızın (ve Jon'un yorumunun stackoverflow.com/questions/16595393/akka-or-reactor/… ) çok daha net bir bakış açısı verdiğine inanıyorum . Yine de yanıtlanan soruyu işaretlemeden önce tutacağım, dediğin gibi, bakalım yakın gelecekte neler çıkacak. Yine, her iki projede yer alan insanların yararlı bilgiler sağlamak için zaman harcadıklarını gerçekten takdir ediyorum.
David Riccitelli

Vert.x'e katılıyorum. Vert.x'i birkaç projede üretim ortamında bileşenler arasında iletişim kurmak için kullandım ve sorunsuz çalışıyor.
kazanır

33

Bu mükemmel bir soru ve yanıt önümüzdeki haftalarda değişecek. Çok erken olduğu için şu anda düğümler arası iletişimin nasıl görüneceğine dair herhangi bir söz veremeyiz. Reactor'da kümelenmeyi göstermeden önce bir araya getirmemiz gereken bazı parçalarımız var.

Bunu dedi, Reaktör yapar sırf arası düğüm adet OTB o anlamına gelmez comms yapamaz olamaz . :) Redis veya AMQP gibi bir şeyi kullanarak Reaktörler arasında koordine etmek için yalnızca oldukça ince bir ağ katmanına ihtiyaç duyulacaktır.

Kesinlikle Reactor'daki dağıtılmış senaryolardan bahsediyor ve bunları planlıyoruz. Tam olarak nasıl çalışacağını söylemek için henüz çok erken.

Şu anda kümeleme yapan bir şeye ihtiyacınız varsa, Akka'yı seçerken daha güvenli olacaksınız.


Teşekkürler Jon, Reactor'ı çok umut verici buluyorum. Yine de Reactor ile Akka arasında Reactor'ın eksik olan özelliklerinin yanı sıra (elbette erken aşamada olduğu için) kavramsal bir fark olup olmadığını anlamam gerekiyor. Özetle Akka'daki bir Aktör ile Reaktördeki Tüketici arasındaki kavramsal fark nedir? Ayrıca sorumu, Reactor GitHub sayfasındaki olay aboneliğine / gönderimine benzediğine inandığım Akka'daki örnek bir Olayla güncelledim. Teşekkürler.
David Riccitelli

Jon, cevabını burada okuyordum: blog.springsource.org/2013/05/13/… - bu nedenle, uzun vadede Akka ve Reactor'ın hem Reactor modelini hem de Actor modelini destekleyen benzer bir çerçeve olacağını varsayabiliriz.
David Riccitelli

Yukarıdaki yorum, aşağıdakilerden dolayı artık doğru değil: stackoverflow.com/questions/16595393/akka-or-reactor/… ve stackoverflow.com/a/16674388/565110
David Riccitelli

Bu yorumun şimdi ne kadar yanlış olduğunu anlamıyorum? Buradaki hiçbir şey Reaktör'ün stratejik yönünün açıklamasıyla çelişmiyor.
Jon Brisbin

1
Anladım. Evet, doğru anlıyorsunuz. Bu soruları sorduğunuz için teşekkürler! :)
Jon Brisbin
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.