私は問題があります。マイクロサービスを使用しましょう!現在、13の分散問題があります。
システムをカプセル化された、まとまりのある、分離されたコンポーネントに分割することは良い考えです。さまざまな問題に個別に取り組むことができます。しかし、モノリシックな展開でそれを完璧に行うことができます(Fowler:Microservice Premiumを参照)。結局のところ、これはOOPが何十年も教えてきたものです!コンポーネントをマイクロサービスに変えることにした場合、アーキテクチャ上の利点は得られません。テクノロジーの選択に関して柔軟性が得られ、場合によっては(必ずしもそうではありませんが)スケーラビリティが得られます。ただし、(a)システムの分散された性質、および(b)コンポーネント間の通信に起因する頭痛の種は保証されます。マイクロサービスを選択するということは、他の問題があり、これらの問題にも関わらず、マイクロサービスを喜んで使用できることを意味します。
コンポーネントにきれいに分割されたモノリスを設計できない場合、マイクロサービスシステムを設計することもできません。モノリシックコードベースでは、痛みはかなり明白です。理想的には、コードがひどく壊れている場合、コードは単にコンパイルされません。しかし、マイクロサービスでは、各サービスは個別に開発され、場合によっては異なる言語でも開発されます。コンポーネントの相互作用における問題は、コンポーネントを統合するまで明らかになりません。その時点で、アーキテクチャ全体を修正するには遅すぎます。
バグの一番の原因はインターフェイスの不一致です。パラメータの欠落などの明らかな間違いや、エラーコードの確認を忘れたり、メソッドを呼び出す前に前提条件の確認を忘れるなどの微妙な例があります。静的型付けは、コードが実行される前に、IDEおよびコンパイラでこのような問題をできるだけ早く検出します。動的システムにはこのような贅沢はありません。その欠陥のあるコードが実行されるまで、それは爆発しません。
マイクロサービスへの影響は恐ろしいものです。マイクロサービスは本質的に動的です。正式なサービス記述言語に移行しない限り、インターフェイスの使用方法が正しいことを確認することはできません。テスト、テスト、テストする必要があります!しかし、テストは高価であり、通常は網羅的ではないため、実稼働中に問題が依然として存在する可能性が残ります。その問題はいつ明らかになりますか?実稼働環境で実行中にその障害のあるパスが取られた場合のみ。製品の問題がフィードバックを高速化するという考えは、陽気に データ損失の可能性に面白がっていない限り、危険なほど間違っています。