マイクロサービスの重要性

Observability Stephen Watts

マイクロサービスとは?マイクロサービスはソフトウェア開発アプローチの1つで、アプリケーションを一枚岩の「モノリシック」なプログラムとしてではなく、複数のサービスや機能を疎結合させて構築します。

マイクロサービスのアーキテクチャでは、大規模で複雑なアプリケーションを提供する際のスピードと信頼性が向上します。何をもってマイクロサービスと呼ぶのでしょうか?マイクロサービスであるかどうかは、コーディング手法ではなく、それがどのように大規模なシステムやソリューションの一部となっているかによって決まります。マイクロサービスは、通常、狭い範囲に適用され、小さなタスクに特化しています。

このブログ記事では、マイクロサービスアーキテクチャの役割、モノリシックアーキテクチャとの相違点、現代のデジタル企業におけるその重要性について取り上げます。

従来のモノリシックなアプローチ

これまで、ソフトウェアシステムのほとんどが、一枚岩のモノリシックなアプリケーションとして構築されてきました。コンポーネントが疎結合されているマイクロサービスやサービス指向のアーキテクチャとは対照的に、モノリシックなアプリケーションではコンポーネントと機能は密結合されています。モノリシックなアプローチには以下のような難点があります。

マイクロサービスは、従来のモノリシックなシステムよりも優れた柔軟性を提供します。マイクロサービス開発には決まった1つの方法があるわけではありませんが、マイクロサービスアーキテクチャにおけるデータ管理については一般的なガイドラインがあります。開発チームの関心がマイクロサービスに向かう背景には、以下のような理由からデータ管理が複雑になっているという事情があります。

しかし、最大の違いはそのサイズです。モノリシックアーキテクチャではサイズが大きすぎて、変更や導入、拡張を行えないことが少なくありません。

サービス指向アーキテクチャ(SOA)の役割

多種多様なアプリケーションとの統合を必要とする大規模で複雑なビジネスアプリケーション環境には、SOAのほうが適しています。それに対し、より小規模で細分化されたWebベースのシステムには、開発者がコントロールしやすいマイクロサービスが適しています。アプリケーションを小さな部品に分割することは新しい概念ではなく、マイクロサービス以前にもサービス指向アーキテクチャ(SOA)ですでに取り入れられていました。

SOAの目標は以下のとおりです。

マイクロサービスはIT部門で起きたDevOps文化への移行の一端です。DevOpsでは開発チームと運用チームが緊密に連携しながら、ライフサイクル全体にわたってアプリケーションをサポートしていきます。すでにSOA文化が浸透している企業では、マイクロサービスの導入を検討すべきです。

サービス指向のアーキテクチャは本質的に、相互に通信する複数のサービスの集合体です。通信は、単純なデータの受け渡しであることもあれば、何らかのアクティビティを協調的に行う2つ以上のサービスが関与することもあります。

サービス指向のアーキテクチャは、アジャイルの高速な開発サイクルでは効果的な戦略です。マイクロサービスを採用するメリットは、主に開発者が継続的デリバリーサイクルを導入できるという点にあります。マイクロサービスを採用する前に、まずはすでに利用しているテクノロジーを評価する必要があります。どちらのアーキテクチャのパフォーマンスが高いかではなく、構築しようとしているアプリケーションの目的を評価することが重要なのです。

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

マイクロサービスの一般的な問題

マイクロサービスのアプローチには、文化に関連するいくつかの大きな課題があります。具体的には、相互に自立したチームがそれぞれ異なる作業スタイルを持つという点と、いつまでたっても「終わった」と感じられないという点です。

マイクロサービス導入の一般的な利点

マイクロサービスへの切り替えが進む背景には、イノベーションが加速する中、企業がビジネス上の優先事項に集中的に取り組もうとしていることがあります。同様に、スピードと成果を重視するDevOpsの広がりも、マイクロサービスへの関心に拍車をかけています。

Amazon、Spotify、Uber、Groupon、Karmaなど、多くの企業がモノリシックアーキテクチャからマイクロサービス構造へとシステムを進化させてきました。Netflix社の開発者はマイクロサービスを使用して、毎日数千ものコードセクションをデプロイし、1億3,900万人の契約者と100億時間に及ぶ映画やTVドラマシリーズをサポートしています。

