Как 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.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.