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

マイクロサービスとは?マイクロサービスはソフトウェア開発アプローチの1つで、アプリケーションを一枚岩の「モノリシック」なプログラムとしてではなく、複数のサービスや機能を疎結合させて構築します。
マイクロサービスのアーキテクチャでは、大規模で複雑なアプリケーションを提供する際のスピードと信頼性が向上します。何をもってマイクロサービスと呼ぶのでしょうか?マイクロサービスであるかどうかは、コーディング手法ではなく、それがどのように大規模なシステムやソリューションの一部となっているかによって決まります。マイクロサービスは、通常、狭い範囲に適用され、小さなタスクに特化しています。
このブログ記事では、マイクロサービスアーキテクチャの役割、モノリシックアーキテクチャとの相違点、現代のデジタル企業におけるその重要性について取り上げます。
従来のモノリシックなアプローチ
これまで、ソフトウェアシステムのほとんどが、一枚岩のモノリシックなアプリケーションとして構築されてきました。コンポーネントが疎結合されているマイクロサービスやサービス指向のアーキテクチャとは対照的に、モノリシックなアプリケーションではコンポーネントと機能は密結合されています。モノリシックなアプローチには以下のような難点があります。
- コード基盤が拡大する一方で、それに対し改善や変更を加えるのが難しく、個々の変更がアプリケーション全体に影響を及ぼす可能性があるためリファクタリングが容易でない。
- モノリシック(一枚岩)のアプリケーション全体に変更の影響が及ぶため、テストと導入が複雑。
- コンポーネント1つの障害でアプリケーション全体がダウンするため、リスクが高い。
マイクロサービスは、従来のモノリシックなシステムよりも優れた柔軟性を提供します。マイクロサービス開発には決まった1つの方法があるわけではありませんが、マイクロサービスアーキテクチャにおけるデータ管理については一般的なガイドラインがあります。開発チームの関心がマイクロサービスに向かう背景には、以下のような理由からデータ管理が複雑になっているという事情があります。
- 大規模なチームで作業を行う
- 多くのユーザーインタラクションモデルをサポートしている
- 各ビジネス機能をそれぞれ別個に強化できるようにしている
- いくつものWebサービスを提供している
しかし、最大の違いはそのサイズです。モノリシックアーキテクチャではサイズが大きすぎて、変更や導入、拡張を行えないことが少なくありません。
サービス指向アーキテクチャ(SOA)の役割
多種多様なアプリケーションとの統合を必要とする大規模で複雑なビジネスアプリケーション環境には、SOAのほうが適しています。それに対し、より小規模で細分化されたWebベースのシステムには、開発者がコントロールしやすいマイクロサービスが適しています。アプリケーションを小さな部品に分割することは新しい概念ではなく、マイクロサービス以前にもサービス指向アーキテクチャ(SOA)ですでに取り入れられていました。
SOAの目標は以下のとおりです。
- 技術戦略よりもビジネス価値を優先する。
- プロジェクト固有の利益よりも戦略的目標が重要である。
- カスタム統合よりも本質的な相互運用性が重要である。
- 特定の目的を持った実装よりも共有サービスが重要である。
- 最適化よりも柔軟性を優先する。
- 最初から完成を目指すよりも徐々に改善していく。
マイクロサービスはIT部門で起きたDevOps文化への移行の一端です。DevOpsでは開発チームと運用チームが緊密に連携しながら、ライフサイクル全体にわたってアプリケーションをサポートしていきます。すでにSOA文化が浸透している企業では、マイクロサービスの導入を検討すべきです。
サービス指向のアーキテクチャは本質的に、相互に通信する複数のサービスの集合体です。通信は、単純なデータの受け渡しであることもあれば、何らかのアクティビティを協調的に行う2つ以上のサービスが関与することもあります。
サービス指向のアーキテクチャは、アジャイルの高速な開発サイクルでは効果的な戦略です。マイクロサービスを採用するメリットは、主に開発者が継続的デリバリーサイクルを導入できるという点にあります。マイクロサービスを採用する前に、まずはすでに利用しているテクノロジーを評価する必要があります。どちらのアーキテクチャのパフォーマンスが高いかではなく、構築しようとしているアプリケーションの目的を評価することが重要なのです。
マイクロサービスの一般的な問題
マイクロサービスのアプローチには、文化に関連するいくつかの大きな課題があります。具体的には、相互に自立したチームがそれぞれ異なる作業スタイルを持つという点と、いつまでたっても「終わった」と感じられないという点です。
- たとえば、マイクロサービスによって生産性の向上やよりよいツール選択が可能になるにもかかわらず、しばしば各チームが別のコーディング言語、フレームワーク、ライブラリを選びたがるといった問題が発生します。このようなかたちの自立に慣れていないチームは行き詰まってしまうかもしれません。
- また、モノリシックアーキテクチャでは変更そのものが大きな1つのプロジェクトとなり、始まりと終わりが明確になるという利点がありますが、マイクロサービスでは変更が絶えず行われます。頻繁な変更は悪いことではなく、システムを進化させるために欠かせない特性の1つなのですが、このようなフローになじみのないチームは適応するための努力が必要になるかもしれません。
- さらに、マイクロサービスの複雑さに応じた監視を行うために、戦略的なアプローチが必要になります。
マイクロサービス導入の一般的な利点
マイクロサービスへの切り替えが進む背景には、イノベーションが加速する中、企業がビジネス上の優先事項に集中的に取り組もうとしていることがあります。同様に、スピードと成果を重視するDevOpsの広がりも、マイクロサービスへの関心に拍車をかけています。
Amazon、Spotify、Uber、Groupon、Karmaなど、多くの企業がモノリシックアーキテクチャからマイクロサービス構造へとシステムを進化させてきました。Netflix社の開発者はマイクロサービスを使用して、毎日数千ものコードセクションをデプロイし、1億3,900万人の契約者と100億時間に及ぶ映画やTVドラマシリーズをサポートしています。
マイクロサービスは、ソフトウェアの開発と導入を迅速に行えるため、コストを節約し、企業の競争力を高めることができます。開発時点でアプリケーションがどのようなデバイスで実行されるか予測できない場合、マイクロサービスアーキテクチャは最適な選択です。開発者は、アプリケーションの速度を低下または停止させることなく、制御しながら迅速にアップグレードすることができます。その他にも以下の利点があります。
- 安定性:機能が分割されているため、アプリケーションのコンポーネントを個別にスケールアップまたはスケールダウンできます。これによって障害も分離できるため、コンポーネントの1つで障害が起きたとしてもアプリケーション全体をダウンさせずに済みます。
- 特定のベンダーやテクノロジーに縛られない:マイクロサービスでは、必要であればマイクロサービスごとに異なるテクノロジースタックを選択することも可能です。
- 構築と保守が容易:単一用途のために設計されているため、小規模なチームで構築と保守を行えます。各チームが複数の機能を担当することもできます。また、各マイクロサービスは個別に導入可能です。
- コードの質が向上:ソリューション全体をモジュール化して別々のコンポーネントにすることで、アプリケーションの開発チームはその都度、小さな一部分に集中できます。そのため、コーディングとテストのプロセス全体が簡素化されます。
- チーム間の調整が容易:従来のサービス指向アーキテクチャ(SOA)はプロセス間で処理の重い通信プロトコルを使用するのに対し、マイクロサービスはイベントストリーミングテクノロジーを使用するため、統合が容易です。
- リアルタイム処理:マイクロサービスの根幹にあるのはパブリッシュ-サブスクライブ型のフレームワークです。データをリアルタイム処理し、出力結果とインサイトを速やかに提供できます。
- プロジェクト開発が高速:マイクロサービスは独立して動作するため、機能を変更する際にコード基盤を変更する必要がありません。1つのコンポーネントを個別に変更し、テストし、デプロイできるため、アプリケーションを迅速に提供できます。
- 大規模化が可能:拡張性には、より大量の処理が可能になるというだけではなく、労力の面でも利点があります。マイクロサービスの場合、スケーリングのボトルネックを容易に特定でき、マイクロサービスごとに解決できます。
マイクロサービスを監視する方法
監視は、マイクロサービスアーキテクチャにとって極めて重要な要素です。アプリケーションをコンポーネントに分割するマイクロサービスは、多くのメリットをもたらす一方、複雑化を招きます。マイクロサービスは相互に通信する必要があり、さらに、個別に作成、更新される各コンポーネントと他のコンポーネントを連携させる必要もあります。そして、これらの通信や連携は最小限の遅延で行う必要があります。つまり、マイクロサービスで構成されるアプリケーションの管理とは、相関するコンポーネントからなるネットワークを管理することを意味します。全体の信頼性を確保するには、ネットワークを効果的に管理することが不可欠です。
監視とオブザーバビリティは、DevOpsやアジャイルの考え方を身につけている開発者にはおなじみかもしれません。マイクロサービスを成功させるには、これらのアプローチとともに、SDLC(ソフトウェア開発ライフサイクル)のあらゆる段階で自動化とコラボレーションを実現する必要があります。構成管理、CI/CDサーバー、APM、ネットワーク監視、ダッシュボード、自動アラート、インシデント管理は、マイクロサービスを実行するチームにとっての基盤です。
マイクロサービス監視には、基本的な監視と、迅速なアプリケーションデプロイという2つの要素が不可欠です。
- 基本的な監視:テスト段階で捕捉できなかった問題を速やかに検出できることが重要です。ここでは最低限、技術的な問題(エラー数、サービスの利用可否など)を検出する必要がありますが、ビジネスの問題を監視することにも意味があります(受注減の検出など)。問題が突然発生した場合、個別のサービスやオペレーティングシステムを速やかにロールバックすることができます。
- 迅速なアプリケーションのデプロイ:管理するサービスが非常に多いため、テスト環境と本番環境へのデプロイを迅速に行う必要があります。一般には、数時間以内に終えるべきでしょう。初期段階では手動操作による介入が多少あってもかまいませんが、早々に完全な自動化を目指す必要があります。
これらを実現するためには、DevOps文化に見られるような開発者と運用者の緊密な連携という重要な転換が組織に求められます。プロビジョニングとデプロイを迅速に行うには、このような連携が必須です。監視で問題が見つかった場合に速やかに対応できるようにしておくことも重要です。
分散したシステムでは、より効果的なオーケストレーション、マイクロサービスの負荷分散、障害分離など、さまざまなチームがオブザーバビリティの文化の確立に向けて協力していくことが可能になります。
もちろん監視は、マイクロサービスアーキテクチャを維持するために最優先で実行する必要があり、異常が発見された場合には対応が必要です。迅速かつ効果的に対応するには、アラートプロセスとインシデント対応計画を策定しておくことが重要になります。
結論:マイクロサービスは迅速化の鍵
マイクロサービスはまだ比較的新しいアーキテクチャですが、今後も普及はますます進むでしょう。マイクロサービスによって、チームは製品やアプリケーションをスケーリングしながら、自立的に成長します。マイクロサービスをどのように導入するかにかかわらず、市場投入までの時間を短縮することが主要な目標の1つとなるはずです。それだけでも、多くのチームにとって切り替える価値があります。
このブログはこちらの英語ブログの翻訳です。
この記事について誤りがある場合やご提案がございましたら、ssg-blogs@splunk.comまでメールでお知らせください。
この記事は必ずしもSplunkの姿勢、戦略、見解を代弁するものではなく、いただいたご連絡に必ず返信をさせていただくものではございません。
関連記事
Splunkについて
Splunkプラットフォームは、データを行動へとつなげる際に立ちはだかる障壁を取り除いて、オブザーバビリティチーム、IT運用チーム、セキュリティチームの能力を引き出し、組織のセキュリティ、レジリエンス(回復力)、イノベーションを強化します。
Splunkは、2003年に設立され、世界の21の地域で事業を展開し、7,500人以上の従業員が働くグローバル企業です。取得した特許数は1,020を超え、あらゆる環境間でデータを共有できるオープンで拡張性の高いプラットフォームを提供しています。Splunkプラットフォームを使用すれば、組織内のすべてのサービス間通信やビジネスプロセスをエンドツーエンドで可視化し、コンテキストに基づいて状況を把握できます。Splunkなら、強力なデータ基盤の構築が可能です。