Gdzie i dlaczego jest używany Erlang? [zamknięte]

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

Wyjaśnienie, dlaczego jest on używany w konkretnym rozwiązaniu, a nie w innych językach programowania byłoby również bardzo mile widziane.

Wymienienie BAD Erlang case studies (przypadki, w których Erlang jest niewłaściwie używany) byłoby również interesujące.

Author: Roberto Aloi, 2009-10-28

11 answers

From Programowanie Erlang :

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

Wiele firm wykorzystuje Erlang w swoich systemach produkcyjnych:]}

Amazon wykorzystuje Erlang do implementacji SimpleDB, dostarczając usługi bazodanowe jako część Amazon Elastic Compute Cloud (EC2).

Yahoo! używa go w swojej usłudze social bookmarking, Pyszne, które ma więcej niż 5 milionów użytkowników i 150 milionów adresów URL z zakładkami.

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

* WhatsApp używa Erlang do uruchamiania serwerów wiadomości, osiągając do 2 milionów podłączonych użytkowników na serwer.

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

Motorola używa Erlanga w przetwarzaniu połączeń produkty z branży bezpieczeństwa publicznego.

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


Najpopularniejsze aplikacje open source Erlang obejmują:

* Modeler 3D skrzydła 3D, używany do modelowania i teksturowania wielokątów oczka.

• System Ejabberd , który zapewnia rozszerzalny protokół przesyłania wiadomości i obecności Komunikatory oparte na XMPP (IM) serwer aplikacji.

* The CouchDB " schema-less " document-oriented database, providing scalability w klastrach wielordzeniowych i wieloserwerowych.

* Biblioteka MochiWeb zapewniająca wsparcie dla budowania lekkich serwerów HTTP. Służy do zasilania serwisów takich jak MochiBot i MochiAds, które służą dynamicznie generowane treści do milionów widzów dziennie.

RabbitMQ , implementacja protokołu komunikacyjnego AMQP. AMQP jest emerging standard dla wysokowydajnych wiadomości korporacyjnych.

 191
Author: JRL,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-03-24 07:24:45

Ejabberd jest jedną z najbardziej znanych aplikacji Erlanga i tą, z którą nauczyłem się Erlanga.

Myślę, że jest to jeden z najciekawszych projektów do nauki Erlanga, ponieważ tak naprawdę opiera się na sile Erlanga. (Jednak niektórzy będą twierdzić, że nie jest to OTP, ale nie martw się, nadal jest skarb Wielkiego kodu w środku...)

Dlaczego ?

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

Więc mamy 2 Cechy:

  • obsługa wielu połączeń
  • route messages given some aspects of the message
To są przykłady, w których Erlang świeci.

Obsługa wielu połączeń

Jest to bardzo łatwe do zbudowania skalowalne nieblokujące serwery TCP / IP z erlang. W rzeczywistości został zaprojektowany, aby rozwiązać ten problem. I biorąc pod uwagę, że może wywoływać setki tysięcy procesów (a nie wątki , jest to podejście typu share-nothing, które jest prostsze w projektowaniu), ejabberd jest zaprojektowany jako zestaw procesów erlang (które mogą być dystrybuowane na kilku serwerach):]}

  • proces połączenia z klientem
  • proces routera
  • proces czatu
  • serwer do serwera procesy
Wszyscy wymieniają się wiadomościami.

Wiadomości trasy podane niektóre aspekty wiadomości

Inną bardzo sympatyczną cechą Erlanga jest dopasowanie wzorca (pattern matching) (15). 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 funkcji access. Erlang wybierze najbardziej odpowiednią wersję, biorąc pod uwagę otrzymane argumenty. (Config jest strukturą typu #config, która ma atrybut type).

Oznacza to, że tworzenie reguł biznesowych jest bardzo proste i dużo jaśniejsze niż łączenie if/else lub switch/case.

To wrap up

Pisanie skalowalnych serwerów, o to właśnie chodzi w erlangu. Wszystko jest zaprojektowane, aby to ułatwić. Do dwóch poprzednich funkcji dodałbym:

  • hot code upgrade
  • mnesia, rozproszona relacyjna baza danych (zawarta w dystrybucji bazowej)
  • mochiweb, on na czym opiera się większość serwerów http erlang]}
  • obsługa binarna (dekodowanie i kodowanie protokołu binarnego łatwe jak zawsze)
  • wielka społeczność z wielkimi projektami open source(ejabberd, couchdb ale także webmachine, riak i mnóstwo biblioteki bardzo łatwe do osadzenia)

