Gdzie stosuje się Erlang i dlaczego? [Zamknięte]

258

Chciałbym poznać listę najpopularniejszych aplikacji / stron internetowych / rozwiązań, w których Erlang jest używany, z powodzeniem lub nie .

Bardzo mile widziane byłoby wyjaśnienie, dlaczego jest używane w konkretnym rozwiązaniu zamiast w innych językach programowania.

Ciekawe byłoby również umieszczenie w wykazie BAD Erlang studiów przypadków (przypadków, w których Erlang jest niewłaściwie wykorzystywany).

Roberto Aloi
źródło
13
Problem ze studiami przypadków BAD polega na tym, że tak naprawdę nie stają się sławne ani nie widzą światła dziennego.
Eric,
2
WHATSAPP używa Erlanga! Google go po szczegóły
Muzaaya Joshua
18
Dlaczego to jest zamknięte? Przejrzałem dokładne pytanie i zaprowadzono mnie tutaj.
canhazbits,
EMqtt jest bardzo popularnym brokerem MQTT i obecnie jest tak często wykorzystywany w IoT, opracowany w Erlangu z 1 milionem użytkowników.
LAMRIN TAWSRAS

Odpowiedzi:

214

Od programowania Erlang :

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

Wiele firm używa Erlang w swoich systemach produkcyjnych:

Amazon wykorzystuje Erlang do implementacji SimpleDB, zapewniającej usługi bazodanowe w ramach Amazon Elastic Compute Cloud (EC2).

Yahoo! używa go w usłudze zakładek społecznościowych Delicious, która ma ponad 5 milionów użytkowników i 150 milionów adresów URL z zakładkami.

Facebook wykorzystuje Erlang do zasilania zaplecza usługi czatu, obsługując ponad 100 milionów aktywnych użytkowników.

WhatsApp używa Erlanga do uruchamiania serwerów przesyłania wiadomości, osiągając do 2 milionów połączonych użytkowników na serwer.

T-Mobile wykorzystuje Erlang w swoich systemach SMS i uwierzytelniania.

Motorola wykorzystuje Erlang w produktach do przetwarzania połączeń w branży bezpieczeństwa publicznego.

Ericsson wykorzystuje Erlang w swoich węzłach wsparcia, używanych w sieciach mobilnych GPRS i 3G na całym świecie.


Najpopularniejsze aplikacje Erlang typu open source to:

• Modeler podziału 3D Wings 3D , używany do modelowania i tekstury siatek wielokątów.

• System Ejabberd , który zapewnia serwer aplikacji IM (Extensible Messaging and Presence Protocol, XMPP).

• Zorientowana na dokumenty baza danych CouchDB „bez schematu”, zapewniająca skalowalność w klastrach wielordzeniowych i wieloserwerowych.

• Biblioteka MochiWeb, która obsługuje tworzenie lekkich serwerów HTTP. Służy do zasilania serwisów takich jak MochiBot i MochiAds, które codziennie dostarczają dynamicznie generowane treści milionom widzów.

RabbitMQ , implementacja protokołu przesyłania komunikatów AMQP. AMQP to nowy standard w zakresie wysokowydajnego przesyłania wiadomości w przedsiębiorstwie.

JRL
źródło
27
Ramiz Uddin - o jakim nowym systemie mówisz, kiedy mówisz „Nie, to nie jest?”
Wielki Żółw
10
@RamizUddin o jakim nowym systemie mówisz, kiedy mówisz „Nie, to nie jest?” (Właśnie powtarzam pytanie Wielkiego Żółwia, który kilka lat temu zapomniał @ przed twoim imieniem - myślę, że mimo to zasługuje na odpowiedź)
Walter Tross
4
facebook został wyłączony z erlang: facebook.com/notes/facebook-engineering/... and quora.com/…
A. Binzxxxxxx,
Facebook zrujnował prostotę i wydajność WhatsApp.
Krishnadas PC
Czy możesz zaktualizować uszkodzony link do książki?
pradyumnad
83

