マイクロサービスのメリットとデメリット

コンピューターの前にいる女性

共同執筆者

Stephanie Susnjara

Staff Writer

IBM Think

Ian Smalley

Staff Editor

IBM Think

マイクロサービス・アーキテクチャーは、組織がソフトウェア・アプリケーションを構築してデプロイする方法を変革しました。すべてのコンポーネントが緊密に接続された1つの大きなアプリケーションを作成する代わりに、マイクロサービスはアプリケーションをより小さく独立したサービスに分解します。各サービスは特定のビジネス機能を処理し、独立して開発、導入、拡張できます。

Netflix、Uber、Amazon、Spotify、Airbnbなどの企業はすべてマイクロサービスを使用して、毎日何百万ものユーザーとトランザクションを処理しています。

マイクロサービス・アーキテクチャーは、組織が従来のアプリケーション設計で直面する課題を解決するためにますます重要になっています。企業は全体的に柔軟なシステムを構築し、障害から簡単に回復し、新しい機能をより迅速に市場に投入できます。

マイクロサービスは、新興トレンドからエンタープライズITストラテジーのクリティカルなコンポーネントへと移行しました。Gartnerによると、調査済み組織の74%が現在マイクロサービス・アーキテクチャーを使用しており、さらに23%がマイクロサービス・アーキテクチャーを使用する予定であるとのことです。1

マイクロサービスは複雑さを増大させますが、そのメリットは業界全体での普及を促進しています。情報に基づいて導入を決定するためには、マイクロサービスの長所と短所を理解することが不可欠です。

マイクロサービスとは

マイクロサービス・アーキテクチャーは、アプリケーションの設計と構築方法の根本的な変化を表しており、密結合システムから分散アーキテクチャーへと移行します。開発者はすべてを1つの相互接続されたシステムとして構築するのではなく、機能を別の疎結合サービスに分割します。個別に導入可能な各モジュールは、特定のビジネス機能に焦点を当て、独自のデータ・ストレージ、ビジネス・ロジック、および通信インターフェースで動作します。

マイクロサービスのコンセプトは2010年代まで遡ることができ、サービス指向アーキテクチャ(SOA)からのシフトがありました。サービス指向アーキテクチャは、ビジネスアプリケーションをサービスと呼ばれる再利用可能なソフトウェアコンポーネントから構築するアプローチです。

マイクロサービスは、SOAの原則に基づいて構築されています。サービスは小規模であり、チームはより自律性があり、一方で集中管理は最小限に抑えられています。このアーキテクチャは、クラウド・コンピューティングクラウドネイティブ開発の台頭とともに人気を博しました。AmazonやNetflixなどの大手テクノロジー企業がこのアプローチの先駆者となったのは、より高い柔軟性と、アプリケーションのさまざまな部分を個別に拡張できる機能を必要としていたからです。

今日、マイクロサービスは主流になり、あらゆる規模の組織がアクセスできるツールおよびプラットフォームの堅固なエコシステムが備わっています。世界のマイクロサービス・アーキテクチャー市場は、2023年に3,760億8,000万米ドルと評価されました。2024年から2030年にかけてCAGRが4.9%成長し、2030年までに5,232億米ドルに達すると予測されています。2

IBM DevOps

DevOpsとは

Andrea Crawfordが、DevOpsとは何か、DevOpsの価値、そしてDevOpsのプラクティスとツールがアイデア考案から本番環境までのソフトウェア・デリバリー・パイプライン全体でアプリケーションを動かすのにどのように役立つかについて説明します。IBMのエキスパートが指導するこのカリキュラムは、ビジネス・リーダーが成長を促進するAI投資の優先順位付けに必要な知識を得られるように設計されています。

マイクロサービスとモノリシックアーキテクチャーの比較