Mniej LOCs

Jest też Ten artykuł od Richarda Jonesa. Przerobił aplikację z C++ na erlang: 75% mniej linii w erlang.

 75
Author: Eric,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-10-20 21:42:37

Lista najczęstszych aplikacji dla Erlang jak zostały objęte (CouchDb, ejabberd, RabbitMQ itp), ale chciałbym przyczynić się do następujących.

Powodem, dla którego jest on używany w tych aplikacjach, jest podstawowa siła Erlang: zarządzanie aplikacją dostępność .

Erlang został zbudowany od podstaw z myślą o środowisku telco, które wymaga, aby systemy spełniały wymagania dostępności co najmniej 5x9(99,999% rocznego czasu sprawności). Ta liczba nie pozostawia wiele miejsca na przestoje w ciągu roku! Z tego powodu Erlang jest wyposażony w następujące funkcje (niewyczerpujące):

  • Skalowalność pozioma (Możliwość łatwego rozdzielania zadań między maszynami poprzez bezproblemową komunikację wewnątrz i między maszynami). Wbudowana baza danych (Mnesia) jest również dystrybuowana przez naturę.

  • Skalowalność pionowa (możliwość dystrybucji zadań między zasobami przetwarzania na tej samej maszynie): SMP jest obsługiwane natywnie.

  • Kod Hot-Swapping : Możliwość aktualizacji / aktualizacji kodu live podczas operacji

  • Asynchroniczny: prawdziwy świat jest asynchroniczny, więc Erlang został zbudowany, aby uwzględnić tę podstawową naturę. Jedna cecha, która przyczynia się do tego wymogu: "wolne" procesy Erlanga (>32000 mogą działać jednocześnie).

  • Nadzór : wiele różnych strategii nadzoru procesu ze strategiami restartu, progami itp. Pomaga łatwiejsze odzyskiwanie po narożnych przypadkach / przeciążeniu, zachowując ślady problemów do późniejszego rozwiązywania problemów, analizy pośmiertnej itp.

  • Zarządzanie zasobami : strategie planowania, monitorowanie zasobów itp. Zauważ, że domyślny harmonogram procesów działa ze skalowaniem O(1).

  • Debugowanie na żywo: możliwość "logowania" do aktywnych węzłów do woli pomaga rozwiązywać problemy. Debugowanie może być wykonywane na żywo z pełnym dostępem do dowolnego stanu pracy procesu. Również wbudowane narzędzia raportowania błędów są bardzo przydatne (ale czasami nieco niewygodne w użyciu).

Oczywiście mógłbym mówić o jego funkcjonalnych korzeniach, ale ten aspekt jest nieco prostopadły do głównego celu (wysoka dostępność). Głównym składnikiem funkcjonalnego charakteru, który przyczynia się wielkodusznie do celu docelowego jest, IMO: "nie dzielić się niczym". Ta cecha pomaga ograniczyć "skutki uboczne" i zmniejszyć potrzebę kosztownej synchronizacji mechanizmy.

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

Erlang nie jest zbyt dobry w przetwarzaniu dużych bloków danych.

 45
Author: jldupont,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-10-28 13:29:58

Erlang pochodzi od Ericssona i jest używany w niektórych systemach telekomunikacyjnych.

Poza telekomunikacją, CouchDb (baza danych zorientowana na dokumenty) jest prawdopodobnie najbardziej znaną aplikacją Erlanga do tej pory.

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

Dokument, widok, Bezpieczeństwo i modele replikacji, specjalne purpose query language, the efficient i solidny układ dysku oraz współbieżny i wiarygodny charakter Platforma Erlang są starannie zintegrowany dla niezawodnego i wydajny system.

 19
