コンテナとマイクロサービス: その違いは何ですか?

コンテナとマイクロサービス: その違いは何ですか?

  • ITOps・DevOps
6分で読めます 更新日 Jul 14, 2021

ポイント: コンテナとマイクロサービスは、現代のアプリケーション開発に不可欠であり、展開とスケーラビリティを向上させます。マイクロサービスは独立した設計コンポーネントであり、コンテナはこれらのサービスを効率的に展開するためにパッケージ化します。

  • マイクロサービスはアジリティと独立したスケーリングを可能にします。
  • コンテナは展開効率とリソース管理を改善します。

今日のデジタル時代は、テクノロジーサービスからますます多くの価値を求めるユーザーによって推進されています。スマートフォンとクラウドは結びつき、ソフトウェアが世界を動かす時代を迎えました。食べ物や乗り物の注文、公共料金の支払い、エンターテインメントの確保など、ソフトウェアの設計と展開は、このユーザー主導の需要に応じて進化してきました。従来のモノリスアーキテクチャは、迅速なスケーリングと実験をサポートするのが難しいことが証明されています。コンテナとマイクロサービスは、特にモバイルやウェブアプリにとって、急速に主流となりつつある現代的なアプローチの例です。

コンテナとは何ですか?

コンテナは、アプリケーションとその依存関係をパッケージとして束ね、環境に関係なく簡単かつ一貫して展開できるようにします。これらの依存関係には、アプリを実行するために必要なバイナリ、ライブラリ、構成ファイルが含まれます。輸送の標準化を実現した海上コンテナのように、ソフトウェアコンテナは、ソフトウェアを異なる計算環境に移動したときに信頼性を持って実行する方法の問題を解決します。開発者のノートパソコン、ローカルテスト環境、またはクラウド上の本番環境に展開する場合でも、コンテナはOSの配布や基盤となるインフラの違いを抽象化します。構造的には、コンテナはホストオペレーティングシステム上で動作し、仮想マシンに似ていますが、OSカーネルを共有するため、より軽量で起動が速く、メモリを少なく使用します。コンテナはハイパーバイザーではなくコンテナランタイム上でホストされるため、1つのサーバーにホストできるコンテナの数は、VMよりもはるかに多くなります(数MBのサイズ)。コンテナの構造の描写は以下に示されています:

コンテナの構造

人気の面では、GoogleのKubernetesが最も知られている無料のオープンソースのコンテナ管理システムです。一方、Dockerは、商業用コンテナ管理ソリューションとして最もよく知られています。Linuxは従来、コンテナ技術のためのOSとして使われてきましたが、MicrosoftのHyper-Vコンテナによって、Windowsも取り残されてはいません。(Kubernetes & コンテナがどのように連携するかを参照してください。)

マイクロサービスとは何ですか?

ガートナーは、マイクロサービスをサービス指向アプリケーションのコンポーネントとして定義しています。それは:

  • 厳密にスコープを絞った
  • 強くカプセル化された
  • 緩く結合された
  • 独立して展開可能
  • 独立してスケーリング可能

AWSによると、マイクロサービスアーキテクチャは、アプリケーションを独立したコンポーネントとして構築し、各アプリケーションプロセスをサービスとして実行し、これらのサービスが軽量APIを使用して明確に定義されたインターフェースを介して通信することを含みます。microservices.ioによって説明されたマイクロサービスの特性は、以下の通りです:

  • 高いメンテナンス性とテスト可能性
  • 緩く結合された
  • 独立して展開可能
  • ビジネス機能を中心に構成されている
  • 小さなチームによって所有されている

以下に示すeコマースウェブアプリケーションの例を見てみましょう。マイクロサービスアーキテクチャアプローチでは、以下の分離が見られます:

  • ログサービス
  • 在庫サービス
  • 配送サービス

各サービスは独自のデータベースを持ち、APIゲートウェイを介して他のサービスと通信します。各サービスの開発と管理は別々に行われるため、サービスは異なるニーズや状況に応じてスケールまたは変更でき、アプリケーション全体に影響を与えることなく行えます。

マイクロサービスアーキテクチャの例