マイクロサービスとモノリシック・アプリケーションの違いを理解することは、多くの組織が移行を進めている理由を示しています。モノリシック・アプリケーションでは、すべてが単一のコードベースを持つ1つのユニットとして構築されます。たとえば、顧客の注文、在庫管理、請求書発行を処理するエンタープライズ・ウェブ・アプリケーションには、これらすべての機能が緊密に統合されます。1つの部品を変更するには、それが他のすべての部品にどのような影響を与えるかを理解する必要があります。

このシンプルさにより初期のソフトウェア開発は簡単になりますが、アプリケーションの拡大に伴って問題が発生します。変更には、アプリケーション全体の再構築と再展開が必要です。モノリシック・アーキテクチャーでより多くの容量が必要になる場合、性能容量の増加を必要としない部分も含めて、アプリケーション全体を拡張する必要があります。

マイクロサービスは、アプリケーション・プログラミング・インターフェース(API)を通じて相互にやり取りする個別のサービスにアプリケーションを分割することで、これらの問題を解決します。各サービスには独自のコードベースとデータベースがあり、個別にデプロイできます。

世界中に何億人ものユーザーを抱える音楽プラットフォーム「Spotify」を試してみましょう。アルバムのメジャーリリース中に音楽ストリーミングの需要が急増した場合、Spotifyはユーザー認証や支払い処理に影響を与えることなく、オーディオ配信とプレイリストサービスをスケールアップします。このアプローチにより、異なるチームが競合することなく個々のサービスに同時に取り組むことができます。

マイクロサービス・アーキテクチャーでは、分散システムの管理の複雑さが増します。多くの組織は、特定のユースケースに最適なものに基づいて、マイクロサービスとモノリシックシステム、サーバーレス機能、その他のアーキテクチャパターンを組み合わせたハイブリッドなアプローチをとっています。

マイクロサービスの仕組み

マイクロサービスは、アーキテクチャー・パターン、通信方法、サポート・テクノロジーの組み合わせを通じて機能します。各マイクロサービスは独自のプロセスとして実行され、REST APIメッセージキュー、またはイベントストリームを通じてその機能を提示します。サービスはネットワーク経由で通信し、データを共有し、アクションをトリガーします。

たとえば、顧客がUber Eatsを通じて食品を注文すると、複数のサービスが順番に連携します。このシステムでは、レストランの在庫状況の確認、支払いの処理、配達ドライバーの割り当て、顧客への更新情報の送信が行われます。通常、APIゲートウェイはこの通信を管理し、リクエストを適切なマイクロサービスにルーティングする単一のエントリポイントとして機能します。

Dockerのようなコンテナ化技術は、マイクロサービスには欠かせないものとなっています。コンテナは、各マイクロサービスの実行に必要なすべてのものをパッケージ化し、異なる環境で同じように機能する標準化されたユニットを作成します。

Kubernetesと同様のクラウド・プラットフォームは、これらのコンテナのデプロイメント、スケーリング、管理を自動化することで、この進歩をさらに進めています。これらは、サービスの検出、負荷分散、正常性の監視、障害が発生した場合の自動復旧を処理します。

Microsoft Azure、IBM Cloud、Google Cloud Platformなどの主要なクラウド・プロバイダーは、マイクロサービスのデプロイとオーケストレーションのための包括的なツールとマネージド・サービスを提供しています。

コンテナだけでなく、マイクロサービスは、サービス間の通信を管理するサービスメッシュ、リクエストを監視する分散トレース、アクセスを制御するAPI管理ツールなど、他のテクノロジーにも依存しています。構成管理システムを使用すると、サービスは設定を動的に取得し、分散ロギング・プラットフォームはすべてのサービスのログを1か所にまとめることができます。

マイクロサービスの利点

マイクロサービス・アーキテクチャー統合のメリットは広範囲に及びます。最も注目すべき主要なメリットは次のとおりです。

  • 拡張性の向上
  • 俊敏性の向上と市場投入までの時間の短縮
  • 障害分離とシステム・レジリエンス
  • 費用対効果
  • DevOpsの統合と継続的デリバリー
  • テクノロジーの柔軟性とイノベーション

拡張性の向上

