技術ブログ
技術ブログ
2017年03月17日
このエントリーをはてなブックマークに追加

マイクロサービスにおけるNew Relicの活用

マイクロサービスは、システムを複数のサービスの集合体として構成し、サービス相互をRESTのようなシンプルで軽量なAPIで連携する手法です。

マイクロサービスによるシステム構築のメリットは、

  1. 個々のサービスが簡素化され、理解および管理しやすくなる
  2. システム全体ではなく、サービスを担当するチーム毎に得意な言語で開発ができる
  3. 小規模な単位で並列的に開発できるため、ビルドやテストなど開発効率が上がる
  4. システム全体ではなく、サービス毎に変更やデプロイができる
  5. 各サービスが軽量なAPIで疎結合する作りのため、サービス毎にスケールできる
  6. 問題が発生した際、ルートコーズの調査範囲を絞りやすい

などなど

これまでのモノリシックなシステムでは、ビジネスロジック、UI、データベースアクセスなど複数の機能を1つのソフトウェアの実行環境としてデプロイします。ちょっとした変更でも、全体のリビルドが必要ですし、一部の機能にボトルネックが生じたとしても、全体をスケールさせる必要があります。また変更が繰り返される度にソフトウェア構造の把握が難しくなり、それが変更やトラブルシューティングをさらに複雑化し、ビジネス変化への迅速な対応に支障が生じてきました。

マイクロサービスでは、小規模な機能サービス毎にソフトウェアの実行環境を分割し、それぞれを疎結合する作りにすることで、個々の実行環境が簡素化され、変化に強いシステムを作ることができます。また特定の機能サービスが停止したような場合でも、相関する他の機能サービスがそれを検知するとそのサービスを自動的に切り離し、デフォルトのコンテンツを表示するといった障害に強いシステム構築も可能になります。

New Relic APMをマイクロサービスにおける結合テストツールとして活用することで、個々のマイクロサービスの変更やデプロイ時におけるシステム全体への影響把握や障害時のルートコーズ分析を迅速化および省力化でき、リリース頻度やサービス品質をさらに高めることができるようになります。

マイクロサービスのデメリットとして、分散化するシステム設計が複雑になる、通信オーバヘッドが大きくなる、運用管理が大変である、といったものがあります。小さなサービスとして機能分割するため、アプリケーション全体から見た整合性をとることが困難です。特に、異常処理やトランザクション処理の設計は顕著に難しくなります。また、小さく分割されたサービス間で行われる通信が大量に発生することになります。障害分析やシステムの最適化のためには、これら大量のサービス間通信をトレースし、管理する必要があり、その運用負荷は非常に高いものとなります。またこれまでのモノリシックなシステムでは、ログファイルもまとまって出力されていましたが、マイクロサービスではログファイルも分散され出力されることになるため、それらを相関して分析することは大きな労力を伴います。

New Relic APMを活用することで、このようなマイクロサービスの複雑性を取り除くことができます。バグの調査やシステムの最適化がリアルタイムなメトリクス監視レベルで可能となり、分散し複雑化するログ分析に頼る必要が削減されます。New Relic APMでは個々のマイクロサービスを自動的にディスカバリーし、サービス間の依存関係をサービスマップとして可視化します。個々のマイクロサービスの変更や追加に伴う他のマイクロサービスおよびシステム全体への影響がリアルタイムに可視化され、ロールバック等の即時対応が可能となります。さらにコード・レベルまでドリルダウンし、そのルートコーズを特定し、根本的なトラブルシューティングにも活用できます。またシステム全体のボトルネック領域が瞬時に把握可能となり、個々のマイクロサービスだけでなく、相関するマイクロサービスのトランザクション処理や通信処理まで一元的に容易にトレースし分析できるようになることでシステムの最適化が容易になります。

Service Map

Service Map
マイクロサービス間のトランザクションをトレースし、トポロジーを自動描画。
マイクロサービス間や顧客体験への性能影響をリアルタイムに把握可能

さらにNew Relic BROWSER / MOBILE / SYNTHETICSを活用すると、顧客体験への影響をリアルタイムに把握することも可能になります。リリース時のサービス影響やルートコーズ分析のリアルタイム化と担当者間における情報の共有化および相互理解が進むことで、顧客への影響が顕在化する前にロールバック等の対処が可能となり、プロダクション環境を用いたA/Bテストやカナリー・デプロイメント等の展開も効率化できます。ユーザ行動分析に基づく試行錯誤的なアプリ変更の重要性が増してきていますが、リリース時の顧客体験への影響が即座に把握できるようになることで、より迅速で適確な対応が可能となります。サーバサイドだけでなくフロントエンドアプリを含めた包括的な性能分析が可能となり、迅速なトラブルシューティングだけでなく、どこにボトルネックがあるかが可視化されることで、アプリケーションコードの最適化が図れ、顧客体験を向上させることができるようになります。

このエントリーをはてなブックマークに追加

この記事を書いた人

HironoriIchiki
HironoriIchiki 社内フリーランスとして組織横断的にあれこれ活動中!

PROプランのすべての機能を
30日間無料でお試し

新規無料登録いただくとPROプランのすべての機能を
30日間無料でお試しいただけます。
クレジットカードなど決済情報の登録は不要です。

各プランの詳細はこちらからご確認ください。