Dobry przypadek użycia dla Akka [zamknięte]


605

Słyszałem wiele entuzjazmu o frameworku Akka (platforma serwisowa Java / Scala), ale jak dotąd nie widziałem wielu rzeczywistych przykładów użycia, do których byłby odpowiedni. Chciałbym więc dowiedzieć się o rzeczach, które programiści z powodzeniem wykorzystali.

Tylko jedno ograniczenie: nie dołączaj przypadku pisania serwera czatu. (dlaczego? skoro zostało to wykorzystane jako przykład wielu podobnych rzeczy)


10
Czy nie jest łatwiej zacząć od problemu i znaleźć rozwiązanie, niż mieć rozwiązanie i szukać problemu, aby go zastosować? Domyślam się, że zamiast używać RMI, Akka i jej aktorzy wyglądają o wiele łatwiej / prościej dla pisania kodu.
Kennet,

67
Tak, gdybym miał konkretny problem do rozwiązania. W żadnym wypadku nie szukam „wymówki, by używać Akki”, ale chcę dowiedzieć się czegoś więcej. Może to również pomóc w rozwiązywaniu przyszłych problemów, ale przede wszystkim jest to proces ciągłego uczenia się.
StaxMan

Istnieje powiązane pytanie, ale dotyczące zastosowania AKKA do istniejącej aplikacji + niektóre przypadki użycia: stackoverflow.com/questions/16595685/...
ses

2
Akka jest lepszym rozwiązaniem niż JMS lub system kolejki komunikatów rozproszonych w stylu MQ. To najlepszy sposób na zrozumienie tego dla mnie, który niedawno zadał dokładnie to samo pytanie: „Rozumiem, jak go używać i widzę, gdzie mógłbym go użyć, ale nie widzę, gdzie zapewniłoby to prawdziwą przewagę”. Podstawowe założenia projektowe stojące za Akka są znacznie lepsze niż założenia JMS / MQ, szczególnie w odniesieniu do izolacji procesu, projektowania bez blokowania i obsługi ponownych prób / awarii. Po drugie, interfejs API jest znacznie bardziej elegancki niż narzędzia JMS / MQ.
user2684301

2
@ user2684301 hmmh. Uważam, że ta odpowiedź jest nieco niesprawiedliwa, w sposób od jabłek do pomarańczy. MQ to (logicznie) proste bloki konstrukcyjne, które działają znacznie mniej niż Akka, i nie porównywałbym ich obok siebie. Ale sądzę, że jeśli przeczytam to jako „w porównaniu do systemów rozproszonych zbudowanych przy użyciu JMS, napisanych deklaratywnie”, to miałoby to większy sens.
StaxMan

Odpowiedzi:


321

Dotychczas z powodzeniem wykorzystałem go w dwóch prawdziwych projektach. oba znajdują się w polu informacji o ruchu drogowym w czasie zbliżonym do rzeczywistego (ruch jak w samochodach na autostradach), rozmieszczonych w kilku węzłach, integrujących wiadomości między kilkoma stronami, niezawodnych systemów zaplecza. Nie jestem jeszcze w stanie podać szczegółów na temat klientów, ale kiedy dostanę OK, może to zostać dodane jako odniesienie.

Akka naprawdę wykorzystała te projekty, mimo że zaczęliśmy od wersji 0.7. (tak przy okazji, używamy Scali)

Jedną z dużych zalet jest łatwość, z jaką można skomponować system z aktorów i komunikatów bez prawie żadnych połączeń kotłowych, skaluje się wyjątkowo dobrze bez wszystkich złożoności ręcznego walcowania wątków i otrzymujesz asynchroniczne przekazywanie wiadomości między obiektami prawie za darmo.