マイクロサービスで組織の拡張を実現します。たとえば、旅行体験プラットフォーム会社であるAirbnbは、ピーク時期に、ホスト・メッセージングやレビュー・システムなどの他のサービスを通常の処理能力で維持しながら、検索サービスと予約サービスの規模を拡大しています。

サービスごとに要件に基づいて異なるスケーリング戦略を使用します。このモジュール式アプローチにより、モノリシック・アプリケーション全体を拡張する場合と比較して、インフラストラクチャーのコストが削減され、リソース効率が向上します。

俊敏性の向上と市場投入までの時間の短縮

小規模で自律的なチームは、特定のサービスをエンドツーエンドで所有しています。各チームは、組織全体の調整や再配置サイクルを待つことなく、サービスに最適なテクノロジーを選択し、自分のペースで進みます。

企業は、既存のサービスに接続できる新しいサービスなどの機能を構築することで、アイデアを迅速にテストし、迅速に反復し、市場の変化に迅速に対応できます。

障害分離とシステム・レジリエンス

推奨エンジンがクラッシュした場合でも、ユーザーは製品を閲覧し、カートに商品を追加してチェックアウトできます。回路ブレーカーや同様のパターンを使うと、依存関係が応答しない場合、サービスは故障をスムーズに処理できます。

ダウンタイムによるコストが1分あたり数千ドルに達する企業にとって、このレジリエンスは極めて重要です。個々のコンポーネントに障害が発生した場合でも、障害が隔離されているため、アプリケーション全体がダウンすることはほとんどありません。

費用対効果

組織は効率的なリソース管理を通じてコストを節約し、アプリケーション全体ではなく、より大きな容量を必要とするサービスのみを拡張します。開発チームは、各サービスに固有の要件に最適なテクノロジー・スタックを選択することで、オーバーエンジニアリングにかかる費用を回避したり、エンタープライズ・グレードのソリューションを均一に適用したりすることで、コストを最適化できます。クラウドベースのマイクロサービスの従量課金モデルは、コストを実際の使用量に直接合わせて調整します。

IBMの調査「2021年度企業内マイクロサービス」によると、1,200人以上のITエグゼクティブ、開発者エグゼクティブ、開発者の87%が、マイクロサービス採用は費用と労力に見合う価値があることに同意しています。

DevOpsの統合と継続的デリバリー

各サービスの独立した運用により、DevOpsチームはダウンタイムを発生させることなく、新しいコンポーネントをシームレスに導入できます。

自動テスト、デプロイメント・パイプライン、Infrastructure as Code(IaC)はマイクロサービスとうまく連携し、迅速で信頼性の高いリリースの文化を生み出します。

テクノロジーの柔軟性とイノベーション

各マイクロサービスでは、特定の機能に最適なプログラミング言語(Java™、Pythonなど)、フレームワーク、データベースなど、さまざまなテクノロジーを使用できます。チームはアプリケーション全体に対して単一のテクノロジー・スタックに縛られることはありません。

組織は、新しいテクノロジーを段階的に採用し、新しいツールを試し、最大の価値を提供する専門的なソリューションを活用することができます。

マイクロサービスの欠点

マイクロサービスには大きなメリットがありますが、組織が対処すべき欠点もいくつかあります。

  • テストの複雑さ
  • セキュリティーに関する考慮事項
  • コミュニケーションの調整
  • データ管理

テストの複雑さ

マイクロサービス・ベースのアプリケーションのテストには、モノリシック・アプリケーションとは異なるアプローチが必要です。適切な性能を発揮するには、すべての依存関係、キャッシング、データ・アクセスで検証を必要とします。テスト環境には、適切な設定とデータを使用して複数のサービスを同時に実行します。

サービスが成長するにつれて、テスト・シナリオも拡大します。サービス全体でテスト・データの一貫性とデータ整合性を維持するには、戦略的な計画が必要です。

セキュリティーに関する考慮事項

マイクロサービス間のネットワーク通信では、強化されたセキュリティー要件が作成されます。API Gatewayには適切な認証と暗号化が必要です。

