/note/tech

マイクロサービスの危険性と効果的な導入について

システムの変更速度は「ある機能をリリースするとき、他機能との調整がある」ことで遅くなります。機能そのものを修正するコストというのは必ずかかります。

機能間調整が必要な理由は、機能同士が複雑に依存している、つまり密結合になっているからです。システムを1つの塊として設計され、実装されていると、一部の変更が全体に影響しうる状態となります。これをモノリス(一枚岩)と呼びます。

もし、機能間調整が不要になり、ある機能を直したら他機能との調整なしに、すぐリリースできればシステムの変更速度を速めることができるようになります。 このためにはシステム内で機能同士が互いに依存しない状態、つまり疎結合にしなくてはなりません。これを実現するシステム構成がマイクロサービスです。

とはいえ「よし、マイクロサービスだ」とならないのは副作用があまりにも大きいからです。「これまでシステム内のオンメモリで連携していた処理をシステム間の連携のようにする」というのは大きな変化です。

最大の副作用は「機能間で不整合が発生する可能性が高くなる」ことです。いわゆる他システム間連携ではデータの共有タイミングがずれることで受け渡したデータに不整合が発生しえます。マイクロサービスでは、これと同じことがシステム内の機能間連携でも発生しえるのです。これがマイクロサービスの劇薬たるゆえんです。

マイクロサービスでは、たとえ機能間で不整合が発生する可能性が増えたとしても、機能を疎結合化し、システム全体としての変化速度をあげたほうがメリットがある、という考え方が前提です。