Jest bardzo dobry w modelowaniu wszelkiego rodzaju asynchronicznej obsługi komunikatów. Wolałbym pisać w tym stylu dowolny system usług (internetowych) niż jakikolwiek inny styl. (Czy kiedykolwiek próbowałeś napisać asynchroniczną usługę internetową (po stronie serwera) za pomocą JAX-WS? To dużo hydrauliki). Powiedziałbym więc, że każdy system, który nie chce zawiesić się na jednym ze swoich komponentów, ponieważ wszystko jest domyślnie wywoływane przy użyciu metod synchronicznych, a ten jeden komponent blokuje się na czymś. Jest bardzo stabilny, a rozwiązanie awarii i nadzoru nad awarią naprawdę działa dobrze. Wszystko jest łatwe do zaprogramowania programowego i nie jest trudne do testowania jednostkowego.

Są też doskonałe moduły dodatkowe. Moduł Camel naprawdę dobrze wpasowuje się w Akka i umożliwia tak łatwy rozwój usług asynchronicznych z konfigurowalnymi punktami końcowymi.

Jestem bardzo zadowolony z frameworka i staje się on standardem defacto dla tworzonych przez nas systemów połączonych.


14
Jaka jest korzyść z tego podejścia w porównaniu z wykorzystaniem zaplecza przesyłania wiadomości (np. ActiveMQ) do przekazywania wiadomości?
magiconair

27
Produkty MQ są naprawdę przeznaczone do innego zastosowania. różne gwarancje i bardzo różne wyniki. Produkty MQ wymagają dużej konfiguracji, nie można używać kolejek w takim produkcie w taki sam sposób, jak obiektów. Aktorzy są pierwszorzędnymi obywatelami w akka, używasz ich tak, jak chcesz, podobnie jak byś używał obiektów, więc w twoim modelu programowania jest dużo mniej kosztów ogólnych niż w konfiguracji. Produkty MQ, których bardziej byś użył do integracji z innymi systemami zewnętrznymi, a nie do budowania wewnętrznych elementów systemu, do czego byś użył aktorów.
Raymond Roestenburg

26
Nowy adres URL studium przypadku DBP to downloads.typesafe.com/website/casestudies/…
Bas

2
Kompilacja systemów @RaymondRoestenburg re: MQ i alternatyw. Na przykład RabbitMQ jest oparty na języku programowania opartym na aktorach, Erlang. To jeden ze sposobów myślenia o związku (i rozróżnieniu) między aktorem a MQ. Tymczasem Apache Spark nie jest oparty na pracownikach i kolejkach, ani na aktorach , ALE może być używany z Akka: Typesafe pokazuje, jak używać Spark Streaming z Akka .
driftcatcher

6
@RaymondRoestenburg Zlekceważyłeś wspomnieć, że model aktora jako taki promuje strukturę przypominającą spaghetti. Książka „Akka w akcji”, którą napisałeś, jest najlepszą demonstracją tej „funkcji”. Przykłady kodu dotyczą dość podstawowych historii. Jednak przepływ pracy jest bardzo trudny do zrozumienia i śledzenia na podstawie kodu. Powiązanym problemem jest to, że kod Akka będzie nieodwracalnie w całej logice biznesowej w najbardziej inwazyjny sposób, jaki możesz sobie wyobrazić. Znacznie więcej niż jakikolwiek inny system niebędący podmiotem. Po prostu niemożliwe jest napisanie podstawowego przepływu pracy bez podzielenia go na różne osobne sekcje.
zachwycił

222

Oświadczenie: Jestem PO dla Akka

Oprócz oferowania smorgasbord współbieżności, który jest znacznie prostszy do uzasadnienia i uzyskania poprawności (aktorzy, agenci, współbieżność przepływu danych) oraz z kontrolą współbieżności w postaci STM.

