2012-12-13 10 views
5

サービス指向アーキテクチャー(SOA)を使用して、アーキテクチャーを分割して(新しいコンポーネントを追加する)動きを見てきました。第三者が使用する多数の外部APIがありますが、REST HTTPインターフェイスを使用していますが、内部ですべてのコンポーネントが管理されているため、内部で使用するのが最善であると思っていました。潜在的に異なるテクノロジ(主に.netとルビーのレール)。サービス指向アーキテクチャー - トランスポートレイヤー(httpとメッセージング)

HTTP(REST、SOAPなど)ではなく、メッセージングシステム(redis、rabbitmq、EMS、その他の注目すべき例外はありません...)を使用すると、パフォーマンス/機能面で大きなメリットがありますか。

私はこのトピックに関する良い情報を見つけるのに苦労しています。私はこのサイドエリアをかなり新しくしているので、アドバイスや良いリソースがあれば幸いです。

Thnaks

答えて

5

@ Hill Hartungが述べたことに加えて、私はあなたのシステムで何をするつもりかにもよると言います。サーバー/サービスがほとんどなく、完全に独立しがちなクライアント/サーバー型のアプリケーションがほとんどの場合、REST over HTTPを使用してサービス契約を実装する方が簡単でしょう。

一方、システム全体が双方向通信を行っている場合、またはプロセス間コールが多数ある場合(特に、システム内のすべての参加者がクライアントとサーバーの両方になる場合いくつかの点)、メッセージングが最善の策です。メッセージングオプションのうち、私はAMQP/RabbitMQが最も機能が豊富で、これらのすべてを使いやすいことがわかりました。これは、コーディングするための真の非同期プラットフォームを提供します。

メッセージを使用する主なメリットは、メッセージの種類ごとにキューを持つことができることです。システムが拡張されて変更されると、キュー/メッセージは同じになる可能性がありますが、それらを処理するサービスは下に変更できます。それは層の分離を促進する。

最後に、これは私の意見では巨大なことです。メッセージングを適切に使用することで、小さな独立したコードが作成されます。これらはテスト可能でメンテナンス性が高く、一般的にはエンタープライズアーキテクチャを簡素化します。 HTTPエンドポイントから多すぎるサービスを処理しようとすると、最終的に(1年または2年の間に)、(1)あまりにも多くのエンドポイントを追跡したり、(2)スパゲッティコードの維持不能な混乱。

私の会社は、メッセージベースのフレームワークを使い始めました。これは私たちにとって非常にうまく機能しています。 RabbitMQサーバーは、最も信頼性の高いコンポーネントでした。メッセージングやSOAに関する質問があればお気軽にお問い合わせください。

+0

本当に役に立ちました:-) – Ben

7

メッセージングは​​、より疎結合のアーキテクチャを提供する傾向があります。個々のコンポーネントがインフラストラクチャ全体を破壊することなく失敗する可能性があるため、潜在的にはより堅牢になる可能性があります。

欠点は、複雑さ、パラダイムが非同期モデルに移行し、パフォーマンスが向上することです(特に、どこにいてもメッセージを持続させる場合)。

また、メッセージングシステムが特に堅牢であることを確認する必要があります。あなたのロジックの1つの側面は、すべてに影響を与えずにダウンして再起動することができますが、コアメッセージベースを失うと、すべてのロジックがダウンして、メッセージングがバックアップされるのを待っています。

幸運なことに、メッセージバスは、人が手を触れたり触れたりすることなく、長時間実行することができます。システムのエラーと不安定性の最大の原因です。

関連する問題