Где используется Erlang и почему? [закрыто]

258

Я хотел бы знать список наиболее распространенных приложений / веб-сайтов / решений, где Erlang используется, успешно или нет .

Объяснение того, почему оно используется в конкретном решении, а не в других языках программирования, также будет очень полезно.

Перечисление BAD Erlang тематических исследований (случаев, когда Erlang используется не по назначению) также было бы интересно.

Роберто Алои
источник
13
Проблема с плохими примерами из практики состоит в том, что они на самом деле не становятся знаменитыми и не видят свет.
Эрик
2
WHATSAPP использует Erlang! Google это для деталей
Muzaaya Джошуа
18
Почему это закрыто? Я гуглил точный вопрос и меня привели сюда.
canhazbits
EMqtt - очень популярный MQTT-брокер, и в настоящее время он так много использует в IoT, разработанном в эрланге с устойчивостью к 1 миллиону пользователей.
ЛАМРИН ТАУСРАС

Ответы:

214

Из программирования Erlang :

альтернативный текст

Многие компании используют Erlang в своих производственных системах:

Amazon использует Erlang для реализации SimpleDB, предоставляя услуги базы данных как часть Amazon Elastic Compute Cloud (EC2).

Yahoo! использует его в своем сервисе социальных закладок, Delicious, который имеет более 5 миллионов пользователей и 150 миллионов закладок.

Facebook использует Erlang для поддержки серверной части своего чата, обслуживающего более 100 миллионов активных пользователей.

WhatsApp использует Erlang для запуска серверов обмена сообщениями, обеспечивая до 2 миллионов подключенных пользователей на сервер.

T-Mobile использует Erlang в своих системах SMS и аутентификации.

Motorola использует Erlang в продуктах обработки вызовов в сфере общественной безопасности.

Ericsson использует Erlang в своих узлах поддержки, используемых в мобильных сетях GPRS и 3G по всему миру.


Наиболее популярные приложения Erlang с открытым исходным кодом:

• 3D-модельер Wings 3D , используемый для моделирования и текстурирования полигональных сеток.

• Система Ejabberd , которая предоставляет сервер приложений обмена мгновенными сообщениями (IM) на основе расширяемого обмена сообщениями и протокола присутствия (XMPP).

• Документно-ориентированная база данных CouchDB «без схемы», обеспечивающая масштабируемость между многоядерными и многосерверными кластерами.

• Библиотека MochiWeb , обеспечивающая поддержку создания облегченных HTTP-серверов. Он используется для питания таких сервисов, как MochiBot и MochiAds, которые ежедневно предоставляют динамически генерируемый контент миллионам зрителей.

RabbitMQ , реализация протокола обмена сообщениями AMQP. AMQP - это новый стандарт высокопроизводительных корпоративных сообщений.

JRL
источник
27
Рамиз Уддин - о какой новой системе вы говорите, когда говорите "Нет, это не так?"
Великая черепаха
10
@RamizUddin о какой новой системе вы говорите, когда говорите «Нет, это не так?» (Я просто повторяю вопрос от Великой Черепахи, которая пару лет назад забыла @ перед вашим именем - я думаю, что она, тем не менее, заслуживает ответа)
Уолтер Тросс
Facebook разрушил простоту и производительность WhatsApp.
ПК Кришнадаса
Можете обновить неработающую ссылку на книгу?
Прадумнад
83

ejabberd - одно из самых известных приложений на эрланге, с которым я выучил эрланг.

Я думаю, что это один из самых интересных проектов по изучению эрланга, потому что он действительно опирается на силу эрланга. (Однако некоторые будут утверждать, что это не OTP, но не волнуйтесь, внутри все еще есть масса отличного кода ...)

Зачем ?

Сервер XMPP (например, ejabberd) можно рассматривать как маршрутизатор высокого уровня, маршрутизирующий сообщения между конечными пользователями. Конечно, есть и другие функции, но это самый важный аспект сервера обмена мгновенными сообщениями. Он должен одновременно маршрутизировать много сообщений и обрабатывать множество TCP / IP-соединений.

Итак, у нас есть 2 функции:

  • обрабатывать много соединений
  • Маршрут сообщений с учетом некоторых аспектов сообщения

Это примеры, где эрланг сияет.

обрабатывать много соединений