Oto kilka przypadków użycia, które możesz rozważyć:

  1. Przetwarzanie transakcji (gry online, finanse, statystyki, zakłady, media społecznościowe, telekomunikacja, ...)
    • skalowanie w górę, skalowanie w górę, tolerancja błędów / HA
  2. Backend usługi (dowolna branża, dowolna aplikacja)
    • usługa REST, SOAP, kometa itp
    • działają jako centrum wiadomości / warstwa integracji
    • skalowanie w górę, skalowanie w górę, tolerancja błędów / HA
  3. Przystawka współbieżność / równoległość (dowolna aplikacja)
    • Poprawny
    • Prosty w obsłudze i zrozumieniu
    • Po prostu dodaj słoiki do istniejącego projektu JVM (użyj Scala, Java, Groovy lub JRuby)
  4. Przetwarzanie wsadowe (dowolna branża)
    • Integracja wielbłądów do łączenia ze źródłami danych wsadowych
    • Aktorzy dzielą i pokonują obciążenia wsadowe
  5. Centrum komunikacyjne (telekomunikacja, media internetowe, media mobilne)
    • skalowanie w górę, skalowanie w górę, tolerancja błędów / HA
  6. Serwer gry (gry online, zakłady)
    • skalowanie w górę, skalowanie w górę, tolerancja błędów / HA
  7. BI / datamining / crunching ogólnego przeznaczenia
    • skalowanie w górę, skalowanie w górę, tolerancja błędów / HA
  8. wstaw tutaj inne fajne przypadki użycia

10
Rozumiem zalety Futures i STM, ale nie znajduję dobrych przypadków użycia dla aktorów. W przypadku serwera gry lub zakładu bukmacherskiego jaką zaletą jest używanie aktorów w porównaniu z wieloma serwerami aplikacji za modułem równoważenia obciążenia?
Martin Konicek,

8
@ViktorKlang POs! = Kierownik techniczny. Pracują razem, ale mają różne role.
taylorcressy

79

Przykładem tego, jak go wykorzystujemy, będzie kolejka priorytetowa transakcji kartą debetową / kredytową. Mamy ich miliony, a nakład pracy zależy od typu ciągu wejściowego. Jeśli transakcja jest typu SPRAWDŹ, mamy bardzo mało przetwarzania, ale jeśli jest to punkt sprzedaży, jest wiele do zrobienia, takich jak połączenie z metadanymi (kategoria, etykieta, tagi itp.) I świadczenie usług (powiadomienia e-mail / sms, wykrywanie oszustw, niski stan środków itp.). Na podstawie typu danych wejściowych tworzymy klasy o różnych cechach (zwane mixinami) niezbędne do obsługi zadania, a następnie wykonujemy pracę. Wszystkie te zadania trafiają do tej samej kolejki w trybie czasu rzeczywistego z różnych instytucji finansowych. Po wyczyszczeniu dane są wysyłane do różnych magazynów danych w celu utrwalenia, analizy lub przekazane do połączenia przez gniazdo lub do aktora Lift komety. Aktywni aktorzy nieustannie równoważą pracę, abyśmy mogli przetwarzać dane tak szybko, jak to możliwe. Możemy również przyciągać dodatkowe usługi, modele trwałości i dla krytycznych punktów decyzyjnych.

Przekazywanie komunikatu w stylu OTP Erlang przez JVM stanowi świetny system do opracowywania systemów w czasie rzeczywistym na barkach istniejących bibliotek i serwerów aplikacji.

Akka pozwala na przekazywanie wiadomości w tradycyjny sposób ale z prędkością! Daje również narzędzia w ramach do zarządzania ogromną liczbą pul aktorów, zdalnych węzłów i odpornością na uszkodzenia, których potrzebujesz do swojego rozwiązania.


1
Czy można więc powiedzieć, że jest to przypadek (niektórych) żądań z długim opóźnieniem, w których pojedynczy wątek na żądanie nie skalowałby się dobrze?
StaxMan,

7
Myślę, że ważną częścią programowania aktorów jest przepływ wiadomości. Gdy zaczniesz konceptualizować przepływy danych, które nie mają skutków ubocznych, po prostu chcesz, aby jak najwięcej przepływów przypadało na węzeł. To znacznie różni się od obliczeń o wysokiej wydajności, jeśli masz pół-homogeniczne zadania, które nie wysyłają wiadomości i zajmują dużo czasu. Myślę, że implementacja Fibonacciego oparta na aktorach jest bardzo ograniczającym przykładem, ponieważ nie pokazuje, dlaczego należy używać aktorów, ale tylko to, że aktorzy paraliżują taksówkę. Pomyśl o architekturze sterowanej zdarzeniami dla przypadków użycia.
Wade Arnold,