複数のマイクロサービスにわたる認証情報とアクセストークンを管理するには、思慮深い調整が必要であり、セキュリティチームには、分散アーキテクチャ全体のアクティビティを監視するための堅固な可視化ツールが必要です。

コミュニケーション調整

サービス間の通信を調整する際には、設計上の考慮事項が不可欠になります。サービス間の呼び出しは、プロセス内の関数呼び出しに比べてネットワークレイテンシーが増え、リクエストが複数のサービスを通過するにつれて、これらの遅延が蓄積されます。

再試行ロジック、タイムアウト、障害処理などのネットワーク・レジリエンス機能は標準的な手法となっています。サービスが独立して進化するため、APIバージョンの管理には慎重な計画も必要です。

データ管理

独自のデータベースを管理する各マイクロサービスには、データ管理の課題が生じます。トランザクションが複数のデータベースにまたがる場合に一貫性を維持するには、特定のパターンとレポーティングが必要であり、データが集中型ではなく分散化されている場合には、さまざまなアプローチが必要になります。

マイクロサービスのベスト・プラクティス

マイクロサービス・アーキテクチャーでは、綿密な計画と慎重な実行が必要です。ベスト・プラクティスには、次のストラテジーが含まれます。

  • 明確なサービス境界の定義
  • 包括的な観察可能性の実装
  • レジリエンスのための計画
  • インフラストラクチャーの管理を自動化

明確なサービス境界の定義

サービスの境界は、技術的な機能ではなく、ビジネスの機能と一致する必要があります。各サービスには、明確な所有権と明確な責任が必要です。

このアプローチにより、サービスが粒度が細かくなりすぎたり、マイクロサービスの目的を達成できないほど扱いにくいコンポーネントに無秩序に増えたりすることを防ぐことができます。

包括的な観察可能性の実装

すべてのサービスにわたる分散トレース、集中ロギング、メトリクス収集が不可欠です。問題が発生した場合に、この可視性がなければ、複数のサービスにわたるデバッグがほぼ不可能になります。

APIゲートウェイは、認証、レート制限、ルーティングなどの共通機能をサービス間で複製するのではなく、1か所に統合するのに役立ちます。

レジリエンスのための計画

回路ブレーカー、再試行ロジック、フォールバックストラテジーをサービス設計に組み込みます。これらおよびその他のマイクロサービス設計パターンは、一般的な課題に対する信頼できるアプローチを提供します。

自動化されたデプロイメント・パイプラインにより、チームはシステムの安定性を維持しながら、サービスを独立して導入できるようになります。即時の応答が必要ない場合、メッセージ・キューまたはイベント・ストリームを介した通信により、サービスは互いに緊密に依存するのではなく、疎な接続を維持します。

インフラストラクチャーの管理を自動化

サービス数が増加するにつれて、インフラストラクチャーの自動化は不可欠になります。コンテナのオーケストレーション、デプロイメントのオートメーション、構成管理を早期に導入し、運用のボトルネックを回避しましょう。

関連ソリューション
IBM Instana Observability

AIとオートメーションの力を活用することで、問題がアプリケーションスタック全体でプロアクティブに解決します。

IBM Instana Observabilityはこちら
DevOpsソリューション

DevOpsソフトウェアとツールを使用して、複数のデバイスや環境でクラウドネイティブ・アプリを構築、デプロイ、管理します。

DevOpsソリューションはこちら
クラウド・コンサルティング・サービス

ビジネスの俊敏性と成長を加速—IBMのクラウド・コンサルティング・サービスを利用して、あらゆるプラットフォーム上のアプリケーションを継続的にモダナイズしまします。

クラウド・コンサルティング・サービスはこちら
次のステップ

IBM Instana®によるプロアクティブな問題検知から、スタック全体にわたるリアルタイムの洞察まで、クラウドネイティブ・アプリケーションの安定した稼働を維持できます。

  1. IBM Instanaの詳細を見る
  2. DevOpsソリューションはこちら