マイクロサービスアーキテクチャとは
モノリシック(一枚岩)なアーキテクチャとは異なり、ビジネス機能に沿った複数の小さい「マイクロサービス」に分割し、連携させることで大きいソフトウェア機能を実現すること
マイクロサービスを構築する上での2つの技術
・ API
「Application Programmming Interface」の頭文字で、「アプリケーション、ソフトウェア」と「プログラム」をつなぐものである。
APIにはいくつかのタイプがあるが、クラウド上のマイクロサービスでは「REST API」と呼ばれるものが広く使われている。
REST APIは構造がシンプルで、物理的に離れた位置にあるサービス同士を連携して人るのサービスを運用できる点が特徴である。
・ コンテナ
OS上にそれぞれのアプリケーションの専用区画を作成区画を作成する仮想化技術の一つ。
マイクロサービスでは、個々のプロセスに対してコンテナが用意され、プロセス間のやり取りはAPIを介して行う。機能変更の際はコンテナ単位で入れ替えを行えるので、迅速に対応できるのが特徴。
コンテナ技術には様々な種類があるが、現在は導入や費用の手軽さなどに優れるLinux由来の「Docker(ドッカー)」が主流。
マイクロサービスのメリット 7選
1. 一つのシステムに異なる技術を採用できる
マイクロサービス同士が独立しており疎結合であるため、開発言語などの技術を機能ごとに変えることができる。このため、それぞれの機能に最適な技術を採用することができる
2. 柔軟性、拡張が高い
システムやアプリケーションが大きくなっても機能追加や変更がしやすい。
また、ある機能(サービス)を拡張したい場合は、該当のマイクロサービスにのみ変更を加えることが可能なため、拡張性が高く、デプロイまでがスピーディーに行える。
3. 負荷を分散できる
ある機能に負荷がかかった場合は、システム全体ではなく、特定の機能のみスケールすることで対応できる。
4. 開発期間を短縮できる
小規模な機能単位に分けて開発を進めるため、開発期間が短くて済む。
このため、開発チームの人数も少人数となり、コミュニケーションや進捗の把握などもしやすくなる。
5. アジャイル開発に向いている
マイクロサービスは、柔軟で軽量な開発手法であるため、柔軟性が高く、迅速性に富んだ開発手法であるアジャイル開発と親和性が高い。
6. デプロイの際にシステムを止める必要がない
デプロイの際に他の機能部分は停止させずに一部の機能のみをデプロイできる。また、1日に複数回のデプロイも可能
7. コードを再利用できる
機能を細分化して構築するため、ニアような機能を作る際に、コードを再利用できる。そのため、類似機能で一からコードを記述する無駄が省ける。
デメリット 4選
1. 設計やプロジェクトの統括に高いスキルが求められる
「一つのシステムに異なる技術を採用できる」メリットの裏返しに、システムやアプリケーション全体の設計の難易度が上がる。特に、最初に分割した機能単位は後から変更できないため、設計時に慎重に検討する必要性あり。
2. データの一貫性を担保しづらい
マイクロサービスでは、機能ごとに使用するデータストアも分割する。さらに、機能ごとに同期せずにデータ処理を行うこともある。このため、機能間でデータの一貫性を担保しづらい面がある
3. デバッグや統合テストの難易度が高い
個々の機能たんは独立しているものの、完成したサービスを提供するにあたり、デバッグや統合テストが必要となる。エラーが出た場合は、どの機能が原因なのかをたどる作業の難易度が高い。
4. API管理の難易度が高い
それぞれの機能に多くのAPIが使われる。機能がわに変更がなくとも、APIを変更すれば、APIを利用している全ての機能に影響するため、APIを適切に管理する必要がある。
まとめ
マイクロサービスは、ビジネス機能に沿った複数の小さい「マイクロサービス」に分割し、連携させることで大きいソフトウェア機能を実現する手法である。
開発期間の短縮や、各機能に最適な技術をそれぞれ採用できるなど、メリットは多いが、デメリットもある。
開発したいシステムやアプリケーションに合わせて、マイクロサービスが適するか検討する必要がある。