Erlangがクラウドアプリケーションに適している理由は何ですか?


9

新しいプロジェクトを開始し、OpenStackクラウドの企業のインスタンス化を実装しています(http://www.openstack.org/を参照)。このプロジェクトは、当社のセキュリティツールです。現在、セキュリティツール用に何百もの専用サーバーを実行しており、それらを社内のopenstackのインスタンス化に移行しています。

私の会社の他のプロジェクトは現在、いくつかの分散サーバーアプリケーションでerlangを使用しており、他のQ / A指摘erlangはいくつかの人気のあるクラウドサービスで使用されています。私は、他の人に、それが私たちのプロジェクトに適用できる場所を検討するよう説得しようとしています。

アーランのクラウドプログラミングの長所は何ですか?アーランを使用することが特に適切な領域はどこですか?


15
「クラウド」を定義すれば、あなたが知りたいかもしれないことをお伝えできます。「クラウド」という言葉はマーケティングのことであり、それを使用する人ごとに異なる何かを意味します。

私は、openstack cloudで、私たちが実装しているものの定義で十分だと思いました。openstack.orgを参照してください。それとも、プロジェクトの詳細情報を要求していますか?それは私たちの会社のためのセキュリティツールです。現在、セキュリティツール用に何百もの専用サーバーを実行しており、それらを社内のopenstackのインスタンス化に移行しています。
ダンカン

質問を編集して、うまくいけば「マーケティング」の懸念を取り除くことができました。私の問題は、仕事に最適なツールを選択することです。私はstackexchangeの新人ですので、こっそり慣れないでください。
Duncan

1
具体的には、「クラウド」という用語は曖昧であり、具体的な意味はありません。マーケティングの話ですが、実際に何かをクラウドアプリケーションとみなすものをまだ定義していません。個人的に私はそれが何意味すると思うかを知っていますが、質問を考えるとあなたがそれが何を意味するとは違う確信しています

「「クラウド」という言葉は曖昧です」-いい言葉です!これは仮想的なものを意味し、その「何か」がソフトウェア、オペレーティングシステム、単一マシン、マルチマシンおよびネットワーク、またはその他のものであるかどうかを指定する必要があります。
GlenPeterson 2012

回答:


8

Erlangが並行/並列化/分散の状況で実行するように特別に開発されたという事実を除いて、Erlangがこれを可能にする主な2つの手法は次のとおりです。

副作用なし:

つまり、実行するデータの一部を関数に与えても、非常に厳密な場合を除いて、システム/実行プロセスの他の部分に影響を与えません。つまり、関数を一度に300回同時に実行しても、300回の関数の実行が他の関数に影響することはありません。

副作用がないことを保証するための実装手法は「不変性」と呼ばれ、大まかに言うと、変更(変更)できない場合があります。つまり、変数を作成するとすぐに、その変数の値は変更されない可能性があります。Erlangはこの動作を「単一割り当て」で実装しているため、変数に値を割り当てた後、再度値を割り当てることはできません。

X = 1.
X = 2. // This is not a valid operation

これにより、コードがXの値を誤って変更して競合状態を引き起こさないことが保証されるため、本質的にスレッドセーフであり、同時使用は簡単になります。これはソフトウェア言語間では非常に一般的ではない動作であり、Erlangが並行実行に非常に適している最大の方法です。

俳優モデル:

これは、開発者にとって並行処理の実装と管理を非常に簡単にすることがわかっているモデリングの特定の方法です。ウィキペディアから直接(http://en.wikipedia.org/wiki/Actor_model):

Actorモデルは、すべてが俳優であるという哲学を採用しています。これは、一部のオブジェクト指向プログラミング言語で使用されるすべてのオブジェクト哲学に似ていますが、アクターモデルは本質的に同時であるのに対し、オブジェクト指向ソフトウェアは通常順次実行されるという点が異なります。アクターは、受信したメッセージに応答して、同時に実行できる計算エンティティです。有限数のメッセージを他のアクターに送信します。有限数の新しいアクターを作成します。受信する次のメッセージに使用する動作を指定します。上記のアクションに想定されるシーケンスはなく、それらは並行して実行できます。送信者が送信された通信から分離することは、非同期通信と制御構造をメッセージの受け渡しのパターンとして可能にするActorモデルの根本的な進歩でした。


「副作用なし」について、「これはソフトウェア言語では非常に珍しい動作です」と言っていますが、これには少し驚いています。今日、JavaとC#でこれを行うことはできませんか?関数を呼び出すときに副作用が必要な言語は何ですか。
NoChance 2012

3
@EmmadKareem 副作用なしでプログラムを作成できるかどうかは問題ではありません。お気づきのように、これはJavaまたはC#で実行できます。これは、デフォルトで副作用がないかどうか、およびコンパイラーがこれをサポートしているかどうかです。たとえば、Javaでは、「このメソッドには副作用がない」ことをコンパイラに伝えることはできません。これは、ルールを違反しているときにコンパイラが警告を出せないことを意味します。
Andres F.

@EmmadKareem(非常にまれですが)副作用なしでC#またはJavaを書くことは不可能だと言っているのではなく、副作用のある関数とそうでないものを分離する厳密なポリシーが言語に組み込まれているプログラミング言語はほとんどないと言っています。
ジミーHoffa

Javaに@NoSideEffectsアノテーションを付けて、コンパイラーにそのメソッドに副作用がないことを強制するように指示するメソッドがあれば、すばらしいでしょう。私のコードでは、メソッドに副作用がないことはよくあることだと思います。もちろん、いくつかのメソッドはJavaのような言語のミューテーターでなければなりませんが、多くはそうではありません。特に、デザインで不変オブジェクトを使用する場合。
GlenPeterson 2012

Jimmy Hoffaと@AndresF。、ご説明ありがとうございます。
NoChance 2012

9

Erlangは、並行/並列コンピューティングに特に優れています。実際、それは本来その目的のために設計されました。多くの場合、計算量の多いアプリケーションが「クラウド」インスタンスに並列化およびデプロイされ、オンデマンドで容量を簡単に拡張/縮小できることを除いて、クラウドに固有のものはありません。

残りはマーケティングの話だけです。


7
Erlangはフォールトトレラントコンピューティング用に設計されました。それはちょうどことだ分散コンピューティングは、そのためのprerequesiteです(誰かが誤って単一マシン上でコーヒーをこぼした場合にどのように確実に結果を返すことができ、あなたが必要とする少なくとも二つのマシン)と並列並行コンピューティングは、分散コンピューティング、アーラン程度の単なる特殊なケースですたまたまそういうのもいいです。しかし、それはそのために設計されたものではありません。
イェルクWミッターク

1
@JörgWMittagヘアを分割している限り...はい、その目的はフォールトトレランスを実現することでした。それは達成並列化を介してこれを。これは、1つがホットスタンバイとして機能する2つの分離された並列計算パイプを伝送するAXデジタルテレフォニースイッチにこれを実装するように設計ました。
2012

1
はい、申し訳ありませんが、もっと明確にしておく必要がありました。クラウドコンピューティングは本質的にかなり分散されており、多くの場合(常にではないが、通常は)安価で信頼性の低いマシンのクラスターによって実装されますが、信頼できるサービスを提供するように設計されています。そのため、Erlangは非常に適しています。
イェルクWミッターク

3

従来のハードウェア展開とは異なるクラウドの1つの側面は、必要なときに新しいインスタンスを簡単に起動できることです。他のノードと他のノードのプロセスを監視する機能により、VMを追加または削除し、必要に応じて管理できる非常に動的なシステムを比較的簡単に構築できます。

これは、erlangのOTP(Open Telecom PLatform)フレームワークを使用してシステムを構築する場合に特に当てはまります。これは、構造とメカニズム(スーパーバイザーツリー)の両方を提供し、想像よりはるかに少ないエフロートでかなり洗練されたものの構築をサポートします。Erlangはすべてのトリッキーなビットを処理するので、必要はありません。

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