4
Architektura sterowana zdarzeniami to inny sposób myślenia o problemach. Warto przeczytać Erlang OTP w akcji z obsady, jeśli myślisz o kodowaniu w Akce. Erlang OTP ma wpływ na wiele konstruktów w akce, a książka podaje zasady, dlaczego Jonas Boner zbudował akka api tak, jak to zrobił. Akka to duża góra, na której stoisz! Jeśli twoi aktorzy są wytrwali przez zmiany stanu, czy naprawdę potrzebujesz 10 tys. Pisze drugi ciągły
Wade Arnold

8
Wade, jak radzicie sobie z gwarancjami wiadomości? wspominasz: (powiadomienia e-mail / sms, wykrywanie oszustw, niski stan środków itp.). Zakładam, że są one potencjalnie wysyłane do zdalnych aktorów? Jak zapewnić, że te operacje faktycznie się wydarzyły? co się stanie, jeśli węzeł ulegnie awarii podczas przetwarzania powiadomienia o oszustwie? Czy zniknęło na zawsze? Czy masz w końcu spójny system, który go oczyszcza? dzięki!
James

2
Dobre pytanie James. Oczywiste jest, że pasuje do systemu, w którym odpowiedź nie jest pilna. Na przykład możesz przetwarzać rachunki za karty kredytowe; Oblicz; wysłać e-mail itp. Naprawdę zastanawiam się, jak te rzeczy (transakcje) są obsługiwane, gdy potrzebna jest odpowiedź. Na końcu; jeśli wniosek został złożony od zewnętrznego (użytkownika internetu; przedstawiciela call center itp.); on lub ona czeka na odpowiedź. Jak mogę się upewnić, że zadania podrzędne (które są wykonywane asynchronicznie) są wykonywane; w transakcji xa, abym mógł zwrócić odpowiedź?
Kaan Yy

44

Używamy Akka do asynchronicznego przetwarzania wywołań REST - wraz z asynchronicznym serwerem WWW (opartym na Netty) możemy osiągnąć 10-krotną poprawę liczby obsługiwanych użytkowników na węzeł / serwer, w porównaniu do tradycyjnego modelu wątku na żądanie użytkownika.

Powiedz swojemu szefowi, że Twój rachunek za hosting AWS spadnie 10-krotnie i nie ma nic przeciwko! Ciii ... nie mów tego Amazonowi ... :)


3
I zapomniałem wspomnieć, że monadyczna natura przyszłości akka, która prowadzi do znacznie czystszego równoległego kodu, uratowała nam tysiące w utrzymaniu kodu ...
piotrga,

8
Zakładam, że połączenia są o dużym opóźnieniu i niskiej przepustowości? Jak nawiązywanie połączeń z innymi serwerami, czekanie na odpowiedź (proxy)?
StaxMan,

38

Używamy Akki w dużym projekcie Telco (niestety nie mogę ujawnić wielu szczegółów). Aktorzy Akka są wdrażani i uzyskują do nich dostęp zdalny przez aplikację internetową. W ten sposób mamy uproszczony model RPC oparty na protobufferze Google i osiągamy równoległość za pomocą Akka Futures. Do tej pory ten model działał doskonale. Jedna uwaga: korzystamy z Java API.


Czy możesz nam powiedzieć coś więcej? Kontrakty futures Afaik nie mogą być przesyłane przez sieć (serializowane). Czy korzystasz z wielu kontraktów terminowych i kilku aktorów, czy też z mieszanki tych dwóch lub ...? Używasz protobufa do serializacji i wysyłasz jako wiadomość do aktorów?
Aktau

Wygląda na to, że bez Akka można by sobie z tym poradzić równie łatwo.
Erik Kaplun

1
TDC jest firmą Telco w przypadku Fiaddesio.
Roman Kagan,

37

Jeśli podniesiesz poziom serwera czatu na wyższy poziom, otrzymasz odpowiedź.

Akka zapewnia system przesyłania wiadomości podobny do mentalności Erlanga „pozwól mu upaść”.

