Як акка порівнюється з Ерланг? [зачинено]


97

Я дивився на akka нещодавно, і це досить вражаюче. Схоже, він має більшість вбивчих особливостей ерлангу - прозорість розташування, ієрархії нагляду тощо. Чи є якісь функції erlang, яких немає у akka?


Подивіться цей фільм про ерланг на практиці. Шкода, що про Scala немає нічого про youtube.com/watch?v=G0eBDWigORY
mhstnsc

Відповіді:


123

Відмова: Я - ОП для Акки

  • Ерланг виконує копіювання при відправці - Акка використовує спільну пам'ять (незмінні об'єкти) для передачі в VM
  • Ерланг робить GC за процесом - Akka використовує GV JVM
  • Erlang має OTP - Akka інтегрується з усією екосистемою Java (Apache Camel, JAX-RS тощо)
  • Erlang робить для вас планування процесу - Akka дозволяє використовувати безліч різних диспетчерів з нескінченними можливостями конфігурації
  • Ерланг виконує перезавантаження гарячого коду - Akka може його підтримувати, але він менш гнучкий через завантаження JVM

Це ті, хто зверху моєї голови.

З іншого боку, використання Akka означає, що ви можете використовувати Scala, Java, Groovy або JRuby для написання своїх додатків.


39
Об'єкти Erlang також непорушні, і модель одночасності не вимагає копіювання-надсилання в одному вузлі. BEAM для великих об'єктів посилає посилання. Джерело: ця SO відповідь @rvirdig .
FooF

26
Erlang робить копіювання-надсилання для підвищення ефективності роботи програми GC - вона може працювати в рамках кожного процесу. Ось чому в додатках Erlang немає великих пауз ГК на відміну від програм JVM / Akka.
andreypopp

4
Ну, Андрій, такий тип залежить від того, який JVM / GC ти використовуєш. azulsystems.com/products/zing/whatisit
Віктор Кланг

4
Erlang має число скорочень для кожного процесу, навіть якщо ви зайняті важким циклом обчислень, Erlang VM може призупинити процес і дозволити іншим голодним процесам приймати більше циклів процесора. Це дуже важлива функція, яку JVM не надає.
Даніель

6
@MaX Erlang часто в 5 разів повільніший, ніж Java, через відсутність підтримки JIT. Але в Erlang немає паузи GC, він розроблений для одночасності та 7 * 24 телекомунікаційних програм. Ерланг більше ставиться до справедливості процесу, уникає голоду та тупику, він не розроблений для пропускної здатності, як JVM. Отже, це справді апельсин і яблуко.
Даніель

74

У процесах Ерланг гарантовано перемикаються приблизно кожні 1000 скорочень. У таких наївних рамках, як агент Scala / Akka, належить планувальник, поки він не закінчить роботу над отриманням. Мат. Кінець гри. Hasta la vista :) Люди, не витрачайте час на псевдотехнику. Я шокую, що хлопці тут порівнюють Скалу з Ерланг.

Також є багато інших так званих "вбивчих рис", але ось моя порада, не думайте з точки зору особливостей, подумайте про ідіоми, які дозволяють використовувати певну мову. Скала краде "найкращі функції", Ерланг дозволяє / реалізовує вас з правильними ідіомами, щоб надійно будувати системи, з мовою високого рівня, що керується цими правильними ідіомами. Коли ви дізнаєтесь про Ерланг, ви відновлюєте свій розум, свій спосіб мислення про розподілену надійну систему, Ерланг навчає вас і вдосконалює вас. Скала - це ще одна необхідна (ох, вибачте, багатопарадигмальне, смішне слово) мова, яка намагається вкрасти хороші риси з інших мов.


9
Ерланг-спосіб зробити всі IO неявно асинхронними дуже елегантний. Async IO можна зробити за допомогою API NIO у Scala, який не схожий на мене, а не менш елегантне рішення.
HRJ

7
про що, біса, ти говориш ?! як обробка 1000 прямих завдань краща, ніж планування кругового рубіну, або навіть поблизу найменшого планування поштової скриньки !!
FUD

