2011-09-17 8 views
1

私の職場(および他の多くの分野)では、サービスを中心とした建築を重視しています。 (私は電子商取引のスタートアップで働いています)。しかし、サービスは暗黙のうちに分散していると考えられます。私は配布の最初の法則を信じています - 配布しないでください。だから私は、必ずしも建築を複雑にする必要はないと信じています。進化できるアーキテクチャでなければなりません。したがって、問題にアプローチする方法の1つは、よく定義された名前空間を作成してその周囲にコードを作成することですが、Java APIを介して通信を維持することです。 (これにより、監視要件は低くなり、信頼性/可用性の問題は低くなります)。これは、モジュールがWebサービスにラップすることで、規模の要件が満たされると、分散アーキテクチャに容易に展開できます。したがって、Webサービスベースのアーキテクチャを実装することにまっすぐに飛び込むのではなく、単一のアプリケーションとしてコードを記述し、分散サービスに発展することの問題点は何ですか?サービスは、ネットワークを介した配信ではなく、設計(抽象化、カプセル化など)の基本原則を暗示する必要があると仮定していますか?サービスベースのアーキテクチャは必ずしも配布を意味するものではありませんか?

答えて

0

配信はモジュール式である必要があります。しかし、それは単なるモジュール性以上のものを必要とします。モジュール間の大まかな相互作用も必要です。

たとえば、シングルプロセスのeコマースシステムでは、ユーザーのショッピングカートを管理して価格を計算するためのモジュールが別個に用意されている場合があります。彼らはカートによって、商品に価格をつけるために電卓に求めてから、次に別の商品などに触れるかもしれません。それは完全にうまくいくでしょう。

しかし、分散システムでは、激しい小規模なメソッド呼び出しが必要となり、非効率的です。 CORBAを配布用に使用していたのであれば、それを取り去ってしまうかもしれませんが、SOAPを使えば困ってしまうでしょう。むしろ、あなたはカートが1つの順序で全体の価格を計算するように計算機に依頼したいと思うでしょう。それは、懸念の視点の分離(なぜ、電卓がカートの考え方を知っていなければならないのでしょうか?)から、さらに悪化するかもしれませんが、システムを適切に動作させる必要があります。

粒度に関連して、インタフェースや実装を介して相互作用するモジュールの問題もあります。単一のプロセスで、モジュールが相互作用する一連のインターフェースを定義することができます。モジュールは、実装について互いに話す必要なく、それらのインタフェースを実装するオブジェクトを互いに渡すことができます(例えば、スケジューラモジュールはinterface Job { void run(); }を実装する何かを渡すことができます)。ネットワーク全体で、粗粒度の要件は、渡されたすべてのオブジェクトを値渡しする必要があることを意味します(参照を渡すと、通過するモジュールに細かい呼び出しが戻ってくるので、モバイルコードを使用していない限り誰もいません)。つまり、両方のモジュールがオブジェクトの実装について知り、同意しなければなりません。

したがって、単一プロセスシステムをモジュール方式で構築すると、後でSOAを実装するのが容易になりますが、各モジュールをSOAPインターフェイスにラップするほど単純ではありません。少なくとも、最初から粗い方法でシステムを構築しない限り、多くの賢明で有用なソフトウェアエンジニアリングプラクティスを捨て去ることを意味しません。

関連する問題