本格的な普及期を迎えたコンテナに潜むリスクとその抜本的な対策とは
- アプリケーション開発
- インタビュー
- コンテナ
- ../../../article/2020/11/sysdig.html

大規模なアプリケーションを小さな独立したサービスに分割することで、開発の柔軟性とスケーラビリティを向上させるアーキテクチャスタイルを指す。独立性の高い複数のサービスを組み合わせ連携してシステム全体を構築するため、サービスごとの更新が比較的容易で、開発期間や更新にも時間をかけず、ニーズに合わせて迅速に対応できる。対義語として「モノリス」「モノリシックアーキテクチャ」がある。
マイクロサービス(Microservices)とは、大規模なアプリケーションを小さな独立したサービスに分割するアーキテクチャスタイルの一つです。各サービスは個々の機能を果たし、それぞれが独立して動作します。そのため開発も個々に進めることが可能です。
マイクロサービス、マイクロサービスアーキテクチャについて、対比の概念となる「モノリス」「モノリシックアーキテクチャ」と比較して解説します。
上で紹介したとおり、マイクロサービスとはアプリケーションの機能を「サービス」ごとに「細かく」分割した構造になっています。サービスを構成する機能自体が、実際に別のマシン(物理的なマシンだけでなく仮想プラットフォームなども含む)に分割されています。システム全体を動かすには各サービスを連携させることが基本となります。
近年のIT開発やビジネスにおける変化は激しく、それに伴ってシステムやソフトウェア、アプリケーションは常にニーズに合わせた新しい機能追加や更新を求められています。そのため、従来のような全体が完成してからリリースする長期間にわたる開発手法(ウォーターフォール開発)よりも、開発からリリース、FBと改善のサイクルを短いスパンで繰り返す「アジャイル開発」が主流になっています。
ここから、巨大なシステムやアプリケーションを「巨大な単一のもの」として開発するのではなく、機能ごとに小さく分割して開発できる「マイクロサービス」のほうが拡張性や状況に応じた柔軟性が高いことから、広く注目を集めています。
マイクロサービスの対義の構造となるのがモノリスです。モノリスも内部にさまざまな機能やアプリケーションを内包しますが、単一のマシンの中にあり、分割できません。モノリスの概念を利用しているのが従来のソフトウェア開発モデルであり、「モノリシックアーキテクチャ」といいます。
モノリシックアーキテクチャは特に従来の日本の多くのビジネスモデルまたはプログラム開発手法であり、開発からリリースまでに時間がかかること、一つのサービスを更新・変更するためには全体を更新しなければならないことから現代の開発手順や市場ニーズへの迅速な対応には不適合のケースが多くなっています。
マイクロサービスの主な特徴をまとめると以下のとおりです。
各マイクロサービスは独立して動作し、それぞれが自身のデータストアを持つことが可能です。これにより、他のサービスの影響を受けずに開発やデプロイを行うことができます。
各サービスは独立して開発することが可能で、異なる技術スタックを使用することもできます。これにより、チームはそれぞれのサービスに最適な技術を選択し、スケジュールに合わせて開発を進めることができます。
各サービスは独立しているため、需要の高いサービスだけをスケールアウトすることができ、リソースの効率的な利用が可能になります。また技術の選択や開発の進行が柔軟になります。
一つのサービスがダウンしても、他のサービスに影響を与えにくい仕組みです。
一方で、マイクロサービスは以下のような課題も抱えています。
各サービスが独立し連携しているため、システム全体の管理やサービス間の通信、データの整合性などが複雑になることがあります。