私の職場(および他の多くの分野)では、サービスを中心とした建築を重視しています。 (私は電子商取引のスタートアップで働いています)。しかし、サービスは暗黙のうちに分散していると考えられます。私は配布の最初の法則を信じています - 配布しないでください。だから私は、必ずしも建築を複雑にする必要はないと信じています。進化できるアーキテクチャでなければなりません。したがって、問題にアプローチする方法の1つは、よく定義された名前空間を作成してその周囲にコードを作成することですが、Java APIを介して通信を維持することです。 (これにより、監視要件は低くなり、信頼性/可用性の問題は低くなります)。これは、モジュールがWebサービスにラップすることで、規模の要件が満たされると、分散アーキテクチャに容易に展開できます。したがって、Webサービスベースのアーキテクチャを実装することにまっすぐに飛び込むのではなく、単一のアプリケーションとしてコードを記述し、分散サービスに発展することの問題点は何ですか?サービスは、ネットワークを介した配信ではなく、設計(抽象化、カプセル化など)の基本原則を暗示する必要があると仮定していますか?サービスベースのアーキテクチャは必ずしも配布を意味するものではありませんか?
答えて
配信はモジュール式である必要があります。しかし、それは単なるモジュール性以上のものを必要とします。モジュール間の大まかな相互作用も必要です。
たとえば、シングルプロセスのeコマースシステムでは、ユーザーのショッピングカートを管理して価格を計算するためのモジュールが別個に用意されている場合があります。彼らはカートによって、商品に価格をつけるために電卓に求めてから、次に別の商品などに触れるかもしれません。それは完全にうまくいくでしょう。
しかし、分散システムでは、激しい小規模なメソッド呼び出しが必要となり、非効率的です。 CORBAを配布用に使用していたのであれば、それを取り去ってしまうかもしれませんが、SOAPを使えば困ってしまうでしょう。むしろ、あなたはカートが1つの順序で全体の価格を計算するように計算機に依頼したいと思うでしょう。それは、懸念の視点の分離(なぜ、電卓がカートの考え方を知っていなければならないのでしょうか?)から、さらに悪化するかもしれませんが、システムを適切に動作させる必要があります。
粒度に関連して、インタフェースや実装を介して相互作用するモジュールの問題もあります。単一のプロセスで、モジュールが相互作用する一連のインターフェースを定義することができます。モジュールは、実装について互いに話す必要なく、それらのインタフェースを実装するオブジェクトを互いに渡すことができます(例えば、スケジューラモジュールはinterface Job { void run(); }
を実装する何かを渡すことができます)。ネットワーク全体で、粗粒度の要件は、渡されたすべてのオブジェクトを値渡しする必要があることを意味します(参照を渡すと、通過するモジュールに細かい呼び出しが戻ってくるので、モバイルコードを使用していない限り誰もいません)。つまり、両方のモジュールがオブジェクトの実装について知り、同意しなければなりません。
したがって、単一プロセスシステムをモジュール方式で構築すると、後でSOAを実装するのが容易になりますが、各モジュールをSOAPインターフェイスにラップするほど単純ではありません。少なくとも、最初から粗い方法でシステムを構築しない限り、多くの賢明で有用なソフトウェアエンジニアリングプラクティスを捨て去ることを意味しません。
- 1. Dereference nullは必ずしもUBではありませんか?
- 2. PostgreSQL:制約名は必ずしも一意ではありません
- 3. OpenNLPで意味のあるものは意味がありますか?
- 4. 構成可能なアプリケーションは、必ずしもプラグインベースのアーキテクチャを意味しますか
- 5. Haskellの型クラス(?フロートがフローティング意味するものではありません)
- 6. BizTalk - このアプリケーションは削除も配布もできません
- 7. サブスクリプションの値は配列でもポインタでもありません
- 8. スクリプトの値は配列でもポインタでもありません
- 9. FLAGS =意味はありませんか?
- 10. file_put_contentsが動作することはありますが、必ずしもそうではありません
- 11. プロパティの意味はINDEX_VALUEですが、意味はありません
- 12. XCode clangエラーの意味 "アーキテクチャi386に見つかりません"
- 13. グリッドの列にmakeSortable()を設定しても意味がありません
- 14. 関数のデリゲート関数を統合しても意味がありません
- 15. Rspecでトランザクションフィクスチャを無効にしても意味がありません
- 16. in_arrayは意味がありません
- 17. Postgres CTEは必ずしもすべての行を読み込む必要はありませんか?
- 18. このScala Perl/Pythonアーキテクチャは意味があります
- 19. document.preventDefault()は必要なものではありません
- 20. setTimeoutはGreasemonkeyでは必ずしも機能しません
- 21. 配列の値は同じではありません(でも?)
- 22. 関数に__getattr__と__getitem__を定義しても意味がありません
- 23. byte、short、charを使用しても意味がありません
- 24. WPF MVVM:ICommandパラメータがnullになることがあります(必ずしもそうではありません)
- 25. PHPアップロード画像は何もせず、エラーはありません
- 26. Notify2はPython3 IDLEで動作しますが、端末では必ずしもそうではありません
- 27. Jquery .attr(attrname)は必ずしも機能しませんか?
- 28. Grails - DataTablesは必ずしも機能しませんか?
- 29. UIView setAnimationTransitionはときどき動作しますが、必ずしもそうではありませんか?
- 30. フィールドは必須ですが、必ずしもそうではありません - Yii2