Spędziłem ostatni tydzień głęboko nurkując w dokumentach Akka i wreszcie zrozumiałem, czym są systemy aktorów i problemy, które rozwiązują.
Moje zrozumienie (i doświadczenie) tradycyjne JMS / AMQP brokerów wiadomość jest taka, że istnieją one dostarczyć następujące:
- Przetwarzanie asynchroniczne między producentem a konsumentem; i
- Gwarancja dostarczenia wiadomości, w tym trwałość, próby i awarie
Ale czy Akka nie zapewnia tego bez całej wymaganej infrastruktury i kosztów operacyjnych?
- W Akce cała komunikacja z aktorem jest asynchroniczna i nie blokuje; i
- W Akka
SupervisorStrategies
istnieją, aby wykonać próbę, wycofanie i eskalację. Podmioty mogą zostać skonfigurowane tak, aby utrzymywały się praktycznie w każdym sklepie, jeśli jest to również wymagane.
Zastanawiam się więc: czy moja aplikacja korzysta z Akka, czy kiedykolwiek muszę przedstawiać brokerów JMS / AMQP (np. ActiveMQ, RabbitMQ, Kafka)? Innymi słowy, czy kiedykolwiek zdarzy się przypadek użycia, w którym nowa aplikacja oparta na Akce również uzasadniałaby wprowadzenie nowego klastra brokera JMS / AMQP? Dlaczego lub dlaczego nie?
Jedynym argumentem byłoby to, że być może moja aplikacja Akka musi się zintegrować z innym systemem. Ale w takim przypadku moduł Akka-Camel pozwala Akce skorzystać z wyczerpującej, prawie nieskończonej listy możliwości integracji Camela (TCP, FTP, ZeroMQ, lista jest długa ...).
Myśli?
Odpowiedzi:
Model aktora
Model aktora jest strategią informatyczną do budowania aplikacji, które obsługują wiele jednoczesnych obliczeń i stanowego przetwarzania. Nie jest to jedyna strategia, ale jest to bardzo dobrze przetestowane, proste i niezawodne podejście, które przenosi obliczenia na aktorów , którzy komunikują się za pośrednictwem komunikatów, które przetwarzają pojedynczo i po kolei.
Akka to framework, który implementuje model aktora i pozwala budować systemy aktorskie z całą infrastrukturą i funkcjami już zbudowanymi (np. Używając JQuery zamiast javascript).
Wiadomości
Systemy wiadomości to aplikacje, które mogą wysyłać i pobierać wiadomości. Istnieje wiele odmian, od podstawowych kolejek po oprogramowanie dla dużych przedsiębiorstw z tematami, publikacjami / napisami, trwałością i innymi funkcjami, ale cel końcowy jest taki sam. Zapisz gdzieś bajty i odzyskaj je później, z pewnym porządkiem. Podstawowym przypadkiem dzisiejszego zastosowania jest rozdzielenie systemów i umożliwienie asynchronicznego przetwarzania przy różnych harmonogramach lub prędkościach. RabbitMQ, NATS, Kafka itp. To przykłady systemów wiadomości.
Porównanie
Model Actor i środowisko Akka to narzędzia niskiego poziomu, które są świetnym sposobem na tworzenie aplikacji , takich jak kolejki komunikatów.
Czy możesz używać Akka zamiast kolejki wiadomości? Pewnie. Jeśli budujesz oprogramowanie, które już korzysta z modelu aktora, prawdopodobnie nie potrzebujesz kolejki komunikatów zewnętrznych, szczególnie do wysyłania wiadomości w tym samym wątku lub aplikacji. Możesz użyć funkcji Akka Remoting, aby nawet wysyłać wiadomości do innych systemów aktorów działających na innych komputerach.
Czy jednak powoduje to, że systemy przesyłania komunikatów stają się przestarzałe? Absolutnie nie. Tylko dlatego, że możesz sam kodować wszystkie te rzeczy, nie oznacza to, że musisz, szczególnie gdy model aktora nie jest dobry dla twojego problemu lub potrzebujesz różnych języków, aplikacji, zewnętrznych interfejsów API, systemów operacyjnych, baz danych itp. ze sobą (czy są to systemy aktorskie, czy nie).
Jeśli potrzebujesz tylko przekazać niektóre wiadomości między dwoma systemami, użyj kolejki komunikatów. Jeśli potrzebujesz skalowalnego przetwarzania stanowego i komunikatów o niskim opóźnieniu w tej samej aplikacji, użyj modelu aktora. Oba istnieją na zupełnie różnych poziomach, a sposób ich użycia zależy od budowanego rozwiązania.
Istnieje świetna odpowiedź na temat SO na ten sam model aktorów w porównaniu do przesyłania wiadomości: /programming/5693346/when-to-use-actors-instead-of-messaging-solutions-such-as-websphere-mq- lub-Tibet
źródło