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

Некоторая хорошая информация от эта статья о блоге Suzanne Cook на MSDN (отправил 30.05.2003):

, Когда Изменить Версии Файла/Блока

, В первую очередь, версии файла и версии блока не должны совпадать друг с другом. Я рекомендую, чтобы версии файла изменились с каждой сборкой. Но, don’t изменяют версии блока с каждой сборкой именно так, что можно сказать различие между двумя версиями того же файла; используйте версию файла для этого. Решение, когда изменить версии блока, берет некоторое обсуждение типов сборок для рассмотрения: поставка и непоставка.

Непоставлющиеся Сборки
В целом, я рекомендую продолжать не поставляться, блок присваивает версию тому же между поставкой сборок. Это избегает проблем загрузки сборки со строгим именем из-за несоответствий версии. Некоторые люди предпочитают использовать политику издателя перенаправить новые версии блока для каждой сборки. Я рекомендую против который для непоставки сборок, однако: это doesn’t избегает всех загружающихся проблем. Например, если партнер копирует Ваше приложение с помощью xcopy, они не могут знать для установки политики издателя. Затем Ваше приложение будет повреждено для них, даже при том, что оно работает просто великолепно на Вашей машине.

, Но, если существуют случаи, где различные приложения на той же машине должны связать с различными версиями Вашего блока, я рекомендую дать тем сборкам различные версии блока так, чтобы корректный для каждого приложения мог использоваться, не имея необходимость использовать LoadFrom/etc.

Поставлющиеся Сборки
Что касается того, зависит ли it’s хорошая идея изменить ту версию для поставки сборок, это от того, как Вы хотите, чтобы привязка работала на конечных пользователей. Вы хотите, чтобы эти сборки были бок о бок или оперативные? Есть ли между двумя сборками много изменений? Они собираются повредить некоторых клиентов? Вы заботитесь, что это повреждает их (или Вы хотите вынудить пользователей использовать Ваши важные обновления)? Если да, необходимо рассмотреть постепенное увеличение версии блока. Но с другой стороны полагайте, что выполнение, который слишком много раз может замусорить user’s диск устаревшими блоками.

, Когда Вы Изменяете Свои Версии блока
Для изменения hardcoded версий на новую, я рекомендую установить переменную на версию в заголовочном файле и заменить жесткое кодирование в источниках с переменной. Затем выполните препроцессор во время сборки, чтобы вставить правильную версию. Я рекомендую изменить версии прямо после поставки, не прямо прежде, так, чтобы там был пора больше поймать ошибки из-за изменения.

249
задан Roberto Aloi 28 October 2009 в 00:41
поделиться

10 ответов

Из Программирование на Erlang :

альтернативный текст http://bks8.books.google .com / books? id = Qr_WuvfTSpEC & printsec = frontcover & img = 1 & zoom = 5 & sig = ACfU3U2F4YY4KqO0vCuZ4WEZjdE2yFFvvg

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

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

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

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

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

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

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

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


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

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

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

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

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

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

210
ответ дан 23 November 2019 в 02:57
поделиться

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

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

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

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

19
ответ дан 23 November 2019 в 02:57
поделиться

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

14
ответ дан 23 November 2019 в 02:57
поделиться

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

6
ответ дан 23 November 2019 в 02:57
поделиться

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

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

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

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

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

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

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

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

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

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

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

50
ответ дан 23 November 2019 в 02:57
поделиться

ejabberd - одно из самых известных приложений на языке 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 , но также веб-машина , riak и множество библиотек, которые очень легко встроить)

Меньше LOC

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

82
ответ дан 23 November 2019 в 02:57
поделиться

Для чего нужен 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)

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

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

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

11
ответ дан 23 November 2019 в 02:57
поделиться

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

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

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

15
ответ дан 23 November 2019 в 02:57
поделиться

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

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

19
ответ дан 23 November 2019 в 02:57
поделиться

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

10
ответ дан 23 November 2019 в 02:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: