Подтвердить что ты не робот

Где Эрланг используется и почему?

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

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

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

4b9b3361

Ответ 1

От программирования Erlang:

alt text http://bks8.books.google.com/books?id=Qr_WuvfTSpEC&printsec=frontcover&img=1&zoom=5&sig=ACfU3U2F4YY4KqO0vCuZ4WEZjdE2yFFvvg

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

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

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

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

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

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

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

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


Самые популярные приложения с открытым исходным кодом Erlang включают следующее:

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

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

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

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

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

Ответ 2

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

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

Почему?

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

Итак, у нас есть 2 возможности:

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

Это примеры, когда erlang светит.

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

Очень легко создавать масштабируемые неблокирующие серверы TCP/IP с помощью erlang. Фактически, он был разработан для решения этой проблемы. И учитывая, что он может порождать сотни тысяч процессов (а не потоки, это простой подход, который проще разрабатывать), 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. Erlang выберет наиболее подходящую версию с учетом полученных аргументов. (Config - это структура типа #config, которая имеет атрибут type).

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

Завершить

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

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

Меньше LOC

Существует также эта статья от Ричарда Джонса. Он переписал приложение из С++ в erlang: на 75% меньше строк в erlang.

Ответ 3

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

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

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

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

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

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

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

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

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

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

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

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

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

Ответ 4

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

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

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

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

Ответ 5

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

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

Ответ 6

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

Ответ 7

Я столкнулся с тем, что в процессе написания отчета: Erlang в отслеживании акустических лучей.

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

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

Ответ 8

Что такое erlang для?

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/ (ответ jerf)

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

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

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

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

Ответ 9

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

Ответ 10

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

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

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

Ответ 11

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