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).
erlang
case-study
Roberto Aloi
źródło
źródło
Odpowiedzi:
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.
źródło
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:
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):
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:
To 5 różnych wersji
access
funkcji. Erlang wybierze najbardziej odpowiednią wersję, biorąc pod uwagę otrzymane argumenty. (Config
jest strukturą typu,#config
która matype
atrybut).Oznacza to, że jest to bardzo łatwe i znacznie bardziej przejrzyste niż tworzenie łańcuchów
if/else
lubswitch/case
tworzenie 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:
mnesia
, rozproszona relacyjna baza danych (zawarta w dystrybucji podstawowej)mochiweb
, na których zbudowana jest większość serwerów HTTP Erlangejabberd
,couchdb
ale takżewebmachine
,riak
i 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.
źródło
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.
źródło
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):
źródło
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.
źródło
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.
źródło
Najwyraźniej Yahoo użył Erlanga do zrobienia czegoś, co nazywa się Harvester. Artykuł na ten temat tutaj: http://www.ddj.com/architect/220600332
źródło
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ą
źródło
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.
źródło
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.
źródło
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.
źródło