Author: Brian Agnew,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-11-05 22:05:52

Zbudowaliśmy giełdę zakładów (aka rynek przewidywania) przy użyciu Erlang. Wybraliśmy Erlang zamiast niektórych bardziej tradycyjnych języków finansowych (C++, Java itp.) ze względu na wbudowaną współbieżność. Rynki funkcjonują bardzo podobnie do giełd telefonicznych. Nasz CTO wygłosił wykład na temat korzystania z Erlang na CTO talk.

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

 19
Author: Jason Trost,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-05-08 03:23:55

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

To raport z badań nad próbą wykorzystania Erlanga do śledzenia promieni akustycznych. Okazało się, że o ile łatwiej jest napisać program, mniej buggy, itp. Skalował się gorzej i działał 10x wolniej niż porównywalny program C. Więc jednym z miejsc, w którym może nie być dobrze dostosowane są scenariusze intensywne procesora.

Zauważ jednak, że ludzie napisali gazetę były w fazie pierwszego uczenia się Erlang, i może nie znać właściwych procedur rozwoju dla CPU intensywne Erlang.

 14
Author: CoderTao,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-05-08 02:57:07

Najwyraźniej Yahoo wykorzystało Erlanga do stworzenia czegoś, co nazywa kombajnem. Artykuł o tym tutaj: http://www.ddj.com/architect/220600332

 13
Author: harms,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-10-28 10:47:58

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 uświadomić sobie, że Erlang składa się z 4 części: samego języka, standardowych bibliotek VMs (BEAM, hipe) (Plus Moduły na GitHubie, CEAN itp.), a środowisko programistyczne to stale aktualizowane / rozszerzane/ulepszane. Na przykład, pamiętam, że czytałem, że wydajność zmiennoprzecinkowa poprawiła się, gdy autor wings3d zdał sobie sprawę, że trzeba ją poprawić (nie mogę znaleźć źródła na to). A ten facet właśnie o tym napisał:

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

Kilka lat temu szeroka reklama Tima Bray ' a w Finderze i wszyscy ludzie zaczynający tworzyć frameworki aplikacji internetowych i serwery HTTP prowadzą (przynajmniej częściowo) do ulepszonych regex i binariów obsługa. Jest cała praca integrująca HiPE i SMP, projekt dialyzer, testowanie wielu jednostek i tworzenie bibliotek ..

Więc jego sweet spot się rozszerza, trudne jest to, że oficjalne dokumenty nie nadążają za bardzo, a lista dyskusyjna i objętość blogosfery Erlanga szybko rosną

 11
Author: Gene T,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-10-30 19:08:01

Używamy Erlang, aby zapewnić moc mięśni zaplecza dla naszej naprawdę przeglądarkowej gry wieloosobowej w czasie rzeczywistym Pixza. Nie używamy Flash lub innych wtyczek innych firm, choć gra jest w czasie rzeczywistym multi-player. Zamiast tego używamy czystych technik JS i COMET. A Erlang wspiera" realtimeless " Pixzy.

 10
Author: ErJab,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-05-25 09:32:28

Pracuję dla wooga, firmy zajmującej się grami społecznościowymi i korzystamy z Erlang dla niektórych naszych backendów gier (zasadniczo http API dla milionów użytkowników dziennie) i usług pomocniczych, takich jak dostawca powiadomień push IOS, płatności itp.

Myślę, że to naprawdę świeci w zadaniach związanych z siecią i sprawia, że jest to rodzaj prostego do struktury i wdrożenia prostych i złożonych usług sieciowych w it. Dystrybucja, tolerancja błędów i wydajność są łatwe do osiągnięcia, ponieważ Erlang ma już pewne z kluczowych składników wbudowanych i są one używane przez długi czas w krytycznej infrastrukturze produkcyjnej. Więc to nie jest jak "nowa technologia hip thing 0.0.2 alpha".

Wiem, że inne firmy gier również używają Erlang. Powinieneś być w stanie znaleźć prezentacje na slideshare na ten temat.

 9
Author: John-Paul Bader,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-02-22 18:45:41

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

 6
Author: emb,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-10-28 23:58:06