Erlangが使用されている最も一般的なアプリケーション/ウェブサイト/ソリューションのリスト、成功したかどうかを知りたいです。
他のプログラミング言語の代わりに特定のソリューションに使用される理由を説明することも非常にありがたいです。
BAD Erlangのケーススタディ(Erlangが誤用されているケース)をリストすることも興味深いでしょう。
FromProgramming Erlang:
•AmazonはErlangを使用してSimpleDBを実装し、Amazon Elastic Compute Cloud(EC2)の一部としてデータベースサービスを提供します。
•Yahoo!は、500万人以上のユーザーと1億5千万のブックマークされたURLを持つソーシャルブックマークサービスDeliciousで使用しています。
•FacebookはErlangを使用してチャットサービスのバックエンドを強化し、1億人以上のアクティブユーザーを処理します。
•WhatsAppは、Erlangを使用してメッセージングサーバーを実行し、サーバーあたり最大200万人の接続ユーザーを達成します。
•T-Mobileは、SMSおよび認証システムでErlangを使用します。
•Motorolaは、公安業界の呼処理製品でErlangを使用しています。
•Ericssonは、世界中のGPRSおよび3Gモバイルネットワークで使用されるサポートノードでErlangを使用します。
•3DサブディビジョンモデラーWings 3D。ポリゴンメッシュのモデリングとテクスチャリングに使用されます。
•Ejabberdシステム。これは、Extensible Messaging and Presence Protocol(XMPP)ベースのインスタントメッセージング(IM)アプリケーションサーバーを提供します。
•CouchDB「スキーマレス」ドキュメント指向データベース。マルチコアおよびマルチサーバークラスターにわたるスケーラビリティを提供します。
•MochiWebライブラリ。軽量HTTPサーバーの構築をサポートします。これは、毎日何百万人もの視聴者に動的に生成されたコンテンツを提供するMochiBotやMochiAdsなどのサービスの提供に使用されます。
•RabbitMQ、AMQPメッセージングプロトコルの実装。 AMQPは、高性能エンタープライズメッセージングの新しい標準です。
ejabberd は、最もよく知られているerlangアプリケーションの1つであり、erlangで学んだものでもあります。
アーランを学ぶ上で最も興味深いプロジェクトの1つだと思います。アーランの強みに基づいているからです。 (ただし、OTPではないと主張する人もいますが、すばらしいコードがたくさん残っていることを心配しないでください...)
なぜ?
XMPPサーバー(ejabberdなど)は、エンドユーザー間でメッセージをルーティングする高レベルのルーターと見なすことができます。もちろん他の機能もありますが、これはインスタントメッセージングサーバーの最も重要な側面です。多くのメッセージを同時にルーティングし、多くのTCP/IP接続を処理する必要があります。
したがって、2つの機能があります。
これらはアーランが輝く例です。
多くの接続を処理する
アーランを使用すると、スケーラブルなノンブロッキングTCP/IPサーバーを簡単に構築できます。実際、この問題を解決するために設計されました。そして、数十万のプロセスを生成できることを考えると(スレッドではなく、共有なしのアプローチであり、設計がより簡単です)、ejabberdはアーランプロセスのセットとして設計されています(複数のサーバーに分散可能):
それらはすべてメッセージを交換します。
メッセージのいくつかの側面が与えられたメッセージをルーティングする
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
は、type
属性を持つ#config
型の構造です)。
つまり、if/else
またはswitch/case
をチェーン化してビジネスルールを作成するよりも非常に簡単で明確です。
最後に
スケーラブルなサーバーを作成することは、アーランのポイントです。これが簡単になるようにすべてが設計されています。以前の2つの機能に追加します:
mnesia
、分散リレーショナルデータベース(ベースディストリビューションに含まれる)mochiweb
、ほとんどのhttp erlangサーバーがその上に構築されますejabberd
、couchdb
だけでなく、 webmachine
、 riak
および組み込みが非常に簡単な多数のライブラリを備えた優れたコミュニティ)少ないLOC
この記事 Richard Jonesからもあります。彼はアプリケーションをC++からアーランに書き直しました。アーランの行数が75%少なくなりました。
Erlangの最も一般的なアプリケーションのリスト(CouchDb、ejabberd、RabbitMQなど)がカバーされていますが、以下に貢献したいと思います。
これらのアプリケーションで使用される理由は、Erlangの核となる強さ、つまりアプリケーションの管理可用性にあります。
Erlangは、システムが少なくとも5x9の可用性(年間稼働時間99.999%)を満たすことを必要とする電話会社環境のためにゼロから構築されました。この数値は、1年間のダウンタイムの余地をあまり残していません!このため、主に、Erlangには次の機能が含まれています(網羅的ではありません):
水平スケーラビリティ(シームレスなマシン内およびマシン間通信により、マシンの境界を越えてジョブを簡単に分散する機能)。ビルトインデータベース(Mnesia)も元々配布されています。
垂直スケーラビリティ(同じマシン上の処理リソースにジョブを分散する機能):SMPはネイティブに処理されます。
Code Hot-Swapping:操作中にコードを更新/アップグレードする機能live
非同期:実世界は非同期であるため、Erlangはこの基本的な性質を考慮して構築されました。この要件に貢献する1つの機能:Erlangの「無料」プロセス(> 32000は同時に実行できます)。
監督:再起動戦略、しきい値などを使用したプロセス監督のためのさまざまな戦略。
リソース管理:スケジューリング戦略、リソース監視など。デフォルトのプロセススケジューラはO(1)スケーリングで動作することに注意してください。
ライブデバッグ:ライブノードに「ログイン」する機能は、アクティビティのトラブルシューティングに役立ちます。デバッグは、任意のプロセスの実行状態へのフルアクセスでライブで実行できます。また、組み込みのエラーレポートツールは非常に便利です(ただし、使いにくい場合もあります)。
もちろん、その機能的なルーツについて話すこともできますが、この側面は主な目標(高可用性)とは多少直交しています。ターゲットの目標に寛大に貢献する機能的性質の主要なコンポーネントは、IMO:「何も共有しない」です。この特性は、「副作用」を抑制し、コストのかかる同期メカニズムの必要性を減らします。
これらの特性はすべて、ビジネスに不可欠なアプリケーションでErlangを使用するケースを拡張するのに役立つと思います。
Erlangがあまり得意ではないことの1つ:大きなデータブロックを処理します。
これに遭遇したのは、レポートを作成中です: Erlang in Acoustic Ray Tracing 。
これは、音響光線追跡にErlangを使用する研究グループの試みに関する経験報告です。彼らは、プログラムを書くのは簡単であるがバグが少ないなどのことを発見した。それはスケーリングが悪く、同等のCプログラムよりも10倍遅い。そのため、適切ではない可能性がある1つのスポットは、CPUを集中的に使用するシナリオです。
ただし、この論文を書いた人々はErlangを初めて学ぶ段階にあり、CPUを集中的に使用するErlangの適切な開発手順を知らなかったかもしれないことに注意してください。
どうやら、YahooはErlangを使用してHarvesterと呼ばれるものを作成したようです。ここに関する記事: http://www.ddj.com/architect/220600332
アーランは何に適していますか?
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を統合するすべての作業、dialyzerプロジェクト、複数のユニットテスト、ビルドライブラリが生まれます。
そのスイートスポットは拡大しています。難しいのは、公式ドキュメントが十分に対応できず、メーリングリストとアーランブロゴスフィアのボリュームが急速に増加していることです。
私たちは、Erlangを使用して、本当にリアルタイムなブラウザベースのマルチプレイヤーゲーム Pixza のバックエンドマッスルパワーを提供しています。ゲームはリアルタイムマルチプレイヤーですが、Flashや他のサードパーティプラグインは使用しません。代わりに、純粋なJSおよびCOMETテクニックを使用します。また、ErlangはPixzaの「リアルタイム性」をサポートしています。
私はソーシャルゲーム会社woogaで働いています。ゲームバックエンドの一部(基本的には何百万人ものユーザー向けのhttp api)と、iosプッシュ通知プロバイダー、支払いなどの補助サービスにErlangを使用しています。
ネットワーク関連のタスクで本当に輝いていると思うし、単純で複雑なネットワークサービスを同様に構造化して実装するのも簡単だと思う。 Erlangにはすでにいくつかの重要な要素が組み込まれており、重要な生産インフラストラクチャで長い間使用されているため、配布、フォールトトレランス、およびパフォーマンスを簡単に実現できます。そのため、「新しいヒップテクノロジーのモノ0.0.2アルファ」とは異なります。
他のゲーム会社もErlangを使用していることを知っています。あなたはそれについてスライドシェアでプレゼンテーションを見つけることができるはずです。
Erlangは、共有メモリのない関数型言語であることからその強みを引き出しています。したがって、IMO、Erlangはインプレースメモリ操作を必要とするアプリケーションには適していません。たとえば、画像編集。