Где используется Эрланг и почему? [закрытый]
Я хотел бы знать список наиболее распространенных приложений / веб-сайтов / решений, где используется Erlang,успешно или нет.
объяснение того, почему он используется в конкретном решении вместо других языков программирования, также было бы очень оценено.
перечисление плохих примеров Эрланга (случаи, в которых Эрланг неправильно используется) было бы интересно, а также.
11 ответов:
с Программирование Erlang:
многие компании используют Erlang в своих производственных системах:
*Амазонка использует Erlang для реализации SimpleDB, предоставляя услуги базы данных в составе Amazon Elastic Compute Cloud (EC2).
*Yahoo! использует его в своем социальном сервисе закладок, вкусный, который имеет более чем 5 миллионов пользователей и 150 миллионов закладок url.
*Facebook использует Erlang для питания серверной части своего сервиса чата, обрабатывая более 100 миллионов активных пользователей.
* WhatsApp использует Erlang для запуска серверов обмена сообщениями, достигая до 2 миллионов подключенных пользователей на сервер.*Или использует Erlang в своих SMS и аутентификации системный.
*Motorola использует Erlang в продуктах обработки вызовов в индустрии общественной безопасности.
*Ericsson использует Erlang в своих узлах поддержки, используемых в мобильных сетях GPRS и 3G глобальный.
самые популярные приложения с открытым исходным кодом Erlang включают в себя следующее:
* 3D подразделение Моделист Крылья 3D, используется для моделирования и текстуры полигон сетки.
* The Ejabberd система, которая обеспечивает расширяемый протокол обмена сообщениями и присутствия (XMPP) сервер приложений для обмена мгновенными сообщениями (IM).
* The CouchDB документ-ориентированная база данных "без схемы", обеспечивающая масштабируемость через многоядерные и многосерверные кластеры.
* The MochiWeb библиотека, которая обеспечивает поддержку для создания легких HTTP-серверов. Он используется для обслуживания власти например, MochiBot и MochiAds, которые служат динамически генерируемый контент для миллионов зрителей ежедневно.
*RabbitMQ, реализация протокола обмена сообщениями AMQP. AMQP является формирующимся стандарт для высокопроизводительных корпоративных сообщений.
ejabberd является одним из наиболее хорошо знаю приложение Эрланг и тот, который я узнал Эрланг С.
Я думаю, что это один из самых интересных проектов для изучения Эрланга, потому что он действительно строится на силе Эрланга. (Однако некоторые будут утверждать, что это не OTP, но не волнуйтесь, что внутри все еще есть большой код...)
почему ?
сервер XMPP (например, ejabberd) можно рассматривать как маршрутизатор высокого уровня, маршрутизация сообщений между конечными пользователями. Конечно, есть и другие функции, но это самый важный аспект сервера мгновенных сообщений. Он должен маршрутизировать много сообщений одновременно и обрабатывать много соединений TCP/IP.
таким образом, у нас есть 2 Особенности:
- обрабатывать много подключений
- маршрут сообщения учитывая некоторые аспекты сообщения
это примеры, где Эрланг светит.
ручки много соединений
очень легко построить масштабируемые неблокирующие серверы TCP/IP с помощью erlang. На самом деле, он был разработан, чтобы решить эту проблему. И учитывая это может породить сотни тысяч процессов (а не темы, это подход share-nothing, который проще проектировать), ejabberd спроектирован как набор процессов 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 различные версии ).
это означает, что это очень легко и гораздо яснее, чем цепочки
if/else
илиswitch/case
сделать бизнес-правил.закончить
написание масштабируемых серверов, в этом весь смысл erlang. Все спроектировано так, чтобы это было легко. На две предыдущие функции, я бы добавил:
- горячее обновление кода
mnesia
, распределенная реляционная база данных (входит в базовый дистрибутив)mochiweb
, на котором большинство серверов http erlang построены на- двоичная поддержка (декодирование и кодирование двоичного протокола легко, как никогда)
- большое сообщество с большими проектами с открытым исходным кодом (
ejabberd
,couchdb
, но иwebmachine
,riak
и множество библиотеки очень легко встроить)Меньше ЛПДС
есть еще в этой статье от Ричарда Джонса. Он переписал приложение с C++ на erlang: на 75% меньше строк в erlang.
список наиболее распространенных приложений для Erlang, как было рассмотрено (CouchDb, ejabberd, RabbitMQ и т. д.), Но я хотел бы внести следующий вклад.
причина, по которой он используется в этих приложениях, исходит из основной силы Erlang: управление приложением в наличии.
Erlang был построен с нуля для среды telco, требующей, чтобы системы соответствовали по крайней мере доступности 5x9 (99,999% годовое время работы). Эта цифра не оставляет много комната для простоя в течение года! По этой причине в первую очередь Erlang поставляется со следующими функциями (не исчерпывающими):
горизонтальная масштабируемость (способность распределить работы через границы машины легко через безшовные intra & inter сообщения машины). Встроенная база данных (Mnesia) также распространяется на природе.
вертикальная масштабируемость (возможность распределения заданий по обработке ресурсы на той же машине): SMP обрабатывается изначально.
Код "Горячей" Замены: возможность обновления/обновления кода live в ходе операции
асинхронные: реальный мир асинхронный, поэтому Erlang был построен для учета этой основной природы. Одна особенность, которая способствует этому требованию: "свободные" процессы Erlang (>32000 может работать одновременно.)
надзор: много различных стратегий для отростчатого наблюдения с стратегиями рестарта, порогами etc. Помощь берет от угл-случаев / перегружать более легко пока все еще поддерживающ следы проблем для более последних тревог-стрельбы, посмертного анализа etc.
Управление Ресурсами: стратегии планирования, мониторинга ресурсов и т. д. Обратите внимание, что планировщик процессов по умолчанию работает с O (1) масштабирование.
отладки: возможность "войти" в живые узлы по желанию помогает деятельности по устранению неполадок. Отладка может быть предпринята в реальном времени с полным доступом к любому состоянию выполнения процесса. Также встроенные средства сообщения об ошибках очень полезны (но иногда несколько неудобны в использовании).
конечно, можно говорить о ее функциональной корни, но этот аспект несколько перпендикулярных к главной цели (высокой доступности). Главным компонентом функционального характера, который щедро способствует достижению поставленной цели, является ИМО:"ничего не делить". Эта характеристика помогает сдержать "побочные эффекты" и уменьшить потребность в дорогостоящих механизмах синхронизации.
Я думаю, что все эти характеристики помогают расширить случай использования Erlang в бизнес-критических приложениях.
в одном Эрланг не очень хорош: обработка больших блоков данных.
Erlang приходит от Ericsson, и использовано внутри некоторые из их систем телекоммуникаций.
за счет CouchDb (документ-ориентированная база данных), возможно, является самым известным приложением Erlang до сих пор.
Почему Эрланг ? Из обзор (стоит прочитать полностью):
документ, вид, безопасность и модели репликации, специальные язык запроса цели, эффективное и надежную структуру диска и одновременный и надежный характер Платформа Эрланг все тщательно интегрированный для надежного и эффективная система.
построили биржа ставок (Он же рынок прогнозирования) с помощью Erlang. Мы выбрали Эрланг над некоторыми из более традиционных финансовых языков (C++, Java и т. д.) Из-за встроенного в параллелизм. Рынки функционируют очень похоже на телефонные биржи. Наш технический директор выступил с докладом о нашем использовании Эрланга в технический директор говорить.
мы также используем CouchDB и RabbitMQ как часть нашего стека.
я наткнулся на это в процессе написания отчета: Erlang в трассировке акустических лучей.
Это отчет об опыте попытки исследовательской группы использовать Erlang для отслеживания акустических лучей. Они нашли, что тогда было легче писать программы, меньше глючит и т. д. Оно масштабируется хуже, и выполняется в 10 раз медленнее, чем программы на Си. Таким образом, одно место, где это может быть не очень хорошо подходит, - это интенсивные сценарии процессора.
обратите внимание, что люди, написавшие статью, находились на этапах первого обучения Эрлангу и, возможно, не знали надлежащих процедур разработки для интенсивного процессора Erlang.
по-видимому, Yahoo использовал Erlang, чтобы сделать что-то, что он называет Harvester. Статья об этом здесь: http://www.ddj.com/architect/220600332
для чего нужен Эрланг?
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: сам язык, стандартные библиотеки VMs(BEAM, hipe) (плюс модули на github, Сеан и др.) и среда разработки постоянно обновляется/расширяется / улучшается. Например, я помню, что читал, что производительность с плавающей точкой улучшилась, когда автор Wings3d понял, что ее нужно улучшить (я не могу найти источник для этого). И этот парень просто написал об этом:
http://marian-dan.com/wordpress/?p=324
пару лет назад широкая реклама Finder Тима Бре и все люди, начинающие делать фреймворки веб-приложений и HTTP-серверы приведите (по крайней мере частично) к улучшенной обработке регулярных выражений и двоичных файлов. И есть вся работа по интеграции HiPE и SMP, проект диализатора, многократное модульное тестирование и создание библиотек, возникающих ..
Так что его сладкое пятно расширяется, трудность в том, что официальные документы не могут идти в ногу очень хорошо, а список рассылки и объем блогосферы erlang быстро растут
мы используем Erlang, чтобы обеспечить заднюю мышечную силу для нашей действительно браузерной многопользовательской игры в реальном времени Pixza. Мы не используем Flash или любые другие сторонние плагины, хотя игра является многопользовательской в реальном времени. Вместо этого мы используем чистые методы JS и COMET. И Эрланг поддерживает "действительно realtimeliness" Pixza.
Я работаю в wooga, социальной игровой компании, и мы используем Erlang для некоторых из наших игровых бэкэндов (в основном HTTP API для миллионов ежедневных пользователей) и вспомогательных услуг, таких как ios push notification provider, payment и т. д.
Я думаю, что он действительно сияет в сетевых задачах, и это делает его своего рода прямо вперед, чтобы структурировать и реализовать простые и сложные сетевые услуги, так в нем. Распределение, отказоустойчивость и производительность легко достичь, потому что Erlang уже некоторые из ключевых ингредиентов причине и они используются в течение длительного времени в критической производственной инфраструктуры. Так что это не похоже на"новую технологию hip thing 0.0.2 alpha".
Я знаю, что другие игровые компании также используют Erlang. Вы должны быть в состоянии найти презентации на slideshare об этом.