マイクロサービスは、継続的な配信をより適切にサポートし、迅速な展開と関心の分離のモデルを提供するソフトウェア アーキテクチャ スタイルとして勢いを増しています。
Vert.x 3 と Vert.x-Apex は、マイクロサービスを構築するための興味深いモデルを提供します。例の 1 つが示すように、単純なバーティクルは HTTP サービスを公開できるため、REST サービスを利用できます。verticle は独自の TCP ポートをバインドします。
完全なアプリケーションをサポートするために複数のマイクロサービスにスケールアップする場合、多くの選択肢があります。最終的に継続的デリバリーをサポートし、アップグレードのダウンタイムを最小限に抑えることができるスタイルについて何か考えはありますか?
オプション
- 複数のバーティクルを実行すると解決策になる可能性があり、すべてに独自のルーティングが含まれているため、http 処理はバーティクルに含まれています。リクエスト/レスポンスは、バーティクルで完全に処理できます。これは、すべての verticle が独自の tcp ポートで実行されることを意味する可能性があります。
- ルーターを使用すると、単一のポートですべてのパスを公開し、それに応じて処理できます。データはルーターを含むバーチクルによって処理され、他のバーチクルに渡すことができます。これは、よりモノリシックなアプローチのように見え始めます。
- サービスを含む vert.x の個別のインスタンスを実行します (それらをクラスター化する可能性があります)。全体が自己完結型であるため、これにより継続的デリバリーの使用が容易になる可能性があります。
- 他の可能なオプション?
展開
展開側では、アプリケーション全体をダウンさせることなく、新しいサービスを迅速に展開することが望ましいでしょう。
- オプション 3. はこれを実現する方法を提供できますが、特にすべてのバーティクルで DB バーティクルが実行されている場合に、オーバーヘッドが発生する可能性があります。
- オプション 1. の方が簡単かもしれませんが、新しいバーティクルと更新されたバーティクルのリロードはどうでしょうか。
個別のマイクロサービスは興味深い開発方法を提供しますが、オーケストレーションと展開にはいくつかの課題があります。
何かご意見は?