С помощью erlang очень легко создавать масштабируемые неблокирующие серверы TCP / IP. Фактически, это было разработано, чтобы решить эту проблему. И, учитывая, что он может порождать сотни тысяч процессов (а не потоков , это подход без разделения ресурсов, который проще проектировать), ejabberd разработан как набор процессов erlang (которые могут быть распределены по нескольким серверам):

  • процесс подключения клиента
  • процесс роутера
  • процесс чата
  • межсерверные процессы

Все они обмениваются сообщениями.

Маршрут сообщений с учетом некоторых аспектов сообщения

Еще одна привлекательная особенность erlang - это сопоставление с образцом . Он используется во всем языке.

Например, в следующем:

access(moderator, _Config)->  rw;
access(participant, _Config)->  rw;
access(visitor, #config{type="public"})->  r;
access(visitor, #config{type="public_rw"})->  rw;
access(_User,_Config)->  none.

Это 5 разных версий accessфункции. Эрланг выберет наиболее подходящую версию с учетом полученных аргументов. ( Configэто структура типа, #configкоторая имеет typeатрибут).

Это означает, что это очень просто и намного понятнее, чем создание цепочки if/elseили switch/caseсоздание бизнес-правил.

Упаковать

Написание масштабируемых серверов - вот и весь смысл Erlang. Все разработано, чтобы сделать это легко. К двум предыдущим функциям я бы добавил:

  • горячее обновление кода
  • mnesiaРаспределенная реляционная база данных (входит в базовый дистрибутив)
  • mochiweb, на котором основано большинство серверов http erlang
  • двоичная поддержка (декодирование и кодирование двоичного протокола легко, как никогда)
  • большое сообщество с большими проектами с открытым исходным кодом ( ejabberd, couchdbно также webmachine, riakи убивание библиотеки очень легко врезать)

Меньше LOCs

Есть также эта статья от Ричарда Джонса. Он переписал приложение с C ++ на erlang: на Erlang на 75% меньше строк.

Эрик
источник
6
Чтобы быть справедливым, почти любой код C ++, переписанный на современном языке, уменьшил бы LOC.
Зак
52

Список наиболее распространенных приложений для Erlang, как было описано (CouchDb, ejabberd, RabbitMQ и т. Д.), Но я хотел бы добавить следующее.

Причина, по которой он используется в этих приложениях, заключается в основной силе Erlang: управлении доступностью приложений .

Erlang был создан с нуля для телекоммуникационной среды, требующей, чтобы системы соответствовали доступности как минимум 5x9 (99,999% годового времени безотказной работы). Эта цифра не оставляет много места для простоя в течение года! По этой причине, в первую очередь, Erlang поставляется со следующими функциями (не исчерпывающими):

  • Горизонтальная масштабируемость (способность легко распределять рабочие места между машинами за счет непрерывного взаимодействия внутри и между машинами). Встроенная база данных (Mnesia) также распространяется по своей природе.

  • Вертикальная масштабируемость (возможность распределять задания между ресурсами обработки на одном компьютере): SMP обрабатывается изначально.

  • Горячая замена кода : возможность обновлять / обновлять код в реальном времени во время операций

  • Асинхронный : реальный мир асинхронный, поэтому Erlang был создан для учета этой основной природы. Одна особенность, которая способствует этому требованию: «свободные» процессы Эрланга (> 32000 могут работать одновременно).

  • Надзор : множество различных стратегий для надзора за процессом со стратегиями перезапуска, пороговыми значениями и т. Д. Помогает легче восстанавливаться после угловых случаев / перегрузок, сохраняя при этом следы проблем для последующего устранения неполадок, посмертного анализа и т. Д.

  • Управление ресурсами : стратегии планирования, мониторинг ресурсов и т. Д. Обратите внимание, что планировщик процессов по умолчанию работает с масштабированием O (1).

  • Отладка в реальном времени : возможность «входить» в действующие узлы по желанию помогает устранять неполадки. Отладка может быть осуществлена ​​в режиме реального времени с полным доступом к состоянию выполнения любого процесса. Также встроенные инструменты сообщения об ошибках очень полезны (но иногда неудобны в использовании).

Конечно, я мог бы рассказать о его функциональных корнях, но этот аспект несколько ортогональн к основной цели (высокая доступность). Основным компонентом функционального характера, который щедро способствует достижению поставленной цели, является ИМО: «ничего не делиться». Эта характеристика помогает сдерживать «побочные эффекты» и снижает потребность в дорогостоящих механизмах синхронизации.

Я предполагаю, что все эти характеристики помогают расширить возможности использования Erlang в критически важных бизнес-приложениях.

Одна вещь, которую Эрланг не очень хорошо умеет : обрабатывать большие блоки данных.

jldupont
источник
4
Не могли бы вы объяснить следующее: «Одна вещь, которую Эрланг не очень хорошо умеет: обрабатывать большие блоки данных».
Кирилл Трофимов
9
Он имеет в виду такие вещи, как декодирование данных MPEG. Слишком много численных расчетов, для которых Эрланг не оптимизирован. Если обработка просто включает в себя перетасовку больших блоков данных из одного места в другое, то Erlang в этом хорош. (Файлы в сокеты TPC и т. Д.)
Кристиан,
4
Вы не можете обновить общие блоки данных (в Erlang нет указателей) и, следовательно, данные должны быть распределены между процессами, что, в свою очередь, приводит к неэффективности.
jldupont
Кроме того, Ericsson, я полагаю, сказал, что Erlang достиг доступности 9x9.
Jono
Мы обдумываем улучшение слабости Эрланга, упомянутой здесь.
Шелби Мур III
19

Erlang происходит от Ericsson и используется в некоторых их телекоммуникационных системах.

Вне телекоммуникаций CouchDb (база данных, ориентированная на документы), возможно, является самым известным приложением Erlang на сегодняшний день.

Почему Эрланг? Из обзора (стоит прочитать полностью):

Модели документов, представлений, безопасности и репликации, язык запросов специального назначения, эффективная и надежная структура дисков и параллельный и надежный характер платформы Erlang - все тщательно интегрированы в надежную и эффективную систему.

Брайан Агнью
источник
1
Для некоторых своих систем телекоммуникаций.
jldupont
1
CouchDB - это не база данных OO, это база данных, ориентированная на документы.
Я ДАЮ УЖАСНЫЙ СОВЕТ
5
@ Я даю ужасные советы - да, конечно. Исправлено. Я бы изменил ваше прозвище :-)
Брайан Агнью
Был более ранний язык параллелизма, используемый Эрикссоном, называемый PLEX (язык программирования для бирж), который управлял цифровыми телефонными станциями в течение конца 80-х годов и до сих пор. Я думаю, что Erlang - это усовершенствованная версия PLEX.
user50619
19

Мы построили биржу ставок (рынок прогнозирования), используя Erlang. Мы выбрали Erlang вместо некоторых более традиционных финансовых языков (C ++, Java и т. Д.) Из-за встроенного параллелизма. Рынки функционируют очень похоже на телефонные биржи. Наш технический директор выступил с докладом о том, как мы используем Erlang на конференции .

Мы также используем CouchDB и RabbitMQ как часть нашего стека.

Джейсон Трост
источник
10
Просто примечание, ссылка на ваш разговор теперь приватная.
JDong
15

Я сталкивался с этим в процессе написания отчета: Erlang в Acoustic Ray Tracing .

Это отчет о попытках исследовательской группы использовать Erlang для Acoustic Ray Tracing. Они обнаружили, что, хотя писать программу проще, меньше глючить и т. Д. Она масштабировалась хуже и работала в 10 раз медленнее, чем сопоставимая программа на Си. Таким образом, одна из областей, где он может не подходить, это сценарии с интенсивным использованием процессора.

Обратите внимание, что люди, написавшие статью, находились на стадии первого изучения Erlang и, возможно, не знали надлежащих процедур разработки для интенсивного использования Erlang.

CoderTao
источник
2
Статья интересна для чтения. Он не делает этого обобщения о пригодности напрямую, он указывает на то, что они нашли Erlang неподходящим, если вы пытаетесь развернуть его на процессоре IBM Cell BE, найденном в Playstation 3. Он также заявляет, что у них нет опыта работы с Erlang. С большим опытом и подходящим оборудованием они могли прийти к другому выводу. У меня складывается впечатление, что их код мог включать использование нерекурсивных функций; если это так, то это может объяснить их проблемы с памятью, сборкой мусора, сбоями и производительностью.
Тим
3
Я думаю, что вы неправильно прочитали статью. Невозможность запуска на процессоре Cell была неудачной, но это было только замечание. Разница в производительности в 12 раз между реализацией C ++ и реализацией Erlang, работающей на платформе x86, была настоящей проблемой в сочетании с тем, что она не масштабировалась линейно. Тем не менее, они были плохо знакомы с языком и, возможно, взяли несколько неразумных путей кода ... такова жизнь. Мне любопытно, хотя нелинейное масштабирование.
CoderTao
4
Я исправлен в 12-кратной проблеме производительности в отношении Intel против Cell, но я утверждаю, что Erlang может хорошо подходить для сложных сценариев ЦП. Это не значит, что они не правы: это действительно может быть проблемой, когда хорошее решение C ++ всегда побеждает хорошее решение Erlang. Возможно, это послужит напоминанием некоторым людям, что Erlang, как и любая другая технология, не является серебряной пулей и будет сиять только при правильном использовании в нужном месте.
Тим
14

Судя по всему, Yahoo использовала Erlang для создания чего-то, что называется Harvester. Статья об этом здесь: http://www.ddj.com/architect/220600332

Хармс
источник
4
Чтение из статьи: «Хотя Harvester изначально был написан на Perl, высокоуровневые конструкции параллелизма Erlang - вместе с принципами разработки OTP - делают его идеальной платформой для создания надежных, отказоустойчивых и масштабируемых приложений, таких как Harvester. Получающийся сервис является более масштабируемым, доступным, надежным и способным соответствовать более жестким соглашениям об уровне обслуживания (SLA) на более легкой базе кода и менее дорогостоящим усилиям по разработке ". Большое спасибо :)
Роберто Алои
11

Чем хорош эрланг?

http://beebole.com/en/blog/erlang/why-erlang/

http://www.aquabu.com/2008/2/15/erlang-pragmatic-studio-day-3-notes

http://www.reddit.com/r/programming/comments/9q0lr/erlang_and_highfrequency_trading/ (ответ Джерфа)

Важно понимать, что 4 части Erlang: сам язык, стандартные библиотеки виртуальных машин (BEAM, hipe) (плюс модули на github, CEAN и т. Д.) И среда разработки постоянно обновляются / расширяются / улучшаются. Например, я помню, как читал, что производительность с плавающей запятой улучшилась, когда автор Wings3d понял, что нужно улучшить (я не могу найти источник для этого). И этот парень только что написал об этом:

http://marian-dan.com/wordpress/?p=324

Пару лет назад популярность Тима Брея в Wide Finder и все, кто начал делать каркасы веб-приложений и HTTP-серверы, привели (по крайней мере частично) к улучшению обработки регулярных выражений и двоичных файлов. И еще есть работа по интеграции HiPE и SMP, проекта диализатора, множественного модульного тестирования и сборки библиотек, ..

Таким образом, его сладкое пятно расширяется. Сложность в том, что официальные документы не могут идти в ногу со временем, а список рассылки и объем блогосферы erlang быстро растут

Джин Т
источник
10

Мы используем Erlang, чтобы обеспечить мощную мускулатуру для нашей многопользовательской браузерной игры Pixza в реальном времени . Мы не используем Flash или другие сторонние плагины, хотя игра многопользовательская в режиме реального времени. Вместо этого мы используем чистые методы JS и COMET. И Erlang поддерживает «действительно актуальную» Pixza.

ErJab
источник
10

Я работаю в wooga, компании, занимающейся социальными играми, и мы используем Erlang для некоторых наших игровых бэкэндов (в основном, http apis для миллионов пользователей в день) и вспомогательных сервисов, таких как ios push-уведомления, оплата и т. Д.

Я думаю, что это действительно хорошо подходит для задач, связанных с сетью, и делает его довольно простым для структурирования и реализации в нем простых и сложных сетевых сервисов. Распределение, отказоустойчивость и производительность легко достижимы, потому что в Erlang уже встроены некоторые ключевые компоненты, и они долгое время используются в критически важной производственной инфраструктуре. Так что это не похоже на «новую хип-технологию 0.0.2 alpha».

Я знаю, что другие игровые компании также используют Erlang. Вы должны быть в состоянии найти презентации на Slideshare об этом.

Джон Пол Бадер
источник
6

Erlang черпает силу в том, что является функциональным языком без общей памяти. Следовательно, IMO, Erlang не подойдет для приложений, которые требуют манипуляций с памятью. Редактирование изображений, например.

Мойки
источник