Tak więc przykłady wymagają różnych poziomów trwałości i niezawodności przesyłania komunikatów:

  • Serwer czatu
  • Warstwa sieci dla MMO
  • Pompa danych finansowych
  • System powiadomień dla iPhone'a / telefonu komórkowego / dowolnej aplikacji
  • Serwer REST
  • Może coś podobnego do WebMachine (zgadnij)

Zaletami Akka są opcje, które zapewnia trwałość, implementacja STM, serwer REST i odporność na awarie.

Nie denerwuj się przykładem serwera czatu, pomyśl o nim jako o pewnej klasie rozwiązania.

Biorąc pod uwagę ich doskonałą dokumentację, wydaje mi się, że luką jest dokładnie to pytanie, przypadki użycia i przykłady. Mając na uwadze, przykłady nie są trywialne.

(Napisane tylko z doświadczeniem oglądania filmów i grania ze źródłem, nic nie zaimplementowałem przy użyciu akka.)


2
Dzięki - nie miałem na myśli, że serwer czatu jest koniecznie zły, po prostu chciałbym uzupełnić przykłady; łatwiej uzyskać lepsze pojęcie o potencjale.
StaxMan,

Ciekawi Cię, jak pasuje tutaj serwer REST? Czy wspominasz o tym w kontekście serwera asynchronicznego w stylu Node.js? Dziękujemy za udostępnienie przykładowych przypadków użycia. Uważam je za przydatne.
software.wikipedia

24

Używamy Akki w kilku projektach w pracy, z których najciekawszy dotyczy napraw powypadkowych pojazdów. Głównie w Wielkiej Brytanii, ale teraz rozszerza się na USA, Azję, Australazję i Europę. Korzystamy z aktorów, aby zapewnić, że informacje o naprawie awarii są przekazywane w czasie rzeczywistym, aby umożliwić bezpieczną i opłacalną naprawę pojazdów.

Pytanie z Akką to tak naprawdę „co nie możesz zrobić z Akką”. Jego zdolność do integracji z potężnymi strukturami, potężna abstrakcja i wszystkie aspekty odporności na uszkodzenia sprawiają, że jest to bardzo wszechstronny zestaw narzędzi.


Jaki aspekt lubisz najbardziej, jeśli musiałbyś wybrać? Istniejąca integracja z innymi platformami, automatyczna odporność na awarie czy coś innego?
StaxMan

6
Z osobistego punktu widzenia najbardziej podoba mi się podniesiony poziom abstrakcji, który Akka przynosi do stołu. Z perspektywy przedsiębiorstwa są to możliwości integracji. Muszę zarabiać na życie, a Akka bardzo ładnie obejmuje interesy i przyjemność :-)
rossputin

Czy mógłbyś wyjaśnić, jak przebiega przepływ wiadomości? Czy użytkownik jest osobą w warsztacie i wprowadza szczegóły dotyczące awarii do formularza http, a następnie przesyła dane do serwera. Czy to tworzy komunikat obsługiwany przez akka? Co zrobić z tą wiadomością? Wyodrębnić wprowadzone informacje, aby wysłać zapytanie do bazy danych, a następnie ustawić w kolejce odpowiedź, aby odesłać ją z powrotem do interfejsu użytkownika?
surfmuggle

24

Możesz użyć Akka do kilku różnych rzeczy.

Pracowałem nad stroną internetową, na której przeprowadziłem migrację stosu technologii do Scali i Akki. Wykorzystaliśmy go do prawie wszystkiego, co wydarzyło się na stronie. Nawet jeśli uważasz, że przykład czatu jest zły, wszystkie są w zasadzie takie same:

  • Aktualizacje na żywo w witrynie (np. Wyświetlenia, polubienia, ...)
  • Wyświetlanie komentarzy użytkowników na żywo
  • Usługi powiadomień
  • Wyszukaj i wszystkie inne rodzaje usług

Zwłaszcza aktualizacje na żywo są łatwe, ponieważ sprowadzają się do tego, co istnieje przykładowy czat. Część poświęcona usługom to kolejny interesujący temat, ponieważ możesz po prostu wybrać zdalnych aktorów, a nawet jeśli aplikacja nie jest klastrowana, możesz z łatwością wdrożyć ją na różnych komputerach.

