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

Słyszałem wiele zachwytów na temat Akka Framework (Java/Scala service platform), ale do tej pory nie widziałem wielu rzeczywistych przypadków użycia, dla których byłoby to dobre. Więc byłbym zainteresowany słuchaniem o rzeczach, które deweloperzy z powodzeniem wykorzystali.

Tylko jedno ograniczenie: proszę nie uwzględniać przypadku pisania serwera czatu. (dlaczego? ponieważ jest to nadużywane jako przykład dla wielu podobnych rzeczy)

Author: Robert Harvey, 2010-12-20

12 answers

Do tej pory z powodzeniem wykorzystałem go w dwóch realnych projektach. oba znajdują się w polu informacji o ruchu w czasie zbliżonym do rzeczywistego (ruch jak w samochodach na autostradach), rozproszone po kilku węzłach, integrujące wiadomości między kilkoma stronami, niezawodne systemy backendowe. Nie mogę jeszcze podać szczegółów na temat klientów, kiedy dostanę OK, może można go dodać jako odniesienie.

Akka naprawdę poradziła sobie z tymi projektami, mimo że zaczęliśmy od wersji 0.7. (jesteśmy przy okazji używając Scali)

Jedną z dużych zalet jest łatwość, z jaką można skomponować system z aktorów i wiadomości prawie bez kotła, skaluje się bardzo dobrze bez wszystkich złożoności gwintowania ręcznego i otrzymujesz asynchroniczną wiadomość przechodzącą między obiektami prawie za darmo.

Jest bardzo dobry w modelowaniu dowolnego rodzaju asynchronicznej obsługi wiadomości. Wolałbym pisać każdy rodzaj (web) system usług w tym stylu niż jakikolwiek inny styl. (Mieć próbowałeś kiedyś napisać asynchroniczną usługę internetową (po stronie serwera) z JAX-WS? 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 za pomocą metod synchronicznych, a ten jeden komponent jest blokowany na czymś. Jest bardzo stabilny, a rozwiązanie let-it-crash + supervisor na awarię naprawdę działa dobrze. Wszystko jest łatwe do skonfigurowania programowo i nie jest trudne do testu jednostkowego.

Wtedy są doskonałe moduły dodatkowe. Moduł Camel naprawdę dobrze podłącza się do Akka i umożliwia tak łatwe tworzenie usług asynchronicznych z konfigurowalnymi punktami końcowymi.

Jestem bardzo zadowolony z frameworku i staje się on standardem defacto dla połączonych systemów, które budujemy.

 305
Author: Raymond Roestenburg,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-12-20 22:17:33

Zastrzeżenie: jestem po Dla Akki

Oprócz oferowania współbieżności smorgasbord, który jest znacznie prostszy do rozumowania i poprawnego (aktorzy, agenci, współbieżność dataflow) 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 (online gry, Finanse, statystyka, zakłady bukmacherskie, social media, Telekomunikacja, ...)
    • skaluj w górę, skaluj w dół, tolerancja błędów / HA
  2. serwis backend (Dowolna branża, dowolna aplikacja)
    • service REST, SOAP, cometd itp
    • działać jako hub wiadomości / warstwa integracji
    • skaluj w górę, skaluj w dół, tolerancja błędów / HA
  3. snap-in współbieżność/równoległość ( dowolna aplikacja )
    • poprawne
    • prosty w obsłudze i zrozumieniu
    • po prostu dodaj słoiki do istniejącego projektu JVM (użyj Scali, Java, Groovy lub JRuby)
  4. przetwarzanie wsadowe (Dowolna branża )
    • Integracja wielbłąda z łączenie ze źródłami danych wsadowych
    • aktorzy dzielą i podbijają obciążenia wsadowe
  5. Communications hub ( telekomunikacja, media internetowe, media mobilne )
    • skaluj w górę, skaluj w dół, tolerancja błędów / HA
  6. Serwer gier (gry online, zakłady)
  • skaluj w górę, skaluj w dół, tolerancja błędów / HA
  • BI/datamining / chrupanie ogólnego przeznaczenia
    • skaluj w górę, skaluj w dół, tolerancja błędów / HA
  • Wstaw inne ładne przypadki użycia tutaj
  •  214
    Author: Viktor Klang,
    Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
    2010-12-20 22:41:20

    Przykład tego, jak go używamy, byłby w kolejce priorytetowych transakcji kartami debetowymi/kredytowymi. Mamy ich miliony, a nakład pracy zależy od typu input string. Jeśli transakcja jest typu CHECK mamy bardzo mało przetwarzania, ale jeśli jest to punkt sprzedaży, to jest wiele do zrobienia, takich jak Scalanie z metadanymi (Kategoria, Etykieta, tagi itp.) i świadczenie usług (powiadomienia e-mail/sms, wykrywanie oszustw, niskie saldo środków itp.). Na podstawie typu wejściowego tworzymy klasy różne cechy (zwane mieszańcami) niezbędne do obsługi zadania, a następnie wykonywania pracy. Wszystkie te zadania trafiają do tej samej kolejki w trybie czasu rzeczywistego z różnych instytucji finansowych. Po oczyszczeniu danych są one wysyłane do różnych magazynów danych w celu zachowania trwałości, analizy lub wypychane do połączenia z gniazdem lub do podnoszenia aktora comet. Pracujący aktorzy stale równoważą obciążenie pracą, dzięki czemu możemy przetwarzać dane tak szybko, jak to możliwe. Możemy również skorzystać z dodatkowych usług, wytrwałości modele, oraz stm dla krytycznych punktów decyzyjnych.

    Komunikat w stylu Erlang OTP przekazujący JVM stanowi świetny system do tworzenia systemów czasu rzeczywistego na barkach istniejących bibliotek i serwerów aplikacji.

    Akka pozwala na przekazywanie wiadomości tak, jak w tradycyjnym esb ale z prędkością! Zapewnia również narzędzia w ramach zarządzania ogromną liczbą pul aktorów, zdalnych węzłów i tolerancji błędów, których potrzebujesz do rozwiązania.

     76
    Author: Wade Arnold,
    Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
    2016-03-31 23:02:51

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

    Powiedz swojemu szefowi, że rachunek za hosting AWS spadnie o współczynnik 10 i nie ma się nad czym zastanawiać! Shh... nie mów tego Amazonowi... :)

     41
    Author: piotrga,
    Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
    2012-11-17 15:10:51

    Jeśli chcesz podnieść serwer czatu na wyższy poziom, otrzymasz odpowiedź.

    Akka zapewnia system wiadomości, który jest podobny do mentalności Erlanga "let it crash".

    Więc przykładami są rzeczy, które wymagają różnych poziomów trwałości i niezawodności wiadomości:

    • serwer czatu
    • Warstwa Sieciowa dla MMO
    • dane finansowe
    • system powiadomień dla iPhone/mobile / whatever app
    • REST Server
    • może coś podobnego do WebMachine (Zgadnij)

    Miłą rzeczą w Akce są wybory, które daje za wytrwałość, to implementacja STM, serwer REST i tolerancja błędów.

    Nie denerwuj się przykładem serwera czatu, pomyśl o nim jako o przykładzie pewnej klasy rozwiązań.

    Z całą ich doskonałą dokumentacją, czuję się jak Luka jest to dokładne pytanie, przypadki użycia i przykłady. Pamiętając przykłady są nietrywialne.

    (pisane tylko z doświadczeniem oglądania filmów a bawiąc się źródłem, nie zaimplementowałem nic używając Akki.)

     36
    Author: tylerweir,
    Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
    2010-12-20 21:54:08

    Używamy Akki w dużym projekcie Telco (niestety nie mogę zdradzić wielu szczegółów). Akka actors są wdrażane i dostępne zdalnie za pomocą aplikacji internetowej. W ten sposób mamy uproszczony model RPC oparty na Google protobuffer i osiągamy równoległość za pomocą Akka Futures. Do tej pory ten model działał genialnie. Jedna uwaga: używamy Java API.

     36
    Author: Luciano Fiandesio,
    Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
    2010-12-21 12:34:13

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

    Pytanie z Akką jest naprawdę bardziej "czego nie możesz zrobić z Akką". Jego zdolność do integracji z potężnymi frameworkami, jego potężna abstrakcja I wszystkie aspekty tolerancji błędów sprawiają, że jest to bardzo wszechstronny zestaw narzędzi.

     23
    Author: rossputin,
    Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
    2010-12-21 15:55:13

    Możesz używać Akki do kilku różnych rzeczy.

    Pracowałem nad stroną internetową, gdzie przeniosłem stos technologii do Scali i Akki. Użyliśmy go do prawie wszystkiego, co wydarzyło się na stronie internetowej. Chociaż możesz pomyśleć, że przykład czatu jest zły, wszystkie są w zasadzie takie same:

    • aktualizacje na żywo na stronie (np. widoki, Polubienia,...)
    • Pokazywanie komentarzy użytkowników na żywo
    • usługi powiadamiania
    • Szukaj i wszystkie inne rodzaje Usługi

    Szczególnie aktualizacje na żywo są łatwe, ponieważ sprowadzają się do tego, co jest przykładem czatu. Część usługi to kolejny interesujący temat, ponieważ możesz po prostu wybrać użycie aktorów zdalnych, a nawet jeśli Twoja aplikacja nie jest skupiona, możesz z łatwością wdrożyć ją na różnych komputerach.

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

    Obecnie jako projekt wolny czas, buduję Framework internetowy używając tylko aktorów. Ponownie korzyści to skalowalność od jednej maszyny do całego klastra maszyn. Poza tym Korzystanie z podejścia opartego na komunikatach sprawia, że usługa oprogramowania jest zorientowana od samego początku. Masz te wszystkie fajne elementy, rozmawiasz ze sobą, ale niekoniecznie się znasz, życie na tej samej maszynie, nawet nie w tym samym centrum danych.

    A od czasu wyłączenia Google Reader zacząłem od czytnika RSS, używając oczywiście Akki. Dla mnie chodzi o usługi zamknięte. Podsumowując: sam model aktora jest tym, co powinieneś najpierw przyjąć, a Akka jest bardzo wiarygodnym frameworkiem pomagającym ci go wdrożyć z wieloma korzyściami, które otrzymasz po drodze.

     23
    Author: Joa Ebert,
    Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
    2013-08-09 12:00:32

    Używamy akka z wtyczką camel do dystrybucji naszej analizy i przetwarzania trendów dla twimpact.com . musimy przetwarzać od 50 do 1000 wiadomości na sekundę. Oprócz przetwarzania wielowątkowego z camel jest on również używany 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.

     18
    Author: Matthias L. Jugel,
    Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
    2010-12-21 13:10:04

    Próbowałem swoich rąk na Akka (Java api). Próbowałem porównać model współbieżności oparty na akce z modelem współbieżności Javy (java.util.współbieżne klasy).

    Przykładem użycia była prosta kanoniczna Mapa zmniejszająca liczbę znaków. Zbiór danych był zbiorem losowo generowanych ciągów (400 znaków długości) i obliczał liczbę samogłosek w nich.

    Do Akki użyłem BalancedDispatcher (do równoważenia obciążenia między wątkami) i RoundRobinRouter(aby utrzymać limit mojej funkcji). W Javie zastosowałem technikę simple Fork join (zaimplementowaną bez algorytmu kradzieży pracy), która dzieliła mapowanie / redukcję wykonań i łączyła wyniki. Wyniki pośrednie odbywały się w kolejkach blokujących, aby nawet łączenie było jak najbardziej równoległe. Prawdopodobnie, jeśli się nie mylę, naśladowałoby to w jakiś sposób pojęcie" skrzynki pocztowej " aktorów Akki, gdzie otrzymują wiadomości.

    Obserwacja: Do średnich obciążeń (~50000 wejść strunowych) wyniki były porównywalne, różniły się nieznacznie w różnych iteracjach. Jednak jak zwiększyłem moje obciążenie do ~100000 to zawiesiłoby rozwiązanie Java. Skonfigurowałem rozwiązanie Java z 20-30 wątkami pod tym warunkiem i nie powiodło się we wszystkich iteracjach.

    Zwiększenie obciążenia do 1000000, było również śmiertelne dla Akki. Mogę podzielić się kodem z każdym zainteresowanym, aby sprawdzić krzyż.

    Więc dla mnie wydaje się, że Akka skaluje się lepiej niż tradycyjne rozwiązanie wielowątkowe Java. Oraz prawdopodobnie powodem jest magia pod maską Scali.

    Jeśli Mogę modelować domenę problemu jako przekazującą komunikat sterowany zdarzeniami, myślę, że Akka jest dobrym wyborem dla JVM.

    Badanie przeprowadzone na: Wersja Java:1.6 IDE: Eclipse 3.7 Windows Vista 32 bit. 3GB PAMIĘCI ram. Procesor Intel Core i5, taktowanie zegara 2,5 GHz

    Proszę zauważyć, że problem domeny użytej do testu można dyskutować i starałem się być tak sprawiedliwy, jak moja wiedza Java pozwala: -)

     17
    Author: sutanu dalui,
    Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
    2012-06-21 20:37:53

    Używamy Akka w systemach dialogowych mówionych (primetalk ). Zarówno wewnętrznie, jak i zewnętrznie. Aby jednocześnie uruchomić wiele kanałów telefonicznych na jednym węźle klastra, oczywiście konieczne jest posiadanie wielowątkowego frameworka. Akka działa idealnie. Mamy poprzedni koszmar z Java-concurrency. A Z Akką jest jak huśtawka - po prostu działa. Solidne i niezawodne. 24*7, non-stop.

    Wewnątrz kanału mamy strumień zdarzeń w czasie rzeczywistym, które są przetwarzane równolegle. W szczególności: - automatyczne rozpoznawanie mowy-odbywa się za pomocą aktora; - producent wyjścia audio, który miksuje kilka źródeł audio (w tym syntezowaną mowę); - Konwersja tekstu na mowę to oddzielny zestaw aktorów współdzielonych między kanałami; - przetwarzanie semantyczne i wiedzy.

    Do wykonywania połączeń złożonych przetwarzania sygnału używamySynapseGrid . Ma tę zaletę, że sprawdza w czasie kompilacji przepływ danych w złożonych systemach aktora.

     16
    Author: Arseniy Zhizhelev,
    Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
    2013-08-09 07:36:21

    Ostatnio zaimplementowałem przykład canonical map-reduce w Akka: Word count. Jest to więc jeden przypadek użycia Akki: lepsza wydajność. To był bardziej eksperyment JRuby ' ego i aktorów Akki niż cokolwiek innego, ale pokazuje również, że Akka nie jest tylko Scala lub Java: działa na wszystkich językach na szczycie JVM.

     14
    Author: Daniel Ribeiro,
    Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
    2010-12-21 12:48:01