Как акка сравнивается с Эрлангом? [закрытый]


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

5 93

5 ответов:

отказ от ответственности: я ПО для Акка

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

Это те, что с верхней части моей головы.

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

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

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

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

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

  1. Добро пожаловать в клуб, что вы так долго?
  2. JVM делает это ужасно, ужасно трудно присоединиться, хотя. : -)

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

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

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