監視は、マイクロサービスアーキテクチャにとって極めて重要な要素です。アプリケーションをコンポーネントに分割するマイクロサービスは、多くのメリットをもたらす一方、複雑化を招きます。マイクロサービスは相互に通信する必要があり、さらに、個別に作成、更新される各コンポーネントと他のコンポーネントを連携させる必要もあります。そして、これらの通信や連携は最小限の遅延で行う必要があります。つまり、マイクロサービスで構成されるアプリケーションの管理とは、相関するコンポーネントからなるネットワークを管理することを意味します。全体の信頼性を確保するには、ネットワークを効果的に管理することが不可欠です。
監視とオブザーバビリティは、DevOpsやアジャイルの考え方を身につけている開発者にはおなじみかもしれません。マイクロサービスを成功させるには、これらのアプローチとともに、SDLC(ソフトウェア開発ライフサイクル)のあらゆる段階で自動化とコラボレーションを実現する必要があります。構成管理、CI/CDサーバー、APM、ネットワーク監視、ダッシュボード、自動アラート、インシデント管理は、マイクロサービスを実行するチームにとっての基盤です。
マイクロサービス監視には、基本的な監視と、迅速なアプリケーションデプロイという2つの要素が不可欠です。
- 基本的な監視:テスト段階で捕捉できなかった問題を速やかに検出できることが重要です。ここでは最低限、技術的な問題(エラー数、サービスの利用可否など)を検出する必要がありますが、ビジネスの問題を監視することにも意味があります(受注減の検出など)。問題が突然発生した場合、個別のサービスやオペレーティングシステムを速やかにロールバックすることができます。
- 迅速なアプリケーションデプロイ:管理するサービスが非常に多いため、テスト環境と本番環境へのデプロイを迅速に行う必要があります。一般には、数時間以内に終えるべきでしょう。初期段階では手動操作による介入が多少あってもかまいませんが、早々に完全な自動化を目指す必要があります。
これらを実現するためには、DevOps文化に見られるような開発者と運用者の緊密な連携という重要な転換が組織に求められます。プロビジョニングとデプロイを迅速に行うには、このような連携が必須です。監視で問題が見つかった場合に速やかに対応できるようにしておくことも重要です。
分散したシステムでは、より効果的なオーケストレーション、負荷分散、障害分離など、さまざまなチームがオブザーバビリティの文化の確立に向けて協力していくことが可能になります。
もちろん監視は、マイクロサービスアーキテクチャを維持するために最優先で実行する必要があり、異常が発見された場合にも対応が必要です。迅速かつ効果的に対応するには、アラートプロセスとインシデント対応計画を策定しておくことが重要になります。