9

私は、古代のレガシーシステムをゼロから置き換えるプロジェクトを引き継いでいます。私が来る前に、会社はシステムの基本的なスケッチをまとめてSOAを大いに推し進めたコンサルタントを雇いました。これにより、より複雑なサービスの組み合わせに構成されることを意図して、「エンティティサービス」の長いリストが作成されました。たとえば、委員会の情報が必要なユーザーは、「委員会」サービスにアクセスし、「委員会」サービスを呼び出してメンバーを取得し、「会議」サービスを呼び出して会議を取得します。

これにより柔軟性が向上することは理解していますが、私の懸念はパフォーマンスに関するものです。サービスにこのような細かいレベルで構築されたシステムは、サービスメッセージの変換に多くのリソースを費やし、パフォーマンスが許容できないものになると思われます。また、基本的な再利用可能なオブジェクトを使用して柔軟性を向上させることもできるように思われますが、その場合、パフォーマンスを向上させるためにテクノロジーに依存しないインターフェイスの利点が失われます。

詳細な背景:このソフトウェアを要求している組織には、現在、と統合する必要のある安定したサードパーティソフトウェアスイートがありません。このソフトウェアは、すべてのスイートを置き換えます。現在、提供されたWebサイトインターフェイスの外部でデータにアクセスする必要のある外部の消費者もいません。すべてのサービス呼び出しは、システム内の他の部分から行われます。この場合のSOAの選択は、完全に「準備」の概念に基づいているようです。

だから私の質問-パフォーマンスを犠牲にすることなく、安定したサービスで許容できる粒度のレベルはどれくらいですか?すべてのエンティティをサービスとして実装することで得られるパフォーマンスへの影響に懐疑的すぎませんか?機能は、必要な場合にのみWebサービスとして利用できるようにする必要があります。代わりに、「準備」に重点を置いて、後でサービスがその上にドロップされる可能性を考慮してビジネスレイヤーを設計します。

4

3 に答える 3

4

まず、サービスの数の中で「スイート スポット」を見つけるのは確かに困難です。サービスが多すぎると統合コストがかかり、少なすぎると実装コストがかかります。あなたは良いバランスを見つけなければなりません。

あなたへの私のアドバイスは、不安定な領域または変化の領域によってサービスを分類する必要があるという点で、Juval Lowy の方法論に従うことです。これにより、粒度レベルが得られます。可能であれば、彼の WCF の本も読むべきです。

パフォーマンスに関しては、WCF は本質的に、ユース ケースとハードウェアに応じて、毎秒数千の呼び出しをサポートします。サービスを呼び出すサービスは問題ではありません。あなたの役割を果たせば、プラットフォームはそれをサポートします。たとえば、適切なシナリオには適切なバインドを使用します (名前付きパイプを使用して同じマシンでサービスを呼び出し、可能であれば TCP を使用して複数のマシンでサービスを呼び出します)。また、アプリケーションの垂直スライスを実装し、アプリケーションの残りの部分を構築する前にパフォーマンス テストを行う必要があります。これにより、アーキテクチャが検証されます。

于 2011-04-01T13:39:57.693 に答える
3

私が「サービス」と言うとき、私は完全に独立した操作を実行できる完全な垂直コンポーネントを意味します。また、例外的な要件がない限り、より細かく設定することは好みません。私のSOAの見方では、サービスは、独立して実行できる意味のあるビジネス機能を実行する必要があります。サービスは、その機能を完了するために別のサービスを必要とすべきではありません。

于 2011-04-01T13:34:40.293 に答える
1

パフォーマンスを犠牲にすることなく、安定したサービスで許容できる粒度のレベルはどれくらいですか?

個々のエンティティ。相談者様のご説明の通りです。

すべてのエンティティをサービスとして実装することで生じるパフォーマンスへの影響について、私は懐疑的すぎますか?

はい。懐疑的すぎる。

まともなフレームワークは、これらのリクエストの一部を最適化して、ネットワークのオーバーヘッドが大きくならないようにすることができます。

SQL データベースと同様に、問題はほとんど解決されます。サービスとして提供している基盤となるアプリケーションがボトルネックになっていることがわかります。SOA層は主に配管です。ビットはパイプを介して移動する必要がありますが、SOA レイヤーはほとんどの代替手段よりもインテリジェントにそれらを整理します。

サービスは必要な場合にのみ実装し、「準備」に重点を置いて、後でサービスがその上にドロップされる可能性があるビジネス層を設計する必要がありますか?

はい。

それが「アジャイル」の意味です。

ユーザーストーリーを見つけます。そのストーリーのサービス (およびエンティティ) だけを構築します。

最初のいくつかのストーリーでは、SOA フレームワークをすべて片付けて、シンプルで反復可能なリリース ステップとして展開できるようにするために、かなりのオーバーヘッドが発生します。

ありそうもない将来に必要となる「かもしれない」ものに対して、大がかりな「準備」を決してしないでください。アジャイルとバックログに優先順位を付ける方法について読んでください。

于 2011-04-01T13:36:39.567 に答える