マイクロサービスは、ソフトウェアの開発と導入を迅速に行えるため、コストを節約し、企業の競争力を高めることができます。開発時点でアプリケーションがどのようなデバイスで実行されるか予測できない場合、マイクロサービスアーキテクチャは最適な選択です。開発者は、アプリケーションの速度を低下または停止させることなく、制御しながら迅速にアップグレードすることができます。その他にも以下の利点があります。

マイクロサービスを監視する方法

監視は、マイクロサービスアーキテクチャにとって極めて重要な要素です。アプリケーションをコンポーネントに分割するマイクロサービスは、多くのメリットをもたらす一方、複雑化を招きます。マイクロサービスは相互に通信する必要があり、さらに、個別に作成、更新される各コンポーネントと他のコンポーネントを連携させる必要もあります。そして、これらの通信や連携は最小限の遅延で行う必要があります。つまり、マイクロサービスで構成されるアプリケーションの管理とは、相関するコンポーネントからなるネットワークを管理することを意味します。全体の信頼性を確保するには、ネットワークを効果的に管理することが不可欠です。

監視とオブザーバビリティは、DevOpsやアジャイルの考え方を身につけている開発者にはおなじみかもしれません。マイクロサービスを成功させるには、これらのアプローチとともに、SDLC(ソフトウェア開発ライフサイクル)のあらゆる段階で自動化とコラボレーションを実現する必要があります。構成管理、CI/CDサーバー、APM、ネットワーク監視、ダッシュボード、自動アラート、インシデント管理は、マイクロサービスを実行するチームにとっての基盤です。

マイクロサービス監視には、基本的な監視と、迅速なアプリケーションデプロイという2つの要素が不可欠です。

これらを実現するためには、DevOps文化に見られるような開発者と運用者の緊密な連携という重要な転換が組織に求められます。プロビジョニングとデプロイを迅速に行うには、このような連携が必須です。監視で問題が見つかった場合に速やかに対応できるようにしておくことも重要です。

分散したシステムでは、より効果的なオーケストレーション、マイクロサービスの負荷分散、障害分離など、さまざまなチームがオブザーバビリティの文化の確立に向けて協力していくことが可能になります。

もちろん監視は、マイクロサービスアーキテクチャを維持するために最優先で実行する必要があり、異常が発見された場合には対応が必要です。迅速かつ効果的に対応するには、アラートプロセスとインシデント対応計画を策定しておくことが重要になります。

結論:マイクロサービスは迅速化の鍵

マイクロサービスはまだ比較的新しいアーキテクチャですが、今後も普及はますます進むでしょう。マイクロサービスによって、チームは製品やアプリケーションをスケーリングしながら、自立的に成長します。マイクロサービスをどのように導入するかにかかわらず、市場投入までの時間を短縮することが主要な目標の1つとなるはずです。それだけでも、多くのチームにとって切り替える価値があります。

このブログはこちらの英語ブログの翻訳です。

関連記事

DevOpsのリリース管理の概念とベストプラクティス
オブザーバビリティ
5 分程度

DevOpsのリリース管理の概念とベストプラクティス

DevOpsのリリース管理におけるベストプラクティスを説明します。チームが迅速にデプロイできるスケジュールを自動化および維持し、信頼性の高いソフトウェアをよりスピーディにリリースするのに役立ちます。
何を監視すべきか?4つのメトリクス(L.E.T.S.)で始めましょう。
オブザーバビリティ
5 分程度

何を監視すべきか?4つのメトリクス(L.E.T.S.)で始めましょう。

レイテンシー、エラー、トラフィック、サチュレーションの4つは、ソフトウェアの状態をより的確に把握するための基礎となります。
トラブルシューティングを加速する、エンジニアリングチームのためのSplunkの新しいオブザーバビリティイノベーション
オブザーバビリティ
5 分程度

トラブルシューティングを加速する、エンジニアリングチームのためのSplunkの新しいオブザーバビリティイノベーション

Splunk Observability Cloudがさまざまな点でさらに進化しました。エンジニアリングチームは、環境全体をより詳細に可視化し、より統合的なインシデント対応アプローチを取り入れることで、雑音をはねのけ、トラブルシューティングを加速できます。