マイクロサービスのメリット
マイクロサービスアーキテクチャによる開発は、どのような効能があるのでしょうか。そのメリットとデメリットについて説明します。まずはメリットを考えてみましょう。
- マルチテナントによるコストメリット マイクロサービスアーキテクチャは、Azure Service FabricやDockerなどのコンテナ仮想化技術を使ったマルチテナントな仕組みを前提にしていることがほとんどです。サーバ単位でスケールしていたマルチティアアーキテクチャと比較しても、分離された個々のサービス単位でのスケールアウト、スケールインが可能になる利点があります。
- 継続的デリバリに適する サービスとして分離されるために依存量や実装量が小さく、デプロイメント、テスト、ステージング、本番の環境構成や切り替えが行いやすくなり、作業量が明確化され、達成率や品質が向上します。
- 早期の問題点の把握と継続的改善 継続的デリバリだけでなく、測定による問題点の把握、フィードバックによる改善がしやすくなりシステムの品質の向上に貢献するでしょう。
- クラウドの魅力を最大限に引き出せる マルチティアアーキテクチャと比較しても、各サービス単位で柔軟にスケールアウトしやすくなり、耐障害性も向上します。また、クラウドのAPIもマイクロサービスにおけるコンポーネント単位であると捉え、クラウドの機能をプロダクトに取り込むことができます。
- ビジネスに応じた、プロダクトライフサイクル 疎結合なので、時流に合わせてサービスそのものを新しい手法や言語で置き換えることも可能です。ビジネスに応じて、絶好の機会を逃すことが無く、最小の追加実装でプロダクトを維持できるようになります。
マイクロサービスのデメリット
マイクロサービスアーキテクチャには、もちろんデメリットもあります。
- 疎結合の処理コスト サービスであることから、リモート呼び出しには相応の時間と処理コストがかかります。非同期である点を受け入れ、相応の工夫と利用者やビジネス側にも理解が必要になるでしょう。
- サービスのインターフェース仕様の変更が開発に影響をもたらす APIの場所や名前解決の工夫、APIの規則に一定のルールを作る必要が出てきます。クラウドで提供されるAPIの統合や管理を行うサービス、SwaggerによるAPIとドキュメント生成は実践する上で手掛かりとなります。また、後述する書籍には、具体的にAPIの場所や名前を解決するための工夫と実践が記載されています。
- チーム作りの難しさ これが最大の課題になります。従来ではDBチーム、ミドルウェアチーム、UIチーム、サーバサイド開発チーム、インフラチームと分割していた役割を超えて、各チームの担当者を少人数の1つのチームとして駆動させることが重要です。また、お互いの役割の知識を共有した上で、アジャイル、DevOps、DDDなどを理解する学習コストが相応に必要となるでしょう。これらは、一朝一夕では達成できることではありませんが、作ったチームは企業にとって、かけがえの無い財産になるでしょう。
最後に
より詳しい解説は、Sam Newman著・佐藤直生監訳『マイクロサービスアーキテクチャ』(オライリー社)や、Bob Familiar著・株式会社クイープ訳『Microservices on Azure』(翔泳社)を読んでいただければ、皆さんがマイクロサービスを実践する上での手掛かりがみつかるでしょう。
クラウドベンダー各社も、Dockerなどのコンテナの活用やマイクロサービスアーキテクチャを支える仕組みなどを矢継ぎ早に出しています。マイクロサービスアーキテクチャは、今までのIaaSとはちょっと違う、クラウドの美味しさを最大限に引き出す良い道具であり、手法となります。プロジェクトからサービスへシフトするための開発チーム作りには、従来と大きく違うところもありますが、新規開発の際には採用を検討する余地があると言えるでしょう。
- 廣瀬一海
- 愛称「デプロイ王子」。1997年からOSSやLinuxを活用し、主にインターネット向けサーバシステムの設計や無停止設計、分散設計と構築などを担当する。日本医師会総合政策研究機構(日医総研)客員研究員、日本コンピューター、pnop CTO、アイレット クラウドパック事業部 シニアソリューションアーキテクトを経て、2015年12月から日本マイクロソフトのクラウドソリューションアーキテクト。2012年/2013年/2014年/2015年にMVP Award Program Microsoft Azure受賞。