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