Używam również Akka do aplikacji autoroutera PCB z myślą o możliwości skalowania z laptopa do centrum danych. Im więcej mocy dasz, tym lepszy będzie wynik. Jest to niezwykle trudne do wdrożenia, jeśli próbujesz użyć zwykłej współbieżności, ponieważ Akka zapewnia również przejrzystość lokalizacji.

Obecnie jako projekt czasu wolnego buduję platformę internetową, używając tylko aktorów. Ponownie korzyściami są skalowalność od jednego komputera do całego klastra maszyn. Poza tym stosowanie podejścia opartego na wiadomościach od samego początku sprawia, że ​​usługa oprogramowania jest zorientowana. Masz te wszystkie miłe komponenty, rozmawiające ze sobą, ale niekoniecznie się znające, żyjące na tej samej maszynie, nawet w tym samym centrum danych.

Odkąd zamknął się Google Reader, zacząłem od czytnika RSS, oczywiście używając Akki. Chodzi mi przede wszystkim o usługi zamknięte. Podsumowując: sam model aktora jest tym, co powinieneś przyjąć w pierwszej kolejności, a Akka jest bardzo niezawodną strukturą pomagającą wdrożyć go z wieloma korzyściami, które otrzymasz po drodze.


Witaj Joe, czy możesz wyjaśnić, w jaki sposób wiadomości są używane do aktualizacji witryny? Czy masz jeden system dla autora treści; tworzy nowy artykuł i trafienia zapisz. Czy tworzy to wiadomość wysyłaną do kilku serwerów, które obsługują ruch przychodzący. Każdy serwer przetwarza komunikat o aktualizacji tak szybko, jak to możliwe. Czy każde nowe żądanie przeglądarki otrzymuje zaktualizowaną wersję strony? Dziękuję
surfmuggle

18

Używamy akka z wtyczką wielbłąda do rozpowszechniania naszych analiz i trendów w przetwarzaniu dla twimpact.com . Musimy przetwarzać od 50 do 1000 wiadomości na sekundę. Oprócz przetwarzania wielowęzłowego za pomocą wielbłąda jest on również wykorzystywany do dystrybucji pracy na jednym procesorze do wielu pracowników w celu uzyskania maksymalnej wydajności. Działa całkiem dobrze, ale wymaga pewnego zrozumienia, jak radzić sobie z zatorami.


czy używasz również odporności na uszkodzenia Akka?
Erik Kaplun

Co powiesz na Spark Streaming, jeśli masz dostęp do klastra Spark?
skjagini 18.09.19

18

Próbowałem swoich sił w Akka (Java API). Próbowałem porównać model współbieżności oparty na aktorach Akki z modelem zwykłej współbieżności Java (klasy java.util.concurrent).

Przypadek użycia to prosta mapa kanoniczna zmniejszająca implementację liczby znaków. Zestaw danych był zbiorem losowo generowanych ciągów (o długości 400 znaków) i obliczał w nich liczbę samogłosek.

W przypadku Akka użyłem BalancedDispatcher (do równoważenia obciążenia między wątkami) i RoundRobinRouter (aby zachować limit na moich aktorów funkcji). W przypadku języka Java zastosowałem prostą technikę łączenia widelca (zaimplementowaną bez algorytmu kradzieży pracy), która rozwidliłaby mapę / ograniczyła wykonanie i połączyła wyniki. Wyniki pośrednie odbywały się w kolejkach blokujących, aby nawet połączenie było jak najbardziej równoległe. Prawdopodobnie, jeśli się nie mylę, to w pewien sposób naśladuje koncepcję skrzynki pocztowej aktorów Akka, którzy odbierają wiadomości.

Obserwacja: Do średnich obciążeń (~ 50000 ciągów wejściowych) wyniki były porównywalne, różniąc się nieznacznie w różnych iteracjach. Ponieważ jednak zwiększyłem obciążenie do ~ 100000, zawiesiłoby się rozwiązanie Java. Skonfigurowałem rozwiązanie Java z 20-30 wątkami w tych warunkach i nie powiodło się we wszystkich iteracjach.

