Де використовується Ерланг і чому? [зачинено]


258

Мені хотілося б ознайомитись із списком найбільш поширених застосунків / веб-сайтів / рішень, де Erlang використовується, успішно чи ні .

Пояснення, чому воно використовується в конкретному рішенні замість інших мов програмування, також дуже вдячне.

Перерахувати BAD Erlang-тематичні дослідження (випадки, коли Ерланг неправильно застосовується) також було б цікаво.


13
Проблема тематичних досліджень BAD полягає в тому, що вони насправді не знають і не бачать світла дня.
Ерік

2
WHATSAPP використовує Erlang! Google це для деталей
Muzaaya Joshua

18
Чому це закрито? Я гуглив точне запитання і мене сюди привели.
canhazbits

EMqtt - дуже популярний брокер MQTT і в наш час настільки звикає в IoT, розробленому в ерланге, з стабільністю 1 мільйон користувачів.
LAMRIN TAWSRAS

Відповіді:


214

З програмування Ерланг :

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

Багато компаній використовують Erlang у своїх виробничих системах:

Amazon використовує Erlang для впровадження SimpleDB, надаючи послуги баз даних як частина обчислювальної хмари Amazon Elastic (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 , яка забезпечує сервер додатків миттєвих повідомлень (IM) на основі протоколу розширеного обміну повідомленнями та присутності (XMPP).

• База даних, орієнтованих на схему CouchDB, «без схем», що забезпечує масштабованість у багатоядерних та мультисерверних кластерах.

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

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


27
Раміз Уддін - про яку нову систему ви говорите, коли ви говорите "Ні, це не так?"
Велика черепаха

10
@RamizUddin, про яку нову систему ти говориш, коли ти кажеш "Ні, це не так?" (Я просто повторюю запитання Великої Черепахи, яка пару років тому забула @ перед вашим іменем - я думаю, що все-таки заслуговує на відповідь)
Вальтер Трос

4
facebook відключився від erlang: facebook.com/notes/facebook-engineering/… та quora.com/…
А. Binzxxxxxx

Facebook зруйнував простоту та продуктивність WhatsApp.
ПК

Чи можете ви оновити розірване посилання на книгу?
прадюмнад

83

ejabberd - це одне з найвідоміших застосувань erlang і те, з чим я дізнався erlang.

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

Чому?

Сервер XMPP (наприклад, ejabberd) може розглядатися як маршрутизатор високого рівня, маршрутизуючи повідомлення між кінцевими користувачами. Звичайно, є й інші функції, але це найважливіший аспект сервера обміну миттєвими повідомленнями. Він повинен одночасно маршрутизувати багато повідомлень та обробляти багато з’єднань TCP / IP.

Отже, у нас є 2 функції:

  • обробляти безліч з'єднань
  • маршрутні повідомлення з урахуванням деяких аспектів повідомлення

Це приклади, коли світить ерланг.

обробляти безліч з'єднань

Дуже легко створити масштабовані неблокуючі сервери 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функції. Ерланг вибере найбільш відповідну версію з огляду на отримані аргументи. ( Configце структура типу, #configяка має typeатрибут).

Це означає, що це дуже просто і набагато зрозуміліше, ніж прив'язувати до ланцюжка if/elseчи switch/caseскладати правила бізнесу.

Загорнути

Писати масштабовані сервери, у цьому вся суть erlang. Все розроблено, що робить це легко. До двох попередніх функцій я додам:

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

Менше місцевих місцевостей

Є також ця стаття Річарда Джонса. Він переписав програму з C ++ на erlang: на 75% менше рядків у erlang.


6
Якщо чесно, майже будь-який код C ++, переписаний сучасною мовою, зменшив би LOC.
Зак

52

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

Причина, по якій він використовується в цих додатках, походить від основної сили Erlang: управління доступністю програми .

Erlang був побудований з нуля для середовища телекомунікацій, що вимагає, щоб системи відповідали принаймні 5x9 доступності (99,999% щорічного часу роботи). Ця цифра не залишає багато часу для простоїв протягом року! З цієї причини, насамперед, Erlang завантажується такими функціями (невичерпними):

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

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

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

  • Асинхронний : реальний світ є асинхронним, тому Ерланг був побудований для врахування цієї основної природи. Одна особливість, яка сприяє цій вимозі: "безкоштовні" процеси Ерланга (> 32000 можуть працювати одночасно).

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

  • Управління ресурсами : стратегії планування, моніторинг ресурсів тощо. Зверніть увагу, що планувальник процесів за замовчуванням працює з масштабуванням O (1).

  • Налагодження в режимі реального часу: можливість "зайти" в реальні вузли за власним бажанням допомагає вирішувати проблеми. Налагодження можна здійснити в реальному часі з повним доступом до будь-якого запущеного стану будь-якого процесу. Також вбудовані засоби повідомлення про помилки дуже корисні (але іноді дещо незручні у використанні).

Звичайно, я міг би говорити про його функціональне коріння, але цей аспект є дещо ортогональним до головної мети (висока доступність). Основним компонентом функціонального характеру, який щедро сприяє досягненню цілі, є ІМО: "не поділяй нічого". Ця характеристика допомагає стримувати "побічні ефекти" та зменшувати потребу в дорогих механізмах синхронізації.

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

Одне, що Ерланг не дуже добре : обробка великих блоків даних.


4
Чи можете ви пояснити таке: "Одне з Ерланг не дуже добре: обробка великих блоків даних".
Кирило Трофімов

9
Він має на увазі такі речі, як розшифровка даних mpeg. Існує занадто багато числових обчислень, для яких Ерланг не оптимізований. Якщо обробка просто включає переміщення великих блоків даних з одного місця в інше, то Ерланг в цьому непоганий. (Файли до розеток TPC тощо)
Крістіан,

4
Ви не можете оновити загальнодоступні блоки даних (в Erlang немає покажчиків), а значить, дані повинні переноситися через процеси, що в свою чергу призводить до неефективності.
jldupont

Вбік, Ericsson, я вважаю, сказав, що Ерланг досяг доступності 9x9.
Jono

Ми розглядаємо можливість покращити слабкість Ерланга, про яку йдеться тут.
Шелбі Мур III,

19

Erlang походить від Ericsson і використовується в деяких їх телекомунікаційних системах.

Поза межами телекомунікацій CouchDb (база даних, орієнтована на документи), можливо, найвідоміший додаток Erlang досі.

Чому Ерланг? З огляду (варто прочитати повністю):

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


1
Для деяких їх телекомунікаційних систем.
jldupont

1
CouchDB - це не база даних OO, це база даних, орієнтована на документи.
Я даю грізну пораду

5
@ Я даю грізну пораду - так, звичайно. Виправлено. Я міняв би вашу позицію :-)
Брайан Агнев

Існувала більш рання мова одночасності, якою користувався Ericsson під назвою PLEX (Мова програмування для обміну), яка керувала цифровими телефонними станціями протягом кінця 80-х до цього часу. Я думаю, що erlang - це вдосконалена версія PLEX.
user50619

19

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

Ми також використовуємо CouchDB та RabbitMQ як частину нашого стеку.


10
Лише зауважте, посилання на вашу розмову тепер приватне.
JDong

15

Я натрапив на це, що зараз я складаю звіт: Ерланг у програмі Acoustic Ray Tracing .

Це звіт про досвід намагань дослідницької групи використовувати Erlang для акустичного відстеження променів. Вони виявили, що в той час як було легше писати програму, менше баггі і т. Д. Це гірше масштабується, і виконується в 10 разів повільніше, ніж порівнянна програма С. Отож, одне місце, де воно може не підходити, - це інтенсивні сценарії процесора.

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


2
Папір - цікаве прочитання. Це прямо не робить це узагальнення щодо придатності, воно вказує на те, що вони виявили Erlang непридатним, якщо ви намагаєтесь розгорнути на процесорі IBM Cell BE BE, знайденому в Playstation 3. Там же зазначено, що вони недосвідчені з Erlang. Маючи більше досвіду та відповідного обладнання, вони, можливо, дійшли іншого висновку. У мене складається враження, що їх код, можливо, включав використання нерекурсивних функцій; якщо так, то це може певним чином пояснити їх проблеми з пам'яттю, вивезенням сміття, збоями та роботою.
Тім

3
Я думаю, ви неправильно прочитали статтю. Неможливість роботи на процесорі Cell була прикрою, але це була лише бічна нота. 12-кратна різниця в продуктивності між C ++ та реалізацією Erlang, що працює на платформі x86, була справжньою проблемою в поєднанні з тим, що вона не масштабувалась лінійно. Однак, вони були новими в мові і, можливо, пройшли кілька нерозумних кодових шляхів ... таке життя. Мені цікаво нелінійне масштабування.
CoderTao

4
Я виправлений у 12-кратному питанні щодо Intel та Cell, але я вважаю, що Erlang може бути добре підходить до складних сценаріїв процесора. Це не означає, що вони неправі: це дійсно може бути проблемою, коли хороше рішення C ++ завжди переможе хороше рішення Ерланга. Можливо, це певним чином допомагає нагадати деяким людям, що Ерланг, як і будь-яка інша технологія, не є срібною кулею, і вона буде світити лише при правильному використанні в потрібному місці.
Тім

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/ (відповідь jerf)

Важливо усвідомити, що 4 частини Ерланга: сама мова, стандартні лінзи VM (BEAM, hipe) (плюс модулі на github, CEAN тощо) та середовище розробки постійно оновлюються / розширюються / покращуються. Наприклад, я пам’ятаю, що читав, що продуктивність плаваючої точки покращувалася, коли автор Wings3d зрозумів, що потрібно вдосконалитись (я не можу знайти для цього джерело). І цей хлопець щойно написав про це:

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

Пару років тому розголос Тіма Брейя про широкий пошук і всі люди, які починають робити рамки веб-додатків і HTTP-сервери, принаймні (частково) призводять до вдосконаленого управління регулярними виразами та бінарними файлами. І тут є вся робота з інтеграції HiPE та SMP, проекту діалізатора, багаторазового тестування та створення лінз, що випливають.

Тож його приємне місце розширюється. Складне те, що офіційні документи не можуть не відставати, а список розсилки та обсяг блогосфери erlang швидко зростають


10

Ми використовуємо Erlang, щоб забезпечити потужність м'язів заднього рівня для нашої реальної в реальному часі багатокористувацької гри Pixza . Ми не використовуємо Flash або будь-які інші сторонні плагіни, хоча гра є мультиплеєром у режимі реального часу. Замість цього ми використовуємо чисті методи JS та COMET. І Ерланг підтримує "справді реальність" Pixza.


10

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

Я думаю, що він справді світить у завдань, пов’язаних із мережею, і це робить своєрідним прямим вперед структурування та реалізацію простих та складних мережевих служб. Розподіл, відмовостійкість та продуктивність легко досягти, оскільки в Erlang вже вбудовані основні компоненти, і вони тривалий час використовуються в критичній виробничій інфраструктурі. Тож це не подобається "нова технологія хіп 0,0.2 альфа".

Я знаю, що і інші ігрові компанії використовують Erlang. Ви маєте змогу знайти презентації на слайд-дорізі з цього приводу.


6

Ерланг черпає свої сили на тому, щоб бути функціональною мовою без загальної пам'яті. Отже, IMO, Erlang не підходить для додатків, які потребують маніпуляцій з пам'яттю. Наприклад, редагування зображень

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.