Ostatnio oglądałem akka i robi wrażenie. Wygląda na to, że ma większość zabójczych cech erlang - przejrzystość lokalizacji, hierarchie nadzoru i nie tylko. Czy są jakieś cechy Erlanga, których Akka nie ma?
Odpowiedzi:
Zastrzeżenie: jestem PO dla Akka
To te z czubka mojej głowy.
Z drugiej strony, używanie Akki oznacza, że do pisania aplikacji możesz używać Scali, Java, Groovy lub JRuby.
W procesach Erlang gwarantuje się przełączanie mniej więcej co 1000 redukcji. W tak naiwnym frameworku jak Scala / Akka agent jest właścicielem harmonogramu, dopóki nie zakończy pracy w odbiorze. Szach mat. Koniec gry. Hasta la vista :) Ludzie, nie traćcie czasu na pseudotechnologię. Zszokowałem, że faceci tutaj porównują Scalę z Erlangiem.
Jest też wiele innych tak zwanych „zabójczych funkcji”, ale oto moja rada, nie myśl w kategoriach funkcji, myśl o idiomach, które umożliwiają dany język. Scala kradnie „najlepsze funkcje”, Erlang umożliwia / implementuje odpowiednie idiomy, aby niezawodnie budować systemy, używając języka wysokiego poziomu, który jest oparty na tych właściwych idiomach. Kiedy uczysz się Erlang, odbudowujesz swój umysł, swój sposób myślenia o niezawodnym systemie rozproszonym, Erlang uczy Cię i ulepsza. Scala to kolejny imperatywny (och, przepraszam, wieloparadygmatyczne, zabawne słowo) język, który próbuje ukraść dobre cechy innym językom.
Prawie nikt nie wspomina o izolacji procesu. Bez gwarancji, że "twój wątek nie może zepsuć moich śmieci", systemy rozproszone są znacznie trudniejsze do rozważenia. (Są już wystarczająco trudne z procesami Erlanga).
AFAIK (co nie jest daleko, biorąc pod uwagę moje ograniczone bezpośrednie doświadczenie z JVM), tylko Erlang faktycznie uzyskuje „właściwą” izolację procesów w JVM. Pan Google może dać kilka wskazówek, gdzie szukać badań Foxa i Candei (?) Na temat systemów badawczych wykorzystujących technikę „mikro-ponownego uruchomienia” („przetwarzanie zorientowane na odzyskiwanie”). Programista Erlang czyta te badania i mówi kilka rzeczy:
Dla mnie podmiana gorącego kodu w całym klastrze Erlang bez przestojów (na przykład make:all([netload]
:) jest jedną z zabójczych funkcji Erlang.
Ale odwróćmy pytanie: co ma akka, czego nie ma Erlang? Oczywiście możesz dodać dziesiątki rozszerzeń i bibliotek (scala, akka, spring, osgi, ...) do Javy, aby spróbować zbliżyć się do Erlanga. Ale o co chodzi? Podsumowując, wszystkie te rozszerzenia są znacznie bardziej złożone niż nauka prostego języka Erlang, który od ponad dwóch dekad udowadnia, że może wykonać swoją pracę, oferując najwyższą skalowalność bez przestojów.
Prawdopodobnie Erlang jest lepszy dla większych systemów rozproszonych (zgodnie z odpowiedzią vjache), ale dla normalnego serwera, gdy chcesz po prostu wykorzystać pełną moc wielu procesorów, Akka jest dobrym wyborem - zapewnia dobrą abstrakcję, wydajność i integrację z ekosystemem Java.