Как akka по сравнению с Erlang? [закрыто]

97

Недавно я смотрел на акку, и это довольно впечатляюще. Похоже, в нем есть большинство убийственных функций erlang - прозрачность местоположения, иерархия надзора и многое другое. Есть ли в erlang функции, которых нет в akka?

ржаной
источник
Посмотрите этот фильм об эрланге на практике. Жаль, что о scala youtube.com/watch?v=G0eBDWigORY
ничего не известно

Ответы:

123

Отказ от ответственности: я заказчик для Akka

  • Erlang выполняет копирование при отправке - Akka использует разделяемую память (неизменяемые объекты) для отправки в виртуальную машину
  • Erlang делает сборку мусора для каждого процесса - Akka использует сборщики мусора JVM
  • В Erlang есть OTP - Akka интегрируется со всей экосистемой Java (Apache Camel, JAX-RS и т. Д.)
  • Erlang выполняет планирование процессов за вас - Akka позволяет использовать множество различных диспетчеров с бесконечными возможностями настройки.
  • Erlang выполняет перезагрузку горячего кода - Akka может его поддерживать, но он менее гибкий из-за загрузки классов JVM

Это те, что у меня в голове.

С другой стороны, использование Akka означает, что вы можете использовать Scala, Java, Groovy или JRuby для написания своих приложений.

Виктор Кланг
источник
39
Объекты Erlang также неизменяемы, и модель параллелизма не требует копирования при отправке в пределах одного узла. BEAM для больших объектов отправляет ссылку. Источник: этот ТАК ответ @rvirdig .
FooF
26
Erlang делает копирование при отправке, чтобы сделать сборщик мусора более эффективным - он может работать в зависимости от процесса. Вот почему в приложениях Erlang нет огромных пауз сборщика мусора, в отличие от приложений JVM / Akka.
andreypopp
4
Что ж, Андрей, это зависит от того, какую JVM / GC вы используете. azulsystems.com/products/zing/whatisit
Виктор Кланг
4
В Erlang есть число сокращения для каждого процесса, даже если вы находитесь в загруженном тяжелом вычислительном цикле, Erlang VM может приостановить процесс и позволить другим голодным процессам занять больше циклов ЦП. Это очень важная функция, которую JVM не предоставляет.
Daniel
6
@MaX Erlang часто в 5 раз медленнее, чем Java, из-за отсутствия поддержки JIT. Но в Erlang нет паузы для сборки мусора, он предназначен для параллелизма и телекоммуникационных приложений 7 * 24, Erlang больше заботится о справедливости процессов, предотвращении зависания и тупика, он не предназначен для пропускной способности, как JVM. Итак, это действительно апельсин и яблоко.
Даниэль
74

В Erlang процессы гарантированно переключаются примерно каждые 1000 сокращений. В такой наивной структуре, как Scala / Akka, агент владеет планировщиком до тех пор, пока он не закончит работу с получением. Мат. Игра закончена. Hasta la vista :) Народ, не тратьте время на псевдотехников. Я был шокирован тем, что ребята сравнивают Scala с Erlang.

Также есть много других так называемых «убийственных функций», но вот мой совет: не думайте в терминах функций, подумайте об идиомах, которые позволяют использовать конкретный язык. Scala крадет «лучшие функции», Erlang позволяет / реализует вас с помощью правильных идиом для надежного построения систем с помощью языка высокого уровня, основанного на этих правильных идиомах. Когда вы изучаете Erlang, вы перестраиваете свой разум, свой образ мыслей о распределенной надежной системе, Erlang учит вас и обновляет вас. Scala - это просто еще один императивный (о, извините, многопарадигмальный, забавный) язык, который пытается украсть хорошие возможности из других языков.

