これならわかる!マイクロサービスとは何か?
0.はじめに
- 今年からオンプレミス→コンテナ基盤での開発をすることになり四苦八苦中。
- まず、「マイクロサービス」という考え方を勉強するとよさげでしたので、まとめました。
- 僕と同じようにこれから学習し始める人に役立ててれば嬉しいです。
1.マイクロサービスとは?
画像元:マイクロサービスとは?導入のメリットとデメリット、活用のポイントや必要な技術を簡単に解説
マイクロサービス(Microservices)またはマイクロサービスアーキテクチャとは、ソフトウェア開発における技法のひとつです。
具体的には、規模が小さいサービス同士を組み合わせて連係させることで、ひとつの大きなアプリケーションやサイトの構築を行う技法を指します。
マイクロサービスの特徴は、各サービスが独立して機能し、特定の任務を担当すること。
各マイクロサービスは自身のデータストアを持ち、他のサービスとはAPIを通じて通信します。
その結果、各サービス間の依存性が低下し、開発やデプロイ・スケーリングがそれぞれ独立して行えるようになります。
1.1.従来の開発手法「モノリシックアーキテクチャ」との比較
画像元:マイクロサービスとは? 使われている技術やメリット・デメリットを解説
従来のソフトウェア開発は、すべての機能を一枚岩(モノリス)のようにまとめて設計を行う「モノリシックアーキテクチャ」が主流でした。
そのため、開発・デプロイ・テストが容易である反面、一部の機能に問題が発生した際には全体のアプリケーションに影響を及ぼしやすく、全体を一度にアップデートしなければならないといったデメリットがあります。
これに対して、マイクロサービスアーキテクチャでは、アプリケーションを小さな独立したサービスに分割し、各サービスがそれぞれ特定の機能を担当します。
各サービスは個々にデプロイやスケーリングが可能で、他のサービスとAPIを通じてやり取りを行うため、一部のサービスに問題が生じても他のサービスに影響を与えにくいメリットがあります。
1.2.SOA(サービス指向アーキテクチャ)との違い
画像元:SOA vs. マイクロサービス
マイクロサービスアーキテクチャとサービス指向アーキテクチャ(SOA)は、システムを独立したサービスに分割する点では共通していますが、分割単位が違います。
具体的には、マイクロサービスは、サービスごとにサーバー、DB、ストレージを個別化することが多い一方、SOAはサーバー、DB、ストレージを複数のサービスで共有することが多いです。
2.マイクロサービスに使われている技術
マイクロサービスを構築するうえでは、「API」と「コンテナ」という2つの技術が必要です。マイクロサービスに欠かせないそれらの概要も知っておくと、理解を深めるのに役立つでしょう。
2.1.API
画像元:REST APIとは?特徴やメリットをわかりやすく解説
APIとは「Application Programming Interface」を略した言葉で、ソフトウェアの機能を共有する仕組みのことです。
APIにはいくつかタイプがありますが、クラウド上のマイクロサービスでは「REST API」と呼ばれるものが広く使われています。
2.2.コンテナ
画像元:Dockerとは?導入メリットと従来の仮想化との違い、運用ポイント、Kubernetesとの関係についても初心者にも分かりやすく解説
コンテナとは、OS上にそれぞれのアプリケーションの専用区画を作成する仮想化技術のひとつです。
マイクロサービスでは、個々のプロセスに対してコンテナが用意され、プロセス間のやり取りはAPIを介して行います。機能変更の際はコンテナ単位で入れ替えを行えるので、迅速に対応できるのが特徴です。
コンテナ技術にはさまざまな種類がありますが、現在は導入や運用の手軽さなどに優れるLinux由来の「Docker(ドッカー)」が主流です。
3.マイクロサービスのメリット
画像元:マイクロサービスとは? 使われている技術やメリット・デメリットを解説
マイクロサービスによるサービスの構築は多くのメリットがあることから、IT業界で注目を集めています。マイクロサービスには、具体的にどのようなメリットがあるのでしょうか。
3.1.サービスを素早く開発・改修できる
運用を開始したサービスやアプリケーションなどは、その中で新機能の追加や不具合の修正といった改修を繰り返していきます。
すべての機能がまとまっているモノリシックアーキテクチャの場合、改修を繰り返すうちにコードは複雑になっていきます。次第に全体像の把握が難しくなり、新サービスの開発や改修に掛かる時間が長くなってしまうというデメリットがありました。
一方で、マイクロサービスはそれぞれのサービスごとに独立して開発・実装を行えるため、全体像の把握が容易です。サービスの開発・改修を、従来よりも素早く行えるようになります。
3.2.障害時のリスク管理になる
大きなシステムで障害が起こった場合、障害が起こっている場所の特定やメンテナンスには多大な労力が必要です。
マイクロサービスはそれぞれのサービス同士の関係性が薄く、独自性を確保していることから、障害が起こった際に影響する部分を最小限に留めることができます。
新機能の追加など、一部サービスの改修が他のサービスにも影響を及ぼす心配が少なく、問題発生時は問題のある部分のみを切り離せば済むのもメリットです。
3.3.技術による制約を受けづらい
マイクロサービスでは、他のサービスがどのような技術で作れられているかに制約を受けません。
サービスごとに別々のコードを利用する、あるサービスでは採用した技術を別のサービスでは利用しないなど、サービスに適した技術を活用して柔軟性に富んだ開発を行えます。
4.マイクロサービスのデメリット
画像元:マイクロサービスとは? 使われている技術やメリット・デメリットを解説
マイクロサービスにはメリットだけでなくデメリットもあるため、両面を把握したうえで導入を検討しましょう。
4.1.システム設計・統括の難易度が上がる
マイクロサービスのメリットに「一つの大きなシステム内で、それぞれ異なる技術を使用できる」点がありますが、これは裏を返すと「システム全体の設計が複雑化し、難易度が高まる」というデメリットになる恐れがあります。
特に、初めに設定した各サービス・機能の範囲を後から変更することは困難であるため、設計段階での慎重な検討が必要です。
それゆえ、設計担当者やプロジェクトリーダーには、多様な知識と高度な技術力が求められます。
4.2.機能間でのデータの一貫性を維持しにくくなる
マイクロサービスでは、機能ごとに異なるデータストアを使います。機能ごとに同期することなくデータ処理を行う場合もあります。そのため、データの統一性や整合性を保つのが難しくなるという問題があります。
複数の一貫性がないシステムを限られた人員で管理する必要性が高まることから、コストがかさむおそれもあるでしょう。
4.3.デバック・統合テストの実施が難しくなる
マイクロサービスでは、多くの独立した機能が結合して一つのシステムやアプリケーションを形成し、それがユーザーに提供されます。
そのため、ユーザーに完全なサービスを提供する前に、各部分がきちんと連携して動作するかどうかを確認するデバッグ・統合テストが必要です。
しかし、もしテストの過程で何らかのエラーが生じた場合、その原因となる特定の機能を特定するのは難しいかもしれません。
なぜなら、各機能が独立しているため、どの機能がエラーを引き起こしたのか追跡する作業が複雑となるためです。
5.どのような場合にマイクロサービスを導入するべきか
マイクロサービスアーキテクチャを活用することでさまざまなメリットがありますが、マイクロサービスアーキテクチャはすべてのITシステムに適しているわけではありません。
マイクロサービスアーキテクチャが適しているITシステムは以下の2つです。
5.1.継続的に変更が発生し、スピーディな対応が求められるITシステム
最初に構築する際には、従来に比べてコストのかかる部分があります。しかし、変更時にはコストが抑えられ、マイクロサービスアーキテクチャ活用のメリットを活かせます。
5.2.規模が比較的大規模なITシステム
ITシステムの規模が小さすぎるとそれ以上サービスを分割することが困難です。そのためITシステム全体として、一定程度の規模があることで、マイクロサービスアーキテクチャを使った効果を得ることができます。
6.さいごに
マイクロサービスには、「機能の追加・変更がしやすい」「問題発生時のリスクを軽減できる」など、さまざまなメリットが期待できます。
一方で、システム設計・統括の難易度が上がったり、機能間でデータの一貫性を維持しにくくなったりするデメリットがあります。
ITシステムを構築する上では、マイクロサービスアーキテクチャを採用するべきか適切な見極めが必要なようです。
Discussion