ejabberd to jedna z najbardziej znanych aplikacji erlang, z którą się nauczyłem.

Myślę, że jest to jeden z najciekawszych projektów do nauki Erlangu, ponieważ naprawdę opiera się na sile Erlanga. (Jednak niektórzy twierdzą, że to nie jest OTP, ale nie martw się, jest jeszcze mnóstwo świetnego kodu w środku ...)

Czemu ?

Serwer XMPP (taki jak ejabberd) może być postrzegany jako router wysokiego poziomu, kierujący wiadomości między użytkownikami końcowymi. Oczywiście istnieją inne funkcje, ale jest to najważniejszy aspekt serwera wiadomości błyskawicznych. Musi kierować wiele wiadomości jednocześnie i obsługiwać wiele połączeń TCP / IP.

Mamy więc 2 funkcje:

  • obsłużyć wiele połączeń
  • trasuj wiadomości, biorąc pod uwagę niektóre aspekty wiadomości

Są to przykłady, w których świeci erlang.

obsłużyć wiele połączeń

Bardzo łatwo można zbudować skalowalne, nieblokujące się serwery TCP / IP za pomocą erlang. W rzeczywistości został zaprojektowany, aby rozwiązać ten problem. Biorąc pod uwagę, że może on wygenerować setki tysięcy procesów (a nie wątków , jest to podejście typu „nic nie udostępniaj”, które jest prostsze w projektowaniu), ejabberd został zaprojektowany jako zestaw procesów erlang (które mogą być dystrybuowane na kilku serwerach):

  • proces połączenia klienta
  • proces routera
  • proces czatu
  • procesy serwer-serwer

Wszyscy wymieniają się wiadomościami.

trasuj wiadomości, biorąc pod uwagę niektóre aspekty wiadomości

Kolejną bardzo uroczą funkcją erlang jest dopasowywanie wzorów . Jest używany w całym języku.

Na przykład:

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.

