在庫サービスに対してリクエストが行われ、数量が5未満のすべてのアイテムのアイテム詳細を取得します。これにより、ユーザーIDを含むリストが返されます。次に、インベントリサービスから取得したユーザーIDのリストのユーザー名と連絡先の詳細を取得するために、ユーザーサービスに対して別の要求が行われます。
たしかにそう。
確かに、モノリスでは、関連するアイテムを照会するインベントリモデルを作成し、それをユーザーモデルにフィードして同じデータを取得できます。
または、同じリレーショナルデータベースにそれらを配置し、データベースがインベントリテーブルとユーザーテーブルを取得するSQLを記述している場合、さらに処理することができます。これにより、いくつかの魔法が実行され、目的のデータが取得されます。
かかわらず、あなたがそれを行う方法の、どこかだろう、本質的に、在庫システムからユーザーIDのリストを取得し、ユーザーのシステムにそれらを供給し、データのリストをコンパイルするコードです。
答える必要がある質問は、パフォーマンスとメンテナンス、およびその他の「ソフト」品質についてです。
マイクロサービスの主な利点はスケーリングです。1台のマシンに1万人のユーザーがいて、少し遅い場合は、別のマシンを追加すると、システムの速度が2倍になります。さらに8つ追加すると、10倍の速度になります。(線形スケーリングはおそらく楽観的ですが、それは理想的なものであり、期待するほど不合理ではありません。)
そして、これはサービスごとです。インベントリシステムがボトルネックの場合、ユーザーに関するレポート以外にも使用されます。そのサービスだけにマシンを追加できます。機械も特化できます。このサービスは大量のメモリを必要とし、そのサービスは重い計算を行い、より多くのCPUを必要とします。
スケーリングが必要ない場合、マイクロサービスにはもう1つの利点があります。それらはモジュール式です。もちろん、モノリシックアプリはモジュール化することもできます。データベースは正規化されています... マイクロサービスは固体鋼で分離されています。
あなたのユーザーシステムが文字通り発火した場合、それはインベントリシステムに少しも影響を与えません。誰が何を在庫したかについてのきれいなレポートを印刷することはできませんが、顧客は在庫のあるアイテムがあることを知っているので安全に注文を出すことができます。
また、リレーショナルデータベース(*)で行うよりも、microservicesでデータを複製することはありません。リレーショナルデータベースでは、結合を行うことができます。これに相当するのは、説明したようなコードのリストをマージすることです。
ビューを追加することもできますが、同等の方法は、マージを行う新しいサービスを追加することです。その結果、3つの要求が発生します。1つは新しいサービスに、それからそのサービスは元の2つを行います。リレーショナルデータベースには、ビューを最適化する派手なものがあり、サービスレベルで実装する必要があります。「無料」では入手できません。
2つの値が一致しない場合、どちらが間違っているかがわかるという点で、キャッシュはデータ複製とは異なります。多くの場合、一貫性を犠牲にして可用性を高めるためにマイクロサービスで使用されます(CAP定理)。リレーショナルデータベースは一貫性の祭壇で可用性を完全に犠牲にしているため、あまり一般的ではありません。マイクロサービスには、キャッシングを簡単にする固有のものは何もないと思いますが、実際にはキャッシングが主な関心事であり、マイクロサービスでキャッシングを簡単にします。
(*)マイクロサービスの群れでデータを複製することが理にかなっている場合、おそらく同等のリレーショナルデータベースで意味があるでしょう。