質問

私はたくさんの絶賛を聞いたことがあります アッカ フレームワーク(Java/Scalaサービスプラットフォーム)ですが、これまでのところ、ユースケースの実際の例を多く見ていません。ですから、開発者がそれを成功して使用したことについて聞くことに興味があります。

1つの制限のみ:チャットサーバーを作成する場合は含まれていません。 (なぜですか?これは多くの同様のことの例として使い果たされているので)

役に立ちましたか?

解決

私はこれまでのところ、2つの実際のプロジェクトで非常に成功裏に使用しました。どちらも、いくつかのノードに配布され、いくつかの関係者間のメッセージを統合し、信頼できるバックエンドシステムを統合し、ほぼリアルタイムの交通情報フィールド(高速道路の車のようにトラフィック)にあります。私はまだクライアントに詳細を提供することは自由ではありません。大丈夫だったら、参照として追加できるかもしれません。

Akkaは、バージョン0.7になったときに始めたにもかかわらず、これらのプロジェクトを実際に引き抜いてきました。 (ちなみにScalaを使用しています)

大きな利点の1つは、俳優やメッセージからシステムを構成できることです。これは、ほぼボイラー描画なしで、手巻きスレッドのすべての複雑さなしに非常によくスケーリングし、オブジェクト間をほとんど無料で通過する非同期メッセージを取得します。

あらゆるタイプの非同期メッセージ処理をモデル化するのは非常に良いことです。私は、他のどのスタイルよりもこのスタイルであらゆるタイプの(Web)サービスシステムを書きたいと思っています。 (Jax-WSを使用して非同期Webサービス(サーバー側)を作成しようとしたことはありますか?それは多くの配管です)。そのため、すべてが同期方法を使用して暗黙的に呼び出され、1つのコンポーネントが何かをロックしているため、そのコンポーネントの1つに固執したくないシステムがあります。それは非常に安定しており、障害に対するLet-it-crash +監督者のソリューションは本当にうまく機能します。すべてがプログラムで簡単にセットアップでき、単位テストが難しくありません。

次に、優れたアドオンモジュールがあります。 Camelモジュールは、実際にAkkaによくプラグインし、構成可能なエンドポイントを備えた非同期サービスのこのような簡単な開発を可能にします。

私はこのフレームワークに非常に満足しており、それが私たちが構築する接続されたシステムのfacto標準になりつつあります。

他のヒント

免責事項:私はAkkaのPOです

並行性のスモルガスボードを提供することに加えて、STMの形での概要と正しい(アクター、エージェント、データフローの同時性)と同時実行制御を備えた並行性を提供します。

ここにあなたが考慮するかもしれないいくつかのユースケースがあります:

  1. トランザクション処理(オンラインゲーム、ファイナンス、統計、賭け、ソーシャルメディア、テレコム、...)
    • スケールアップ、スケールアウト、フォールトトレランス / ha
  2. サービスバックエンド(任意の業界、任意のアプリ)
    • サービス休憩、石鹸、cometdなど
    • メッセージハブ /統合レイヤーとして機能します
    • スケールアップ、スケールアウト、フォールトトレランス / ha
  3. スナップイン同時実行/並列処理(任意のアプリ)
    • 正しい
    • 簡単に作業して理解できます
    • 既存のJVMプロジェクトに瓶を追加するだけです(Scala、Java、Groovy、Jrubyを使用)
  4. バッチ処理(任意の業界)
    • バッチデータソースに接続するためのキャメル統合
    • 俳優はバッチワークロードを分割して征服します
  5. コミュニケーションハブ(テレコム、ウェブメディア、モバイルメディア)
    • スケールアップ、スケールアウト、フォールトトレランス / ha
  6. ゲームサーバー(オンラインゲーム、ベット)
    • スケールアップ、スケールアウト、フォールトトレランス / ha
  7. bi/datamining/general目的のクランチ
    • スケールアップ、スケールアウト、フォールトトレランス / ha
  8. ここに他の素晴らしいユースケースを挿入してください