вяче
источник
9
Способ Erlang сделать весь ввод-вывод неявно асинхронным очень элегантен. Асинхронный ввод-вывод может выполняться с использованием API-интерфейсов NIO в Scala, что для меня не похоже на контрольный ответ, а менее элегантное решение.
HRJ
7
о чем ты, черт возьми ?! как обработка 1000 прямых задач лучше, чем планирование кругового анализа или даже планирование наименьшего почтового ящика !!
FUD
8
@vjache - согласен. Мои многие годы работы программистом на Java научили меня, что в какой-то момент вам придется исследовать слой под вами. Scala / Akka кажется просто еще одним слоем поверх множества других слоев (например, nio, netty и т. Д.), Все из которых вам нужно будет понять в какой-то момент. Несмотря на то, что я только начал работать с Erlang, похоже, что у меня будет меньше слоев, которые мне нужно понять, чтобы выполнить свою работу. Распределенное программирование на Erlang кажется гораздо более легким по сравнению с Scala / Akka, вероятно, так же, как python был более легкой альтернативой java для веб-приложений.
Крис Сноу
@FUD: может он имел в виду 1000 инструкций Erlang? он не мог иметь в виду 1000 сообщений ...
Эрик Каплун
2
@ErikAllik Он имел ввиду 1000 "сокращений". Подумайте о сокращении как о токене для выполнения небольшого количества кода (это не так, но он выполняет свою работу по объяснению ...). После 1000 сокращений планировщик переключается на другой процесс. Больше информации на erlang.org/pipermail/erlang-questions/2001-April/003132.html
Aegis
40

Об изоляции процесса почти никто не упоминает. Без гарантий «ваш поток не может связываться с моим мусором» распределенные системы гораздо труднее рассуждать. (Они уже достаточно сложны с процессами Erlang.)

AFAIK (что недалеко, учитывая мой ограниченный непосредственный опыт работы с JVM), только Erlang действительно получает изоляцию процесса «прямо» на JVM. Г-н Google может дать несколько подсказок о том, где найти исследования Fox и Candea (?) По исследовательским системам, использующим технику "микроперезагрузки" ("вычисления, ориентированные на восстановление"). Разработчик на Erlang читает это исследование и говорит несколько вещей:

  1. Добро пожаловать в клуб, почему ты так долго?
  2. Однако JVM ужасно, ужасно затрудняет присоединение. :-)
Скотт Листиг Фритчи
источник
Изоляция процесса действительно очень хороша. Однако даже Erlang не застрахован от неудач NIF.
Виктор Кланг
14

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

Но давайте перевернем ваш вопрос: что есть в akka, чего нет в Erlang? Конечно, вы можете добавить к Java десятки расширений и библиотек (scala, akka, spring, osgi, ...), чтобы попытаться приблизиться к Erlang. Но в чем суть? В общем, все эти расширения намного сложнее, чем изучение простого языка Erlang, который уже более двух десятилетий доказал, что может выполнять свою работу, предлагая максимальную масштабируемость с нулевым временем простоя.

Румпельстилц
источник
30
IMO, Scala - намного лучший язык на уровне синтаксиса, чем Erlang. В нем есть объекты, черты, правильные пространства имен, надлежащая безопасность типов, нет уродливого синтаксиса записи и т. Д. Сообщество больше, я могу использовать все доступные инструменты Java, и он просто кажется более отполированным.
ryeguy
15
@ryeguy: "лучший язык на уровне синтаксиса" ... хм, определите "лучше" для "синтаксиса". Когда я сравниваю языки, синтаксис - самый несущественный фактор (потому что это только вопрос вкуса или того, что вы используете).
Peer Stritzinger
4
@ryeguy Другая семантика, другой синтаксис.
rvirding
3
замена горячего кода становится проблемой, если вам нужно поддерживать состояние между разными версиями кода, в конце концов, проще завершить процесс и перенести состояние при запуске
ОлегЫч
4
@ryeguy Синтаксис языка программирования почти не имеет значения; важна его семантика. Erlang - это функциональный PL, поэтому, конечно, у него нет объектов. Черты, безопасность типов и т. Д. Обусловлены тем, что Scala - это строго типизированный язык, а Erlang - динамически типизированный; это выбор дизайна. Тем не менее, я предлагаю вам взглянуть на Elixir, если вы хотите, чтобы преимущества Erlang выглядели более современно;)
Aegis
5

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

Кодстарк
источник