To 5 różnych wersji accessfunkcji. Erlang wybierze najbardziej odpowiednią wersję, biorąc pod uwagę otrzymane argumenty. ( Configjest strukturą typu, #configktóra ma typeatrybut).

Oznacza to, że jest to bardzo łatwe i znacznie bardziej przejrzyste niż tworzenie łańcuchów if/elselub switch/casetworzenie reguł biznesowych.

Owinąć

Pisanie skalowalnych serwerów - o to właśnie chodzi w Erlangu. Wszystko zostało zaprojektowane tak, aby było to łatwe. Do dwóch poprzednich funkcji dodam:

  • aktualizacja kodu gorącego
  • mnesia, rozproszona relacyjna baza danych (zawarta w dystrybucji podstawowej)
  • mochiweb, na których zbudowana jest większość serwerów HTTP Erlang
  • obsługa binarna (dekodowanie i kodowanie protokołu binarnego łatwe jak zawsze)
  • wielka społeczność z wielkich projektów open source ( ejabberd, couchdbale także webmachine, riaki zabił biblioteki bardzo łatwy do ankiety)

Mniej LOC

Jest też ten artykuł od Richarda Jonesa. Przepisał aplikację z C ++ na erlang: o 75% mniej wierszy w erlang.

Eric
źródło
6
Szczerze mówiąc, prawie każdy kod C ++ przepisany w nowoczesnym języku zmniejszyłby LOC.
Zack
52

Lista najpopularniejszych aplikacji dla Erlang, które zostały uwzględnione (CouchDb, ejabberd, RabbitMQ itp.), Ale chciałbym przekazać następujące informacje.

Powód, dla którego jest on wykorzystywany w tych aplikacjach, wynika z podstawowej siły Erlanga: zarządzania dostępnością aplikacji .

Erlang został zbudowany od podstaw dla środowiska telekomunikacyjnego wymagającego, aby systemy spełniały co najmniej dostępność 5x9 (99,999% rocznego czasu sprawności). Liczba ta nie pozostawia wiele miejsca na przestoje w ciągu roku! Z tego powodu przede wszystkim Erlang jest wyposażony w następujące funkcje (niewyczerpujące):

  • Skalowalność w poziomie (możliwość łatwego rozdzielania zadań między granicami maszyny poprzez płynną komunikację wewnątrz i między maszyną). Wbudowana baza danych (Mnesia) jest również dystrybuowana z natury.

  • Skalowalność w pionie (możliwość rozdzielania zadań między zasoby przetwarzania na tym samym komputerze): SMP jest obsługiwany natywnie.

  • Wymiana kodu na gorąco : możliwość aktualizacji / aktualizacji kodu na żywo podczas operacji

  • Asynchroniczny : świat rzeczywisty jest asynchroniczny, więc Erlang został zbudowany, aby uwzględnić tę podstawową naturę. Jedna cecha, która spełnia ten wymóg: „wolne” procesy Erlanga (> 32000 mogą działać jednocześnie).

  • Nadzór : wiele różnych strategii nadzoru procesu ze strategiami restartu, progami itp. Pomaga łatwiej wyjść z przypadków narożnych / przeciążenia, zachowując jednocześnie ślady problemów do późniejszego rozwiązywania problemów, analizy poubojowej itp.

  • Zarządzanie zasobami : strategie planowania, monitorowanie zasobów itp. Należy pamiętać, że domyślny program planujący procesy działa ze skalowaniem O (1).

  • Debugowanie na żywo : możliwość „zalogowania” się do aktywnych węzłów pomoże w rozwiązywaniu problemów. Debugowanie można przeprowadzić na żywo z pełnym dostępem do dowolnego stanu procesu. Również wbudowane narzędzia do zgłaszania błędów są bardzo przydatne (ale czasem nieco niewygodne w użyciu).

Oczywiście mógłbym mówić o jego funkcjonalnych korzeniach, ale ten aspekt jest nieco ortogonalny w stosunku do głównego celu (wysoka dostępność). Głównym składnikiem natury funkcjonalnej, który hojnie przyczynia się do osiągnięcia celu, jest IMO: „nic nie dzielić”. Ta cecha pomaga ograniczyć „skutki uboczne” i zmniejszyć potrzebę kosztownych mechanizmów synchronizacji.

Wydaje mi się, że wszystkie te cechy pomagają rozszerzyć argumenty przemawiające za wykorzystaniem Erlanga w krytycznych aplikacjach biznesowych.

Jedną rzeczą, w której Erlang nie jest naprawdę dobry : przetwarzanie dużych bloków danych.

Jldupont
źródło
4
Czy możesz wyjaśnić: „Jedna rzecz, w której Erlang nie jest naprawdę dobry: przetwarzanie dużych bloków danych”.
Kirill Trofimov
9
Ma na myśli takie rzeczy, jak dekodowanie danych MPEG. Jest za dużo obliczeń numerycznych, dla których Erlang nie jest zoptymalizowany. Jeśli przetwarzanie polega tylko na tasowaniu dużych bloków danych z jednego miejsca do drugiego, to Erlang jest w tym całkiem dobry. (Pliki do gniazd TPC itp.)
Christian
4
Nie można aktualizować współużytkowanych bloków danych (w Erlang nie ma wskaźników), dlatego dane muszą być przekazywane między procesami, co z kolei przekłada się na nieefektywność.
jldupont
Na marginesie, uważam, że Ericsson powiedział, że Erlang osiągnął dostępność 9x9.
Jono
Zastanawiamy się nad poprawieniem słabości cytowanego tutaj Erlanga.
Shelby Moore III,
19

Erlang pochodzi z Ericsson i jest używany w niektórych systemach telekomunikacyjnych.

Poza telekomunikacją CouchDb (baza danych zorientowana na dokumenty) jest prawdopodobnie najlepiej znaną aplikacją Erlang.

Dlaczego Erlang? Z przeglądu (warto przeczytać w całości):

Modele dokumentów, widoku, bezpieczeństwa i replikacji, język zapytań specjalnego przeznaczenia, wydajny i niezawodny układ dysku oraz współbieżna i niezawodna natura platformy Erlang są starannie zintegrowane w celu zapewnienia niezawodnego i wydajnego systemu.

Brian Agnew
źródło
1
Dla niektórych swoich systemów telekomunikacyjnych.
jldupont
1
CouchDB nie jest bazą danych OO, jest bazą danych zorientowaną na dokumenty.
UDZIELAM STRASZNEJ PORADY
5
@ UDZIELAM STRASZNYCH PORAD - tak, oczywiście. Poprawione Zmieniłbym twój pseudonim :-)
Brian Agnew
Wcześniej był używany przez firmę Ericsson język współbieżny o nazwie PLEX (Programming Language for Exchanges), który do końca lat 80. prowadził cyfrowe centrale telefoniczne. Myślę, że erlang to wyrafinowana wersja PLEX.
user50619,
19