私たちがそれをどのように使用するかの例は、デビット/クレジットカードトランザクションの優先順位キューにあります。これらは何百万ものものがあり、作業の努力は入力文字列タイプに依存します。トランザクションがタイプチェックの場合、処理はほとんどありませんが、販売ポイントの場合、メタデータ(カテゴリ、ラベル、タグなど)とマージしてサービスを提供するなど、多くのことがあります(電子メール/SMSアラート、詐欺検出、低資金の残高など)。入力タイプに基づいて、ジョブを処理して作業を実行するために必要なさまざまな特性(ミキシンと呼ばれる)のクラスを作成します。これらのジョブはすべて、さまざまな金融機関からリアルタイムモードで同じキューに入ります。データが清掃されると、永続性、分析、またはソケット接続にプッシュされるため、または彗星アクターを持ち上げるために、さまざまなデータストアに送信されます。働く俳優は、できるだけ早くデータを処理できるように、作業を常に自己負荷のバランスをとっています。また、追加のサービス、永続性モデル、および 重要な決定ポイントの場合。

JVMを渡すErlang OTPスタイルのメッセージは、既存のライブラリとアプリケーションサーバーの肩にリアルタイムシステムを開発するための優れたシステムになります。

akkaは、伝統的なようにメッセージを渡すことができます しかし、スピードで!また、フレームワーク内のツールを提供して、ソリューションに必要な膨大な量のアクタープール、リモートノード、フォールトトレランスを管理します。

Akkaを使用して、RESTコールを非同期に処理します。AsyncWebサーバー(Nettyベース)とともに、ユーザーリクエストモデルごとの従来のスレッドと比較して、ノード/サーバーごとに提供されるユーザーの数を10倍に改善できます。

上司に、AWSホスティング請求書が10の係数にドロップすることを伝えてください。それは簡単です! shh ...でもアマゾンに言わないでください... :)

大規模な電話会社プロジェクトでAkkaを使用しています(残念ながら、多くの詳細を開示することはできません)。 Akka Actorsは、Webアプリケーションによってリモートで展開およびアクセスされます。このようにして、Google Protobufferに基づいた単純化されたRPCモデルがあり、Akka Futuresを使用した並列性を実現します。これまでのところ、このモデルは見事に機能しています。 1つの注:Java APIを使用しています。

チャットサーバーをレベルで抽象化すると、答えが得られます。

Akkaは、Erlangの「Let It Crash」のメンタリティに似たメッセージングシステムを提供します。

したがって、例としては、さまざまなレベルの耐久性とメッセージングの信頼性が必要なものです。

  • チャットサーバー
  • MMOのネットワークレイヤー
  • 金融データポンプ
  • iPhone/モバイル/あらゆるアプリの通知システム
  • RESTサーバー
  • 多分webmachineに似たもの(推測)

Akkaの素晴らしいことは、持続性のために与えられる選択、STMの実装、RESTサーバー、フォールトトレランスです。

チャットサーバーの例に悩まされないでください。特定のクラスのソリューションの例として考えてください。

すべての優れたドキュメントで、私はこの正確な質問、ユースケース、例がギャップがあると感じています。例を念頭に置いては、自明ではありません。

(ビデオを見てソースで遊んだ経験のみで書かれているので、Akkaを使用して何も実装していません。)

職場のいくつかのプロジェクトでAkkaを使用していますが、その中で最も興味深いのは車両の衝突修理に関連しています。主に英国では、現在は米国、アジア、オーストラリア、ヨーロッパに拡大しています。俳優を使用して、クラッシュの修理情報がリアルタイムで提供され、車両の安全で費用対効果の高い修理を可能にします。

Akkaの質問は、本当に「Akkaでできないこと」です。強力なフレームワークと統合する能力、その強力な抽象化、およびすべてのフォールトトレランスの側面により、非常に包括的なツールキットになります。

いくつかの異なる種類のものにはAkkaを使用できます。

私はウェブサイトで作業していました。そこでは、テクノロジースタックをScalaとAkkaに移行しました。私たちは、ウェブサイトで起こったほとんどすべてのものにそれを使用しました。チャットの例が悪いと思うかもしれませんが、すべてが基本的に同じです:

  • ウェブサイトのライブアップデート(例:ビュー、いいね、...)
  • ライブユーザーのコメントを表示します
  • 通知サービス
  • 検索および他のすべての種類のサービス

特に、ライブの更新は、チャットの例を要約するので簡単です。サービスの部分は別の興味深いトピックです。なぜなら、単にリモートアクターを使用することを選択できるため、アプリがクラスター化されていなくても、さまざまなマシンに簡単に展開できます。

また、ラップトップからデータセンターにスケーリングできるというアイデアを備えたPCBオートオウターアプリケーションにAkkaを使用しています。あなたがそれを与える力が多いほど、結果は良くなります。 Akkaが場所の透明性も提供するため、通常の並行性を使用しようとする場合、これは非常に困難です。

