Erlangが正常に使用されているかどうかにかかわらず、最も一般的なアプリケーション/ウェブサイト/ソリューションのリストを知りたいのですが。
他のプログラミング言語ではなく、特定のソリューションに使用される理由を説明していただければ幸いです。
BAD Erlangのケーススタディ(Erlangが誤用されているケース)をリストすることも興味深いでしょう。
Erlangが正常に使用されているかどうかにかかわらず、最も一般的なアプリケーション/ウェブサイト/ソリューションのリストを知りたいのですが。
他のプログラミング言語ではなく、特定のソリューションに使用される理由を説明していただければ幸いです。
BAD Erlangのケーススタディ(Erlangが誤用されているケース)をリストすることも興味深いでしょう。
回答:
プログラミング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を使用しています。
•3DサブディビジョンモデラーWings 3D。ポリゴンメッシュのモデリングとテクスチャリングに使用されます。
• Ejabberdシステム。これは、拡張メッセージングおよびプレゼンスプロトコル(XMPP)ベースのインスタントメッセージング(IM)アプリケーションサーバーを提供します。
• CouchDBの「スキーマレス」ドキュメント指向データベース。マルチコアおよびマルチサーバークラスター全体にスケーラビリティを提供します。
• 軽量HTTPサーバーの構築をサポートするMochiWebライブラリ。MochiBotやMochiAdsなどのサービスを強化するために使用され、動的に生成されたコンテンツを数百万人の視聴者に毎日提供しています。
• RabbitMQ、AMQPメッセージングプロトコル実装。AMQPは、高性能エンタープライズメッセージングの新しい標準です。
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
型の構造です)。#config
type
つまり、連鎖if/else
やswitch/case
ビジネスルールを作成するよりも、非常に簡単で明確です。
最後に
スケーラブルなサーバーを書くことは、erlangの核心です。すべてが簡単に行えるように設計されています。以前の2つの機能に追加します。
mnesia
、分散リレーショナルデータベース(ベースディストリビューションに含まれる)mochiweb
、ほとんどのhttp erlangサーバーが構築されているejabberd
、couchdb
だけでなくwebmachine
、riak
非常に簡単に埋め込むと、ライブラリのスルー)LOCの減少
Richard Jonesからのこの記事もあります。彼はアプリケーションをC ++からerlangに書き直しました:erlangの75%少ない行。
カバーされているErlangの最も一般的なアプリケーションのリスト(CouchDb、ejabberd、RabbitMQなど)ですが、以下を提供したいと思います。
これらのアプリケーションで使用される理由は、Erlangの中核となる強みであるアプリケーションの可用性の管理にあります。
Erlangは、システムが少なくとも5x9の可用性(年間稼働率99.999%)を満たすことを要求する電話会社の環境のためにゼロから構築されました。この数値では、1年間のダウンタイムの余地はあまりありません。このため、Erlangには主に次の機能が搭載されています(完全ではありません)。
水平方向のスケーラビリティー(シームレスなマシン内およびマシン間通信により、マシンの境界を越えてジョブを簡単に分散できる機能)。組み込みデータベース(Mnesia)も自然に配布されます。
垂直スケーラビリティー(同じマシン上の処理リソース全体にジョブを分散する能力):SMPはネイティブで処理されます。
コードのホットスワップ:操作中にライブでコードを更新/アップグレードする機能
非同期:実世界は非同期であるため、Erlangはこの基本的な性質を考慮して構築されています。この要件に貢献する1つの機能:Erlangの「フリー」プロセス(> 32000は同時に実行できます)。
監視:再起動戦略、しきい値などを使用したプロセス監視のためのさまざまな戦略
リソース管理:スケジューリング戦略、リソース監視など。デフォルトのプロセススケジューラはO(1)スケーリングで動作することに注意してください。
ライブデバッグ:ライブノードに自由に「ログイン」できるため、トラブルシューティングアクティビティに役立ちます。デバッグは、任意のプロセスの実行状態へのフルアクセスでライブで行うことができます。また、組み込みのエラー報告ツールは非常に便利です(ただし、使いにくい場合もあります)。
もちろん、その機能的なルーツについて話すこともできますが、この側面は主な目標(高可用性)とは多少直交しています。ターゲットの目標に寛大に貢献する機能的性質の主要なコンポーネントは、IMO:「何も共有しない」です。この特性は、「副作用」を抑え、コストのかかる同期メカニズムの必要性を減らすのに役立ちます。
これらすべての特性が、ビジネスに不可欠なアプリケーションでErlangを使用するケースを拡張するのに役立つと思います。
Erlangが得意ではないことの1つは、大きなデータブロックの処理です。
ErlangはEricssonの出身で、一部の電気通信システムで使用されています。
テレコム以外では、CouchDb(ドキュメント指向データベース)はおそらくこれまでで最もよく知られたErlangアプリケーションです。
ドキュメント、ビュー、セキュリティおよびレプリケーションモデル、専用クエリ言語、効率的で堅牢なディスクレイアウト、Erlangプラットフォームの並行性と信頼性の性質はすべて、信頼性と効率の高いシステムのために慎重に統合されています。
私はこれを報告書を作成している最中です:アコースティックレイトレーシングにおけるアーラン。
アーランを音響レイトレーシングに使用しようとする研究グループの試みに関する体験レポートです。彼らは、プログラムを書く方が簡単であるが、バグが少ないなどを発見しました。これは、スケーリングが悪く、同等のCプログラムよりも10倍遅く実行されました。したがって、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を統合するすべての作業、ダイアライザープロジェクト、複数のユニットテスト、ビルドライブラリの急上昇などがあります。
したがって、そのスイートスポットは拡大しています。難しいのは、公式ドキュメントが追いつけず、メーリングリストとerlangブロゴスフィアの量が急速に増加していることです。
私はソーシャルゲーム会社のwoogaで働いており、一部のゲームバックエンド(基本的には何百万人ものユーザーのためのhttp apis)とiosプッシュ通知プロバイダー、支払いなどの補助サービスにErlangを使用しています。
これはネットワーク関連のタスクで本当に優れていると思います。シンプルで複雑なネットワークサービスを簡単に構造化して実装することは、一種の簡単なことです。配布、フォールトトレランス、およびパフォーマンスは、Erlangにすでにいくつかの主要な要素が組み込まれており、重要な生産インフラストラクチャで長期間使用されているため、簡単に達成できます。したがって、「新しいヒップテクノロジーのモノ0.0.2アルファ」とは異なります。
他のゲーム会社もErlangを使用していることは知っています。あなたはそれについてのスライドシェア上のプレゼンテーションを見つけることができるはずです。