「小さなサービスの組み合わせは、今ある巨大な怪物よりも扱いやすいにも関わらず、われわれは未だに大きくなり続ける巨獣を扱っている」
サービスの目的は、RESTfulであれ、SOAPであれ、ウェブであれ、クラウドであれ、データであれ、データセンターで大きなスペースを取っている、モノリス(巨大な一枚岩、分割されていない大きな単一モジュールを指す)的なアプリケーションやシステムを重要な部品に分割することだ。サービスは、システムを支える重要な部品やインフラを抽象化することにより、IT環境を軽量化し、洗練させることを目指している。例えば、Rubyで作られた巨大なモノリシックシステムは手に負えないものになる可能性があり、ビジネスの変化に応じてアクセスでき、再利用できるサービスに分割した方がよい場合もある。
提供:Joe McKendrick
では、サービス自体がモノリスになってしまえばどうなるのだろうか?すべての上流と下流の依存関係を破壊せずに変更をするのが難しくなり、多くの利用者がそれを切り捨てられないとすれば、困ったことが起こる。
即応性を実現するための次の技術だと言われる、新たなタイプの小さなマイクロサービスを用いるべき理由はここにある。「Building Microservices: Designing Fine-Grained Systems」(マイクロサービスの構築:きめ細かいシステムの設計)の著者であるSam Newman氏は、多くのサービスは、時間が経つにつれて、それ自体が扱いにくい巨大なサービスになっていると述べている。 「現実に、多くのサービスは、健全とは言えない大きさにまで巨大化することになるだろう」と同氏は言う。「小さなサービスの組み合わせの方が、現在ある巨大な怪物よりも扱いやすいと知っているにも関わらず、われわれは未だに大きくなり続ける巨獣を扱っている。なぜだろう?」(Newman氏)
Newman氏は、マイクロサービスはサービスの境界を形成する「シーム」(縫い目)の一部として利用すべきだと述べている。もちろん、サービスをより小さなマイクロサービスに分割し、それを実稼働まで持って行くためには、多くの作業が必要になる。同氏は、サービスの分割を検討する際には、以下のようなガイドラインを用いるべきだと書いている。
現在のサービスがモノリスと言えるかどうかを判断する。「現在単一のトランザクション内で処理されている業務がある場合は、その必要があるのかを考えてみるべきだ」とNewman氏は書いている。「その業務を複数のローカルトランザクションで処理し、結果結合性によって一貫性を確保することはできないかを検討するべきだろう」