現在、自由時間プロジェクトとして、私は俳優のみを使用してWebフレームワークを構築しています。繰り返しますが、利点は、単一のマシンからマシンのクラスター全体までのスケーラビリティです。その上、メッセージ駆動型アプローチを使用すると、ソフトウェアサービスが最初から向きを変えます。あなたはそれらすべての素晴らしいコンポーネントを持っています。お互いに話しかけますが、必ずしも同じマシンに住んでいて、同じマシンに住んでいても、お互いを知っているわけではありません。

そして、Google Readerがシャットダウンして以来、私はもちろんAkkaを使用してRSSリーダーから始めました。それは私にとってカプセル化されたサービスについてすべてです。結論として:俳優モデル自体はあなたが最初に採用するべきものであり、Akkaはあなたが途中で受け取る多くの利点でそれを実装するのに役立つ非常に信頼できるフレームワークです。

Akkaを使用してCamelプラグインを使用して、分析とトレンド処理を配布しています topimpact.com. 。毎秒50〜1000のメッセージを処理する必要があります。キャメルを使用したマルチノード処理に加えて、単一のプロセッサで作業を複数のワーカーに配布するために最大のパフォーマンスを分配するためにも使用されます。非常にうまく機能しますが、混雑を処理する方法をある程度理解する必要があります。

Akka(Java API)を手にしていました。私が試したのは、Akkaの俳優ベースの並行性モデルをPlain Java Concurrency Model(java.util.concurrentクラス)と比較することでした。

ユースケースは、文字カウントの実装を削減する単純な標準マップでした。データセットは、ランダムに生成された文字列(長さ400枚)のコレクションであり、その中の母音の数を計算しました。

Akkaには、BalancedDispatcher(スレッド間の負荷バランス用)とRoundrobinRouter(関数俳優の制限を維持するため)を使用しました。 Javaには、Map/削減の実行と結果に参加するSimple Fork Join Technique(作業盗むアルゴリズムなしで実装された)を使用しました。中間結果は、結合を可能な限り並行させるために、キューをブロックする際に保持されました。おそらく、もし私が間違っていないなら、それは何らかの形でメッセージを受け取る俳優の「メールボックス」の概念を模倣するでしょう。

観察:中程度の負荷(〜50000文字列入力)まで、結果は同等であり、異なる反復でわずかに変化しました。ただし、負荷を〜100000に増やすと、Javaソリューションがかかります。この状態で20〜30個のスレッドを使用してJavaソリューションを構成しましたが、すべての反復が失敗しました。

負荷を1000000に増やすことは、Akkaにとっても致命的でした。クロスチェックをすることに興味のある人とコードを共有できます。

私にとって、Akkaは従来のJavaマルチスレッドソリューションよりも優れているようです。そしておそらくその理由は、スカラのフードの魔法の下です。

問題ドメインをイベント駆動型のメッセージを渡すメッセージとしてモデル化できれば、AkkaはJVMにとって良い選択だと思います。

実行されたテスト:Javaバージョン:1.6 IDE:Eclipse 3.7 Windows Vista 32ビット。 3GB RAM。 Intel Core i5プロセッサ、2.5 GHzクロック速度

テストに使用される問題ドメインについて議論することができ、Javaの知識が許可されているのと同じくらい公平になろうとしました:-)

話し言葉システムでAkkaを使用します(プリメタルク)。内部と外部の両方。単一のクラスターノードで多くのテレフォニーチャネルを同時に実行するには、マルチスレッドフレームワークがあることは明らかに必要です。 Akkaは完璧に機能します。 Java大量の悪夢があります。そして、Akkaでは、それはちょうどスイングのようなものです - それは単に機能します。堅牢で信頼性。 24*7、ノンストップ。

チャネル内には、並行して処理されるイベントのリアルタイムストリームがあります。特に: - 長い自動音声認識 - 俳優によって行われます。 - いくつかのオーディオソース(合成されたスピーチを含む)をミックスするオーディオ出力プロデューサー。 - テキストツースピック変換は、チャネル間で共有されるアクターの個別のセットです。 - セマンティックおよびナレッジ処理。

使用する複雑な信号処理の相互接続を作成します SynapseGrid. 。複雑なアクターシステムのデータフローのコンパイル時間チェックの利点があります。

最近 実装 AkkaのCanonical Map-Reduceの例:単語数。 Akkaの1つのユースケースです。パフォーマンスの向上です。それはより実験でした JrubyとAkkaの俳優 何よりも、AkkaはScalaやJavaのみではないことも示しています。JVMの上のすべての言語で動作します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top