Zbudowaliśmy giełdę zakładów (inaczej rynek prognoz) za pomocą Erlanga. Wybraliśmy Erlang zamiast niektórych bardziej tradycyjnych języków finansowych (C ++, Java itp.) Ze względu na wbudowaną współbieżność. Rynki działają bardzo podobnie do central telefonicznych. Nasz CTO wygłosił przemówienie na temat korzystania z Erlanga podczas rozmowy CTO .

Używamy również CouchDB i RabbitMQ jako części naszego stosu.

Jason Trost
źródło
10
Tylko uwaga, link do twojej rozmowy jest teraz prywatny.
JDong,
15

Natknąłem się na to w trakcie pisania raportu: Erlang w Acoustic Ray Tracing .

Jest to raport z doświadczeń z próby grupy badawczej wykorzystania Erlanga do śledzenia promieni akustycznych. Odkryli, że chociaż łatwiej napisać program, mniej błędów, itp. Skalował gorzej i działał 10 razy wolniej niż porównywalny program C. Tak więc jednym z miejsc, w których może to nie być odpowiednie, są scenariusze intensywnie wykorzystujące procesor.

Zauważ jednak, że ludzie, którzy napisali ten artykuł, byli na etapie pierwszej nauki Erlanga i być może nie znali odpowiednich procedur programistycznych dla Erlanga intensywnie korzystającego z procesora.

CoderTao
źródło
2
Artykuł jest interesującą lekturą. To nie czyni bezpośrednio tego uogólnienia dotyczącego przydatności, wskazuje, że uznali Erlanga za nieodpowiednie, jeśli próbujesz wdrożyć na procesorze IBM Cell BE, znalezionym w Playstation 3. Stwierdza również, że nie mają doświadczenia z Erlangiem. Z większym doświadczeniem i odpowiednim sprzętem mogli dojść do innego wniosku. Mam wrażenie, że ich kod mógł obejmować użycie funkcji nierekurencyjnych; jeśli tak, to może w jakiś sposób wyjaśnić ich problemy z pamięcią, wyrzucaniem elementów bezużytecznych, awariami i wydajnością.
Tim
3
Myślę, że źle przeczytałeś artykuł. Niemożność uruchomienia na procesorze Cell była niefortunna, ale była to tylko dodatkowa uwaga. 12-krotna różnica w wydajności między implementacją C ++ a implementacją Erlang działającą na platformie x86 stanowiła prawdziwy problem, w połączeniu z faktem, że nie skalowała się liniowo. To powiedziawszy, byli nowi w języku i mogli obrać kilka niemądrych ścieżek kodu ... takie jest życie. Ciekawi mnie jednak skalowanie nieliniowe.
CoderTao
4
Poprawiono mi 12-krotny problem z wydajnością w porównaniu z Intelem i Cellem, ale uważam, że Erlang może być dobrze dostosowany do trudnych scenariuszy procesora. Nie oznacza to, że nie mają racji: to naprawdę może być problem, w którym dobre rozwiązanie C ++ zawsze będzie lepsze niż dobre rozwiązanie Erlang. Być może w pewnym stopniu przypomina to niektórym ludziom, że Erlang, jak każda inna technologia, nie jest srebrną kulą i będzie świecić tylko wtedy, gdy zostanie użyta we właściwy sposób we właściwym miejscu.
Tim
14