マイクロサービスの採用アプローチは、新しいアプリケーションをゼロから構築するのではなく、既存のモノリスアプリケーションのリファクタリングに向けられています。マイクロサービスはアジリティとスケーラビリティのオプションを提供しますが、数百のマイクロサービスを異なるチームで管理する際の複雑さを考慮すると、関連するサポートインフラも必要です。このため、DevOpsやCI/CDなどのアプローチが、設計から開発、展開までのサービスを効率的かつ効果的に管理するのに適しています。

コンテナとマイクロサービスの比較

Ev Kontsevoyの投稿は、これら2つの用語の比較を興味深い方法で要約しています:

“コンテナは有用なリソース配分と共有技術です。DevOpsの人々が興奮するものです。マイクロサービスはソフトウェアデザインパターンです。開発者が興奮するものです。

言い換えれば、これを要約できます:

  • マイクロサービスはソフトウェアの設計に関するものです。
  • コンテナはソフトウェアを展開するためのパッケージ化に関するものです。

したがって、マイクロサービスをホストするためにコンテナを使用するかどうかを選択できます。しかし、両方からフルバリューを得るためには、マイクロサービスをコンテナ内で実行する方がはるかに良いです。アプリケーション全体を単一のVMに展開すると、マイクロサービスアーキテクチャを使用しているかどうかにかかわらず、単一障害点のリスクが生じます。しかし、アプリケーションをマイクロサービスとして複数のコンテナに分散させることで、両者の価値を完全に引き出し、レジリエンスとスケーリング、特定のサービスをターゲットにした改善を提供し、アプリケーション全体に悪影響を与えないようにします。柔軟性も提供され、開発者は、自分の選択したプログラミング言語でアプリケーションを書くことができ、コンテナが提供する環境全体で展開できるようになります。効率も、コンテナがVMと比較してリソースを少なく使用することから生まれます。追加の利点は、セキュリティの隔離と、単一のマイクロサービスまたはコンテナがハッキング攻撃などのセキュリティ侵害を受けた場合の影響を制限する、より広い攻撃面として現れます。

コンテナとマイクロサービスの課題

コンテナとマイクロサービスを使用する際の欠点は、特に大規模分散展開を扱う際の管理オーバーヘッドに関連しています。これは、そのような環境でのコンテナとマイクロサービスの展開、監視、管理が非常に困難であり、オーケストレーションをサポートし、一貫した展開を保証するための専門ツールが必要になることを意味します。他の課題には以下が含まれます:

  • 異なる言語で記述されたマイクロサービスの管理による複雑さ
  • 複数のサービス間のリモート呼び出しからのネットワークリソース使用のコスト影響
  • 分散サービス間でのログ管理に関する根本原因の調査や監査システムが困難になり、ログ集約器が必要になります

コンテナとマイクロサービスの未来

アジリティとレジリエンスの両方を提供する現代のアプリケーションの必要性は、クラウドとモバイルアプリの時代において過小評価できません。市場投入までの時間の短縮やセキュリティの向上などの利点は、ビジネスが喜んで受け入れる価値提案です。コンテナとマイクロサービスは、現在、レガシーアプリケーションをクラウドネイティブにするためのスケーリングとリファクタリングのための好ましいアプローチです。KubernetesやDocker、ハイブリッドクラウド展開やエッジコンピューティングの成長に支えられ、これらの能力の市場は今後も成長が期待されており、MarketWatchは、グローバルなクラウドマイクロサービス市場が2027年までに17億ドルに達するCAGR 12.7%を予測しています。

関連資料

これらの投稿は私自身の意見であり、必ずしもBMCの立場、戦略、または意見を表すものではありません。

ITOps・DevOpsの関連記事

BMCからのさらなる情報に興味がありますか?

ザ・ブリーフは、メインフレームとエンタープライズオーケストレーションに関する月刊メールです:研究、顧客ストーリー、製品ニュース、イベント。

このオファーに登録することで、あなたはBMCのプライバシーポリシーを読み、同意したことを確認します。

ザ・ブリーフに登録しました

ザ・ブリーフは、メインフレームとエンタープライズオーケストレーション—BMC AMIおよびControl-M—に関するアナリストの研究、顧客の展開、両者にわたるイベントを網羅しています。