8
@vjache - я згоден. Мої багато років як програміст java навчив мене, що вам в якийсь момент доведеться досліджувати шар під вами. Скала / Акка, здається, є лише ще одним шаром поверх багатьох інших шарів (наприклад, nio, netty тощо), які вам потрібно буде зрозуміти в якийсь момент. Незважаючи на те, що я тільки почав працювати з Erlang, схоже, у мене буде менше шарів, які мені потрібно зрозуміти, щоб виконати роботу. Розподілене програмування в Ерланге відчуває набагато легшу вагу для Scala / Akka, ймовірно, аналогічно тому, що python був легшою альтернативою Java для веб-додатків.
Chris Snow

@FUD: можливо, він мав на увазі 1000 інструкцій про Ерланг? він не міг означати 1000 повідомлень ...
Ерік Каплун

2
@ErikAllik Він мав на увазі 1000 "скорочень". Подумайте про скорочення як маркер для виконання трохи коду (це не так, але це робить роботу для пояснення ...). Після 1000 скорочень планувальник переходить на інший процес. Більше інформації на erlang.org/pipermail/erlang-questions/2001-April/003132.html
Егіда

40

Майже ніхто не згадує про ізоляцію процесу. Без гарантій "ваш потік не може зіпсувати моє сміття", розподіленим системам набагато складніше міркувати. (Вони вже досить складно з процесами Erlang.)

AFAIK (що недалеко, зважаючи на мій обмежений безпосередній досвід роботи з JVM), лише Ерланг насправді отримує процес "ізоляції" на СВМ. Містер Google може дати декілька підказок щодо того, де знайти дослідження Фокса та Кандеї (?) На дослідницьких системах, які використовують техніку "мікрозавантаження" ("обчисленні, орієнтовані на відновлення"). Розробник Erlang читає це дослідження і говорить кілька речей:

  1. Ласкаво просимо в клуб, що у вас так довго зайняло?
  2. Хоча JVM робить це жахливо, дуже важко приєднатися, хоча. :-)

Ізоляція процесу справді надзвичайно приємна. Однак навіть Ерланг не застрахований від NIF, який зіпсувався.
Віктор Кланг

14

Для мене гаряча заміна коду в цілому кластері Erlang без простоїв (наприклад make:all([netload]:) є однією з особливостей вбивці Erlang.

Але давайте повернемо ваше запитання: що в Акка є, чого у Ерланга немає? Звичайно, ви можете додати десятки розширень і бібліотек (scala, akka, spring, osgi, ...) на Java, щоб спробувати наблизитися до Erlang. Але де справа? Підсумовуючи всі ці розширення набагато складніше, ніж вивчення простої мови Erlang, яка вже протягом двох десятиліть доводить, що вона може виконувати роботу, пропонуючи максимальну масштабованість з нульовим простоєм.


30
ІМО, Scala набагато краща мова на рівні синтаксису, ніж Erlang. У ньому є об'єкти, риси, належні простори імен, належна безпека типу, відсутність некрасивого синтаксису запису тощо. Спільнота більша, я можу використовувати всі доступні інструменти Java, і вона просто відчуває себе більш відполірованою.
ryeguy

15
@ryeguy: "краща мова на рівні синтаксису" ... хм, визначте "краще" для "синтаксису". Коли я порівнюю синтаксис мов, це найважливіший фактор (адже це лише питання смаку чи того, чим ви користуєтесь).
Peer Stritzinger

4
@ryeguy Різна семантика, різний синтаксис.
rvirding

3
заміна гарячого коду стає болем, якщо вам потрібно підтримувати стан між різними версіями коду, врешті-решт, легше вимкнути процес та перейти у стан при запуску
OlegYch

4
@ryeguy Синтаксис мови програмування майже не має значення; важлива його семантика. Erlang є функціональним PL, тому, звичайно, він не має об'єктів. Риси, безпека типу тощо обумовлені тим, що Scala є сильно набраною мовою, тоді як Erlang динамічно набирається; це вибір дизайну. Тим не менше, я б запросив вас поглянути на Elixir, якщо ви хочете отримати переваги Ерланга з більш сучасним відчуттям;)
Егіда,

5

Ймовірно, Erlang краще для більших розподілених систем (слідуючи відповіді vjache), але для звичайного сервера, коли ви просто хочете використовувати всю потужність декількох процесорів, тоді Akka є хорошим вибором - забезпечує хорошу абстракцію, продуктивність та інтеграцію з екосистемою Java.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.