Erlangはどこで使用されていますか?その理由は?[閉まっている]


258

Erlangが正常に使用されているかどうかにかかわらず、最も一般的なアプリケーション/ウェブサイト/ソリューションのリストを知りたいのですが。

他のプログラミング言語ではなく、特定のソリューションに使用される理由を説明していただければ幸いです。

BAD Erlangのケーススタディ(Erlangが誤用されているケース)をリストすることも興味深いでしょう。


13
悪いケーススタディの問題は、彼らが本当に有名になったり、その日の光を見たりしないことです。
エリック、

2
WHATSAPPはErlangを使用しています!詳細についてはGoogle it
Muzaaya Joshua 2014

18
なぜこれが閉じているのですか?私は正確な質問をググって、ここに導かれました。
canhazbits 2017

EMqttは非常に人気のあるMQTTブローカーであり、現在、100万人のユーザーサステナビリティを備えたアーランで開発されたIoTで多く使用されています。
LAMRIN TAWSRAS 2018年

回答:


214

プログラミングErlangから:

代替テキストhttp://bks8.books.google.com/books?id=Qr_WuvfTSpEC&printsec=frontcover&img=1&zoom=5&sig=ACfU3U2F4YY4KqO0vCuZ4WEZjdE2yFFvvg

多くの企業が本番システムでErlangを使用しています。

AmazonはErlangを使用してSimpleDBを実装し、Amazon Elastic Compute Cloud(EC2)の一部としてデータベースサービスを提供します。

Yahoo! は500万人以上のユーザーと1億5,000万のブックマークされたURLを持つソーシャルブックマークサービスDeliciousで使用しています。

FacebookはErlangを使用してチャットサービスのバックエンドを強化し、1億人を超えるアクティブユーザーを処理します。

WhatsAppはErlangを使用してメッセージングサーバーを実行し、サーバーあたり最大200万人の接続ユーザーを実現します。

T-Mobileは、SMSおよび認証システムでErlangを使用しています。

Motorolaは、公安業界の呼処理製品でErlangを使用しています。

エリクソンは、世界中のGPRSおよび3Gモバイルネットワークで使用されているサポートノードでErlangを使用しています。


最も人気のあるオープンソースのErlangアプリケーションには次のものがあります。

•3DサブディビジョンモデラーWings 3D。ポリゴンメッシュのモデリングとテクスチャリングに使用されます。

Ejabberdシステム。これは、拡張メッセージングおよびプレゼンスプロトコル(XMPP)ベースのインスタントメッセージング(IM)アプリケーションサーバーを提供します。

CouchDBの「スキーマレス」ドキュメント指向データベース。マルチコアおよびマルチサーバークラスター全体にスケーラビリティを提供します。

• 軽量HTTPサーバーの構築をサポートするMochiWebライブラリ。MochiBotやMochiAdsなどのサービスを強化するために使用され、動的に生成されたコンテンツを数百万人の視聴者に毎日提供しています。

RabbitMQ、AMQPメッセージングプロトコル実装。AMQPは、高性能エンタープライズメッセージングの新しい標準です。


27
Ramiz Uddin-「いいえ、違いますか?」
グレートタートル

10
@RamizUddin「いいえ、違いますか?」(私は数年前にあなたの名前の前の@を忘れたGreat Turtleからの質問を繰り返しています-それにもかかわらずそれは答えに値すると思います)
Walter Tross

4
Facebookは離れてのerlangからの切り替え:facebook.com/notes/facebook-engineering/...quora.com/...
A. Binzxxxxxx

FacebookはWhatsAppのシンプルさとパフォーマンスを台無しにしました。
Krishnadas PC

本の壊れたリンクを更新できますか?
pradyumnad

83

ejabberdは、最もよく知られているerlangアプリケーションの1つであり、私がerlangで学んだものです。

それは本当にアーランの強みに基づいているので、アーランを学ぶための最も興味深いプロジェクトの1つだと思います。(ただし、OTPではないと主張する人もいますが、内部にはすばらしいコードが山ほど残っているので心配しないでください...)

