Недавно я смотрел на акку, и это довольно впечатляюще. Похоже, в нем есть большинство убийственных функций erlang - прозрачность местоположения, иерархия надзора и многое другое. Есть ли в erlang функции, которых нет в akka?
Недавно я смотрел на акку, и это довольно впечатляюще. Похоже, в нем есть большинство убийственных функций erlang - прозрачность местоположения, иерархия надзора и многое другое. Есть ли в erlang функции, которых нет в akka?
Ответы:
Отказ от ответственности: я заказчик для Akka
Это те, что у меня в голове.
С другой стороны, использование Akka означает, что вы можете использовать Scala, Java, Groovy или JRuby для написания своих приложений.
В Erlang процессы гарантированно переключаются примерно каждые 1000 сокращений. В такой наивной структуре, как Scala / Akka, агент владеет планировщиком до тех пор, пока он не закончит работу с получением. Мат. Игра закончена. Hasta la vista :) Народ, не тратьте время на псевдотехников. Я был шокирован тем, что ребята сравнивают Scala с Erlang.
Также есть много других так называемых «убийственных функций», но вот мой совет: не думайте в терминах функций, подумайте об идиомах, которые позволяют использовать конкретный язык. Scala крадет «лучшие функции», Erlang позволяет / реализует вас с помощью правильных идиом для надежного построения систем с помощью языка высокого уровня, основанного на этих правильных идиомах. Когда вы изучаете Erlang, вы перестраиваете свой разум, свой образ мыслей о распределенной надежной системе, Erlang учит вас и обновляет вас. Scala - это просто еще один императивный (о, извините, многопарадигмальный, забавный) язык, который пытается украсть хорошие возможности из других языков.
Об изоляции процесса почти никто не упоминает. Без гарантий «ваш поток не может связываться с моим мусором» распределенные системы гораздо труднее рассуждать. (Они уже достаточно сложны с процессами Erlang.)
AFAIK (что недалеко, учитывая мой ограниченный непосредственный опыт работы с JVM), только Erlang действительно получает изоляцию процесса «прямо» на JVM. Г-н Google может дать несколько подсказок о том, где найти исследования Fox и Candea (?) По исследовательским системам, использующим технику "микроперезагрузки" ("вычисления, ориентированные на восстановление"). Разработчик на Erlang читает это исследование и говорит несколько вещей:
Для меня замена горячего кода во всем кластере Erlang без простоев (например:) make:all([netload]
является одной из функций-убийц Erlang.
Но давайте перевернем ваш вопрос: что есть в akka, чего нет в Erlang? Конечно, вы можете добавить к Java десятки расширений и библиотек (scala, akka, spring, osgi, ...), чтобы попытаться приблизиться к Erlang. Но в чем суть? В общем, все эти расширения намного сложнее, чем изучение простого языка Erlang, который уже более двух десятилетий доказал, что может выполнять свою работу, предлагая максимальную масштабируемость с нулевым временем простоя.
Вероятно, Erlang лучше подходит для больших распределенных систем (после ответа vjache), но для обычного сервера, когда вы просто хотите использовать всю мощность нескольких процессоров, Akka - хороший выбор - обеспечивает хорошую абстракцию, производительность и интеграцию с экосистемой Java.