マイクロサービスの代わりのモジュール

モジュールという用語は、 モジュール対から取られています。 マイクロサービス 。 また、「マイクロリス」または「モノサービス」という用語は、マイクロサービスとモノリスの間の何かを表すために時々使用されます。 しかし、「モジュール」という用語には既によく知られた意味が既にロードされているという事実にもかかわらず、私の意見では、他のオプションよりも適しています。 更新:コメントで、 レガは「組み込みマイクロサービス」という用語を使用しました。「モジュール」よりもアプローチの本質を説明しています。







モノリスとマイクロサービスは非常に異なるアプローチであるため、両方からベストを引き出すためには、バランスを取ることが重要です。 そうでなければ、 OSGiのようなモンスターを取得します。







私は2009年からマイクロサービスを書いていますが、実際のプロジェクトではマイクロサービスの代わりにモジュールを使用しようとしませんでした-以下に説明するすべては、上記のバランスがどうあるべきかについての私の仮定であり、理論的な批判と実用的な検証の両方が必要です。







モジュールとは何ですか?



モジュールはマイクロサービスのようなもので、単一のアプリケーション内にのみ実装され、そのようなモジュールのグループと非常に小さなパーツで構成され、これらすべてのモジュールの初期化と起動に関与します。







正式にはこのようなアプリケーションはモノリスと呼ぶことができますが、このアプローチはマイクロサービスとより多くの共通点があるため、マイクロサービスアプローチと比較することは理にかなっています。 マイクロサービスのように、各モジュールは:









マイクロサービスとは異なり、モジュールは:









通常のライブラリとは異なり、モジュールは:









ほとんどの場合、モジュールはサービスのレジストリを必要としません-自身を登録して他のモジュールを検索する代わりに、起動時にアプリケーションが各モジュールの初期化関数を呼び出すときに、起動時に必要な他のモジュールのインターフェースを取得します(モジュール間の依存関係によって決定される順序で) 副作用として、これにより、モジュール間の周期的な依存関係が検出された場合はすぐに検出されます(可能であれば、それらを取り除くためにアーキテクチャを変更します)。







モジュールはどこに必要ですか



一定の複雑さ( 偶発的な複雑さ )があり、各マイクロサービスでも同じです(サービスの登録/発見、それらへの接続と再接続、サービス間の認証、(de)トラフィックマーシャリングと暗号化、ループバックリクエストブレーカーの使用、リクエストトレースの実装など)。 同様の一定の操作上の複雑さが追加されています(テストとロールアウトの自動化、詳細な監視の実装、ログの集計、サービスの登録と検索、サービスの構成の保存、監査などのためのサービスサービスの使用など)。 マイクロサービスの数が増えても、この複雑さは増えず、これらのコストを補う以上のマイクロサービスの利点があります。







ただし、特定のアプリケーションのビジネスロジックに依存する複雑さはあり、アプリケーションの開発に伴い増加します。少なくとも、拡張性と高可用性を必要としないアプリケーション(または少なくとも、そのようなアプリケーションのコードの一部を除くアプリケーションでは、外部サービスと対話する必要があることは明らかです):









正しいモジュール方式により、マイクロサービスの多くの利点を維持できます(言語レベルおよび/または開発ツールで必要なサポートがある場合)が、このアプリケーションの不必要なスケーラビリティと高可用性機能を失うことに加えて、他にもあります:









モジュラーアプローチには、次の新しい利点もあります。









まとめ



一般に、アプローチは非常に魅力的です-マイクロサービススタイルで開発された本当によく分離された部分の形でモノリシックアプリケーションを書く機会を得ます(さらに、これは主に内部規律ではなく言語および/またはツールによって制御されます)さまざまなレポのさまざまなチームを含む)、「手首を軽く動かす」ことで、本当に必要な場合に実際のマイクロサービスに変えることができます...一方、MOD間でメッセージングを使用できます 非同期、結果整合性とネットワークエラーの処理の複雑さを排除し、シンプルでRPCの非常に迅速な交換などのアプリケーション内の、。







現在、このアプローチに必要なサポートはすべての言語で利用できるわけではありませんが、いくつかの言語では:「モジュールとマイクロサービス」の記事の著者がJava 9のモジュール性サポートについて書いています。Goでは、Erlangによると、 Dawn of the Microlith-Elixirによるモノサービス スクリプト言語でモジュールを実際に分離できるかどうかはわかりませんが、NodeJSのマイクロモノ、 コメント legaでlegaをPythonアプローチリンクする試みがあります...







トピックについての考えがある場合(またはさらに良い-同様の原則に関する実際のプロジェクトの経験)、またはトピックに関する記事/プロジェクトへの追加リンクがある場合-コメントを書いて、それらを記事で補足しようとします。








All Articles