どうして ?

XMPPサーバー(ejabberdなど)は、エンドユーザー間でメッセージをルーティングする高レベルのルーターと見なすことができます。もちろん他の機能もありますが、これはインスタントメッセージングサーバーの最も重要な側面です。多くのメッセージを同時にルーティングし、多くのTCP / IP接続を処理する必要があります。

したがって、2つの機能があります。

  • 多くの接続を処理する
  • メッセージのいくつかの側面を指定してメッセージをルーティングする

これらはerlangが優れている例です。

多くの接続を処理する

erlangを使用して、スケーラブルなノンブロッキングTCP / IPサーバーを構築するのは非常に簡単です。実際、この問題を解決するために設計されました。そして、それが数十万のプロセスを生成できることを考えると(スレッドではなく、共有なしのアプローチであり、設計が簡単です)、ejabberdは(複数のサーバーに分散できる)erlangプロセスのセットとして設計されます。

  • クライアント接続プロセス
  • ルータープロセス
  • チャットルームプロセス
  • サーバー間プロセス

それらのすべてがメッセージを交換します。

メッセージのいくつかの側面を指定してメッセージをルーティングする

erlangのもう1つの非常に魅力的な機能は、パターンマッチングです。言語全体で使用されます。

たとえば、次の場合:

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.

これは、access関数の5つの​​異なるバージョンです。Erlangは受け取った引数に基づいて、最も適切なバージョンを選択します。(属性を持つConfig型の構造です)。#configtype

つまり、連鎖if/elseswitch/caseビジネスルールを作成するよりも、非常に簡単で明確です。

最後に

スケーラブルなサーバーを書くことは、erlangの核心です。すべてが簡単に行えるように設計されています。以前の2つの機能に追加します。

  • ホットコードアップグレード
  • mnesia、分散リレーショナルデータベース(ベースディストリビューションに含まれる)
  • mochiweb、ほとんどのhttp erlangサーバーが構築されている
  • バイナリサポート(バイナリプロトコルのデコードとエンコードはこれまでになく簡単)
  • 偉大なオープンソースプロジェクトと素晴らしいコミュニティ(ejabberdcouchdbだけでなくwebmachineriak非常に簡単に埋め込むと、ライブラリのスルー)

LOCの減少

Richard Jonesからのこの記事もあります。彼はアプリケーションをC ++からerlangに書き直しました:erlangの75%少ない行。


6
公平を期すために、現代の言語で書き直されたほとんどすべてのC ++コードは、LOCを削減します。
Zack

52

カバーされているErlangの最も一般的なアプリケーションのリスト(CouchDb、ejabberd、RabbitMQなど)ですが、以下を提供したいと思います。

これらのアプリケーションで使用される理由は、Erlangの中核となる強みであるアプリケーションの可用性の管理にあります

Erlangは、システムが少なくとも5x9の可用性(年間稼働率99.999%)を満たすことを要求する電話会社の環境のためにゼロから構築されました。この数値では、1年間のダウンタイムの余地はあまりありません。このため、Erlangには主に次の機能が搭載されています(完全ではありません)。

  • 水平方向のスケーラビリティー(シームレスなマシン内およびマシン間通信により、マシンの境界を越えてジョブを簡単に分散できる機能)。組み込みデータベース(Mnesia)も自然に配布されます。

  • 垂直スケーラビリティー(同じマシン上の処理リソース全体にジョブを分散する能力):SMPはネイティブで処理されます。

  • コードのホットスワップ:操作中にライブでコードを更新/アップグレードする機能

  • 非同期:実世界は非同期であるため、Erlangはこの基本的な性質を考慮して構築されています。この要件に貢献する1つの機能:Erlangの「フリー」プロセス(> 32000は同時に実行できます)。

  • 監視:再起動戦略、しきい値などを使用したプロセス監視のためのさまざまな戦略

  • リソース管理:スケジューリング戦略、リソース監視など。デフォルトのプロセススケジューラはO(1)スケーリングで動作することに注意してください。

  • ライブデバッグ:ライブノードに自由に「ログイン」できるため、トラブルシューティングアクティビティに役立ちます。デバッグは、任意のプロセスの実行状態へのフルアクセスでライブで行うことができます。また、組み込みのエラー報告ツールは非常に便利です(ただし、使いにくい場合もあります)。

もちろん、その機能的なルーツについて話すこともできますが、この側面は主な目標(高可用性)とは多少直交しています。ターゲットの目標に寛大に貢献する機能的性質の主要なコンポーネントは、IMO:「何も共有しない」です。この特性は、「副作用」を抑え、コストのかかる同期メカニズムの必要性を減らすのに役立ちます。

これらすべての特性が、ビジネスに不可欠なアプリケーションでErlangを使用するケースを拡張するのに役立つと思います。

Erlangが得意ではないことの1つは、大きなデータブロックの処理です。


4
次のことを説明してください。「Erlangが本当に得意ではないことの1つは、大きなデータブロックの処理です。」
キリルトロフィモフ

9
彼はmpegデータをデコードするようなものを意味します。Erlangが最適化されていない数値計算が多すぎます。処理がデータの大きなブロックをある場所から別の場所にシャッフルするだけの場合、Erlangはそれで非常に優れています。(TPCソケットへのファイルなど)
クリスチャンは

4
データの共有ブロックを更新することはできません(Erlangにはポインターがありません)。したがって、データはプロセス間でやり取りされる必要があり、非効率に変換されます。
jldupont 2009年

余談として、エリクソンは、Erlangが9x9の可用性を達成したと私は信じています。
Jono

私たちはしている考えのErlangの弱点はここに引用した時に改善します。
シェルビームーアIII

19

ErlangはEricssonの出身で、一部の電気通信システムで使用されています。

テレコム以外では、CouchDb(ドキュメント指向データベース)はおそらくこれまでで最もよく知られたErlangアプリケーションです。

なぜアーラン?概要から(完全に読む価値があります):

ドキュメント、ビュー、セキュリティおよびレプリケーションモデル、専用クエリ言語、効率的で堅牢なディスクレイアウト、Erlangプラットフォームの並行性と信頼性の性質はすべて、信頼性と効率の高いシステムのために慎重に統合されています。


1
以下のためのいくつかの彼らのtelecommsシステムの。
jldupont 2009年

1
CouchDBはOOデータベースではなく、ドキュメント指向のデータベースです。
ひどい助言を与える2009年

5
@私はひどい助言を与える-はい、もちろん。修正。私はあなたのモニカを変更します:-)
ブライアン・アグニュー

エリクソンが使用していたPLEX(Programming Language for Exchanges)と呼ばれる以前の同時実行言語は、80年代後半から現在までデジタル電話交換を行っていました。アーランはPLEXの洗練されたバージョンだと思います。
user50619

19

Erlangを使用して、賭け取引所(別名予測市場)を構築しました。組み込みの同時実行性のため、私たちはいくつかのより伝統的な金融言語(C ++、Javaなど)よりもErlangを選択しました。市場は電話交換と非常によく似ています。私たちのCTOは、CTOトークでのErlangの使用について講演しました

スタックの一部としてCouchDBとRabbitMQも使用します。


10
ちなみに、あなたの講演へのリンクは非公開になりました。
JDong

15

私はこれを報告書を作成している最中です:アコースティックレイトレーシングにおけるアーラン

アーランを音響レイトレーシングに使用しようとする研究グループの試みに関する体験レポートです。彼らは、プログラムを書く方が簡単であるが、バグが少ないなどを発見しました。これは、スケーリングが悪く、同等のCプログラムよりも10倍遅く実行されました。したがって、CPUを集中的に使用するシナリオが適しているとは限りません。

ただし、この論文を書いた人々は最初にErlangを学ぶ段階にあり、CPUを集中的に使用するErlangの適切な開発手順を知らなかった可能性があることに注意してください。


2
論文は興味深い読み物です。プレイステーション3にあるIBM Cell BEプロセッサーにデプロイしようとした場合、Erlangが不適切であると彼らが判断したことを示しています。より多くの経験と適切なハードウェアがあれば、彼らは異なる結論に達したかもしれません。彼らのコードには末尾再帰以外の関数の使用が含まれている可能性があるという印象を受けます。もしそうなら、それはメモリ、ガベージコレクション、クラッシュ、パフォーマンスに関する彼らの問題を説明するためにいくらかの方法で行くかもしれません。
ティム

3
私はあなたがその記事を誤って読んだと思います。Cellプロセッサーで実行できなかったのは残念なことでしたが、それは余談でした。C86とx86プラットフォームで実行されているErlang実装との間の12倍のパフォーマンスの違いは、直線的にスケーリングしないという事実と相まって、実際の問題でした。とは言っても、それらはその言語にとっては初めてであり、いくつかの賢明でないコードパスをとった可能性があります...それは人生です。しかし、非線形スケーリングに興味があります。
CoderTao 2009年

4
Intel対Cellに関する12倍のパフォーマンスの問題は修正されたと思いますが、ErlangはCPUが難しいシナリオに非常に適していると私は主張します。これは、それらが正しくないと言っているわけではありません。これは、優れたC ++ソリューションが常に優れたErlangソリューションに勝る問題である可能性があります。おそらくこれは、Erlangは他のテクノロジーと同様に特効薬ではなく、適切な場所で適切な方法で使用した場合にのみ光るということを、一部の人々に思い出させるためにある程度役立つでしょう。
ティム

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's answer)

Erlangの4つの部分:言語自体、VM(BEAM、hipe)標準ライブラリ(およびgithub、CEANなどのモジュール)、および開発環境が着実に更新/拡張/改善されていることを認識することが重要です。たとえば、Wings3dの作成者が改善する必要があることに気付いたときに浮動小数点のパフォーマンスが向上したことを読んだことを覚えています(これのソースが見つかりません)。そしてこの男はそれについてただ書いた:

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

数年前、Tim BrayのWide Finderの宣伝、およびWebアプリフレームワークとHTTPサーバーの開発を始めたすべての人々は、(少なくとも部分的に)正規表現とバイナリの処理を改善しました。そして、HiPEとSMPを統合するすべての作業、ダイアライザープロジェクト、複数のユニットテスト、ビルドライブラリの急上昇などがあります。

したがって、そのスイートスポットは拡大しています。難しいのは、公式ドキュメントが追いつけず、メーリングリストとerlangブロゴスフィアの量が急速に増加していることです。


10

Erlangを使用して、本当にリアルタイムのブラウザーベースのマルチプレイヤーゲームPixzaにバックエンドの筋肉力を提供しています。ゲームはリアルタイムマルチプレイヤーですが、Flashやその他のサードパーティのプラグインは使用していません。代わりに、純粋なJSおよびCOMETテクニックを使用します。また、ErlangはPixzaの「本当にリアルタイム性」をサポートしています。


10

私はソーシャルゲーム会社のwoogaで働いており、一部のゲームバックエンド(基本的には何百万人ものユーザーのためのhttp apis)とiosプッシュ通知プロバイダー、支払いなどの補助サービスにErlangを使用しています。

これはネットワーク関連のタスクで本当に優れていると思います。シンプルで複雑なネットワークサービスを簡単に構造化して実装することは、一種の簡単なことです。配布、フォールトトレランス、およびパフォーマンスは、Erlangにすでにいくつかの主要な要素が組み込まれており、重要な生産インフラストラクチャで長期間使用されているため、簡単に達成できます。したがって、「新しいヒップテクノロジーのモノ0.0.2アルファ」とは異なります。

他のゲーム会社もErlangを使用していることは知っています。あなたはそれについてのスライドシェア上のプレゼンテーションを見つけることができるはずです。


6

Erlangの強みは、共有メモリを持たない関数型言語であることです。したがって、IMO、Erlangは、適切なメモリ操作を必要とするアプリケーションには適していません。たとえば画像編集。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.