マイクロサービスアプローチの長所と短所について話しましょう。
最初のネガ。マイクロサービスを作成すると、コードに固有の複雑さが追加されます。オーバーヘッドを追加しています。環境の複製を難しくしています(開発者向けなど)。断続的な問題のデバッグを難しくしています。
本当の欠点を説明させてください。仮説として、ページの生成中に100個のマイクロサービスが呼び出され、それぞれが99.9%の時間で正しいことを行う場合を考えてください。しかし、0.05%の確率で誤った結果が生じます。また、接続にTCP / IPタイムアウトが必要な場合など、接続要求が遅くなる時間の0.05%には5秒かかります。リクエストが完全に機能する時間の約90.5%。しかし、間違った結果が出る時間の約5%、ページが遅い時間の約5%です。そして、再現不可能な障害にはそれぞれ異なる原因があります。
監視、再現などのツールについて多くのことを考えない限り、これは混乱に変わります。特に、あるマイクロサービスが別のマイクロサービスを呼び出し、それが別のマイクロサービスを数層深く呼び出す場合。そして、問題が発生すると、時間とともに悪化します。
OK、これは悪夢のように聞こえます(そして、複数の会社がこの道をたどることによって自分自身に大きな問題を生み出しています)成功は、潜在的なマイナス面を明確に認識し、それに対処するために常に努力することによってのみ可能です。
では、一体型のアプローチについてはどうでしょうか?
モノリシックアプリケーションは、マイクロサービスと同じくらい簡単にモジュール化できます。また、関数呼び出しは、実際にはRPC呼び出しよりも安価で信頼性があります。したがって、より信頼性が高く、実行速度が速く、コードが少ないことを除いて、同じことを開発できます。
では、なぜ企業はマイクロサービスアプローチを採用するのでしょうか?
答えは、スケーリングすると、モノリシックアプリケーションでできることには制限があるためです。非常に多くのユーザー、非常に多くの要求などの後、データベースがスケーリングされない、Webサーバーがコードをメモリに保持できないなどの状態になります。さらに、マイクロサービスのアプローチにより、アプリケーションの独立した増分アップグレードが可能になります。したがって、マイクロサービスアーキテクチャは、アプリケーションをスケーリングするためのソリューションです。
私の経験則では、スクリプト言語(Pythonなど)のコードから最適化されたC ++に移行すると、一般にパフォーマンスとメモリ使用量の両方で1〜2桁改善できます。別の方法で分散アーキテクチャに移行すると、リソース要件が大幅に増加しますが、無制限に拡張できます。分散アーキテクチャを機能させることはできますが、そうすることは困難です。
したがって、個人的なプロジェクトを開始する場合は、モノリシックに移行してください。うまくやる方法を学びましょう。(Google | eBay | Amazon |など)があるため、配布しないでください。分散している大企業に着地する場合は、それらがどのように機能するかに注意を払い、それを台無しにしないでください。そして、移行をしなければならなくなった場合は、非常に、非常に慎重になります。
開示、あらゆる規模の企業で20年近くの経験があります。そして、はい、私はモノリシックと分散アーキテクチャの両方を間近で見ました。その経験に基づいて、分散マイクロサービスアーキテクチャは本当にクリーンで優れているからではなく、必要なために行うことだと言っています。