Zwiększenie obciążenia do 1000000 również było fatalne dla Akki. Mogę udostępnić kod każdemu zainteresowanemu, aby uzyskać kontrolę krzyżową.

Wydaje mi się, że Akka skaluje się lepiej niż tradycyjne wielowątkowe rozwiązanie Java. I prawdopodobnie powodem jest magia Scali pod maską.

Jeśli mogę modelować domenę problemową jako przekazywaną przez zdarzenie wiadomość, myślę, że Akka jest dobrym wyborem dla JVM.

Test przeprowadzono na: wersji Java: 1.6 IDE: Eclipse 3.7 Windows Vista 32 bit. 3 GB pamięci RAM Procesor Intel Core i5, taktowanie 2,5 GHz

Pamiętaj, że problematyczna domena zastosowana w teście może być dyskutowana i starałem się być tak uczciwy, na ile pozwalała moja znajomość języka Java :-)


3
„Mogę udostępnić kod każdemu zainteresowanemu, aby uzyskać kontrolę krzyżową”. Chciałbym, jeśli nie masz nic przeciwko.
n1r3

3
Chciałbym również kod, czy możesz opublikować link github?
Gautam

Dziękuję za zainteresowanie. Niestety mam problemy z konfiguracją repozytorium github. Jeśli możesz podać mi swoje e-maile, mogę przesłać pocztą kod źródłowy. I żałuje spóźnionej odpowiedzi!
sutanu dalui

@sutanudalui Czy nadal masz kod, jeśli tak, mogę udostępnić swój e-mail?
Jay

16

Używamy Akka w mówionych systemach dialogowych ( primetalk ). Zarówno wewnętrznie, jak i zewnętrznie. Aby jednocześnie uruchomić wiele kanałów telefonii w jednym węźle klastra, oczywiście konieczne jest posiadanie szkieletu wielowątkowości. Akka działa idealnie. Mamy poprzedni koszmar z współbieżnością Java. A z Akką jest jak huśtawka - po prostu działa. Solidny i niezawodny. 24 * 7, non-stop.

Wewnątrz kanału mamy strumień zdarzeń przetwarzanych równolegle. W szczególności: - długie automatyczne rozpoznawanie mowy - odbywa się z udziałem aktora; - producent wyjścia audio, który miksuje kilka źródeł dźwięku (w tym syntezę mowy); - konwersja tekstu na mowę to osobny zestaw aktorów współdzielony między kanałami; - semantyczne i przetwarzanie wiedzy.

Do wykonywania połączeń złożonego przetwarzania sygnałów używamy SynapseGrid . Ma tę zaletę, że sprawdza DataFlow w czasie kompilacji w złożonych systemach aktorskich.


14

Niedawno zaimplementowałem kanoniczny przykład zmniejszania mapy w Akka: liczba słów. Jest to jeden przypadek zastosowania Akka: lepsza wydajność. Był to raczej eksperyment aktorów JRuby i Akki niż cokolwiek innego, ale pokazuje także, że Akka to nie Scala ani tylko Java: działa na wszystkich językach oprócz JVM.


Czy wiesz, co odpowiada za lepszą wydajność (a także w porównaniu z którą alternatywą)? Czy wynika to z używania JRuby na JVM (w porównaniu z natywnym Ruby), skalowalności z powodu nieblokujących I / O lub czegoś innego?
StaxMan

2
Porównanie, które napisałem, to: Jruby sekwencyjny VS Jruby z aktorami. Dlatego jedyną rzeczą, która może być odpowiedzialna za szybszą realizację, jest udział aktorów. W eksperymentach nie uczestniczyło żadne We / Wy (plik jest ładowany z dysku, ale odbywa się to przed ustawieniem timera testu porównawczego).
Daniel Ribeiro,

I niedawno wdrożony mapa zmniejszyć przykład, jak dobrze, ale to jest po prostu zwykły waniliowy java github.com/chaostheory/jibenakka
chaos
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.