Najwyraźniej Yahoo użył Erlanga do zrobienia czegoś, co nazywa się Harvester. Artykuł na ten temat tutaj: http://www.ddj.com/architect/220600332

szkody
źródło
4
Czytanie z artykułu: „Chociaż Harvester został pierwotnie napisany w Perlu, wysokopoziomowe konstrukcje współbieżności Erlanga - wraz z zasadami projektowania OTP - sprawiają, że jest to idealna platforma do budowania niezawodnych, odpornych na błędy i skalowalnych aplikacji takich jak Harvester. jest bardziej skalowalny, dostępny, niezawodny i zdolny do przestrzegania ściślejszych umów dotyczących poziomu usług (SLA) na podstawie lżejszego kodu i mniej kosztownych prac programistycznych. ”. Dzięki bardzo :)
Roberto Aloi
11

Do czego służy 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/ (odpowiedź jerf)

Ważne jest, aby zdać sobie sprawę, że 4 części Erlanga: sam język, standardowe biblioteki maszyn wirtualnych (BEAM, hipe) (biblioteki plus na github, CEAN itp.) Oraz środowisko programistyczne są stale aktualizowane / rozszerzane / ulepszane. Na przykład pamiętam czytanie, że wydajność zmiennoprzecinkowa poprawiła się, gdy autor Wings3d zdał sobie sprawę, że należy ją poprawić (nie mogę znaleźć źródła tego). I ten facet właśnie o tym napisał:

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

Kilka lat temu publikacja Tima Braya w serwisie Broad Finder i wszyscy ludzie, którzy zaczynają tworzyć frameworki aplikacji internetowych i serwery HTTP, prowadzą (przynajmniej częściowo) do poprawy obsługi wyrażeń regularnych i plików binarnych. I jest cała praca nad integracją HiPE i SMP, projekt dializatora, testowanie wielu jednostek i budowanie bibliotek lib ...

Tak więc jego ulubiony punkt się rozwija. Trudne jest to, że oficjalne dokumenty nie nadążają za dobrze, a lista mailingowa i liczba blogosfer erlang szybko rosną

Gene T.
źródło
10

Używamy Erlanga, aby zapewnić moc mięśni zaplecza dla naszej gry Pixza, opartej na przeglądarce w czasie rzeczywistym . Nie używamy Flasha ani żadnych wtyczek innych firm, choć gra jest wieloosobowa w czasie rzeczywistym. Zamiast tego używamy czystych technik JS i COMET. Erlang wspiera „naprawdę rzeczywistość” Pixzy.

ErJab
źródło
10

Pracuję dla wooga, firmy zajmującej się grami społecznościowymi i używamy Erlanga do niektórych naszych backendów gier (w zasadzie http api dla milionów codziennych użytkowników) i usług pomocniczych, takich jak dostawca powiadomień push ios, płatności itp.

Wydaje mi się, że naprawdę świeci w zadaniach związanych z siecią i sprawia, że ​​łatwo jest ustrukturyzować i wdrożyć w nim proste i złożone usługi sieciowe. Dystrybucja, odporność na awarie i wydajność są łatwe do osiągnięcia, ponieważ Erlang ma już wbudowane niektóre kluczowe składniki i są one używane przez długi czas w krytycznej infrastrukturze produkcyjnej. Więc to nie jest jak „nowa technologia bioder 0.0.2 alfa”.

Wiem, że inne firmy produkujące gry również używają Erlanga. Powinieneś być w stanie znaleźć prezentacje na pokazie slajdów na ten temat.

John-Paul Bader
źródło
6

Erlang czerpie siłę z bycia językiem funkcjonalnym bez wspólnej pamięci. Dlatego IMO, Erlang nie będzie odpowiedni dla aplikacji, które wymagają manipulacji pamięcią w miejscu. Na przykład edycja obrazu.

emb
źródło