![]() |
電子情報通信学会 - IEICE会誌 試し読みサイト
© Copyright IEICE. All rights reserved.
|
情報通信マネジメント研究専門委員会
マイクロサービスと分散トレーシング
マイクロサービスとは,単一の大規模なアプリケーション(モノリス)を,独立して開発・デプロイ・スケーリング可能な小さなサービス群に分割するソフトウェアアーキテクチャの手法である(1).図1では,従来のモノリシックアーキテクチャとマイクロサービスアーキテクチャの例を示している.マイクロサービスは,各サービスが特定のビジネス機能に特化し,明確に定義されたAPIを通じて他のサービスと通信するという特徴を持っている.
このアーキテクチャが注目を集めた背景には,2000年代後半からのクラウドコンピューティングの普及と,アジャイル開発の浸透がある.特に,NetflixやAmazonといった大規模Webサービスが採用し,その知見を共有したことで広く認知されるようになった.
マイクロサービスの主なメリットとして以下が挙げられる.
1.開発の独立性:各チームが独自のサービスを担当し,他チームの影響を受けずに開発可能
2.技術の柔軟性:サービスごとに最適な技術スタックを選択可能
3.スケーラビリティ:必要なサービスのみを個別にスケールアウト可能
4.障害の局所化:一部のサービスの障害が全体に波及することを防止
マイクロサービスは多くのメリットをもたらすが,サービス数が多くなると,サービス間の連携や管理が複雑になることや,サービス間通信が増えることによるネットワーク負荷の上昇といった課題が存在する.適切な設計と運用を行うことで,システムの柔軟性,拡張性,可用性を高めることができるアーキテクチャではあるが,導入にあたっては,適切な対策を講じることが重要となる.特に,多数のサービスを監視・運用するためには,各サービスの状態を把握するための可観測性の向上が重要となる.以降では,可観測性を向上するための技術の一つである分散トレーシングについて解説する.
マイクロサービスにおけるトレースとは,サービスへの単一の要求とそれを処理するための全体的なパスを意味する(2).分散トレーシングは,サービスへの単一の要求ごとに発生する処理を追跡し,様々なコンポーネントでの処理履歴をひも付け,一つのパスとして監視できるようにすることで可観測性を向上させる技術である(3).
分散トレーシングの概念はGoogleの分散トレーシング基盤であるDapperについて公表された文献で広く知られるようになった(4).これに基づいて,Opentracingプロジェクト(5)は,分散トレースのための言語中立なデータモデルを提供している.
図2はOpentracingにおけるトレースとスパンのイメージを示している.
スパンの実行履歴であるスパンログは,操作名,開始タイムスタンプ,終了タイムスタンプ,スパンコンテキスト,他のスパンへの参照,任意のデータ,を持つ構造体である.スパンコンテキストは自身のスパンID,トレースIDを持つ構造体である.自身のスパンIDは,スパンログとして記録される処理を開始する際に生成する一意のIDであり,トレースIDはマイクロサービスへリクエストが到着して最初に処理を開始する際に生成するトランザクション全体を識別するための一意のIDである.他のスパンへの参照は,そのスパンの呼び出し元(親)のスパンIDである.各スパンは,別のスパンの呼出しの際にトレースIDと自身のスパンIDを受け渡す.スパン間でトレースIDが伝搬され記録されることで,別個に収集されたスパンログを後からひも付けることができる.
分散トレーシングは様々な実装が存在するが,その大まかな流れは共通しており(6),図3は,分散トレーシングがLogging, Collection, Preprocessing, Storage, Analysisの五つの処理によって実現されている様子を示している.
Loggingはマイクロサービスの各サービスインスタンス内で実施される.スパンの処理名や,処理開始,終了のタイムスタンプに加え,自身のスパンIDや親スパンのID,トレースIDを記録し,スパンログを生成する.
Collectionは各サービスインスタンスに配置されたエージェントを経由してLoggingで記録されたスパンログをマネージャに集める処理である.
PreprocessingはCollectionによって各サービスインスタンスから収集されたスパンログの前処理であるトレースID,親のスパンIDを参照しスパンログをひも付け,エンドユーザからリクエストを受けてレスポンスを返すまでのトランザクション全体を表すスパンのツリー(すなわちトレース)を構成する.
StorageはPreprocessingで構成されたトレースをデータベースに保管する処理である.
AnalysisはStorageで蓄積されたトレースを利用して行われる様々な分析処理である.例としては,同一のリクエストパスを持つトレース同士を比較し異常のあるスパンを発見するトレース差分分析や,サービス間の呼出しの回数をカウントしサービス間の依存関係を示す有向グラフを作成するサービス依存性分析などが挙げられる.
本章では,分散トレーシングの研究開発動向を説明する.
文献(6)によれば,大規模なマイクロサービスの場合は,そのマイクロサービスのために社内独自の分散トレーシングのシステムを開発して運用する場合が多く,中小規模なマイクロサービスの場合は他社,若しくはオープンソースの分散トレーシングシステムを導入する場合が多い.
近年,分散トレーシングの機能を持つソフトウェアやサービスは増加してきており,Jaeger(7),AWS : X-ray(8),Alibaba : ARMS(9),Dynatrace(10),Splunk(11),Apache Skywalking(12),Zipkin(13)などが存在する.このような既存実装を利用することにより,分散トレーシングの導入が容易になる.
文献(6)では,トレースデータの分析手法の高度化は発展途上にあると述べている.トレースデータの分析については,異常検知や根本原因特定を目的として様々な研究が行われている.
文献(14)は,ベイジアンネットワークを利用してトレースデータに対して定期的にオフライントレーニングを行うことで,学習したパターンから逸脱するトレースを発見する手法を提案している.文献(15)は,平均値と標準偏差に基づく外れ値検出によってレイテンシの大きいトレースを検出した後,PageRankとスペクトル分析を活用してレイテンシの原因となるサービスを絞り込む手法を提案している.文献(16)は,マイクロサービスにおけるコンセプトドリフトを課題とし,トレースデータに対しデータストリームクラスタリングを用いた異常箇所特定手法を提案している.
マイクロサービスはアプリケーション開発において多くのメリットをもたらすが,規模が大きくなると可観測性の確保が従来のアーキテクチャより難しくなるというデメリットがある.分散トレーシングは,マイクロサービスの可観測性の確保のために欠かせない技術で現在まで様々な検討がなされてきており,今後も更なる発展が期待される.
(1) M. Fowler, “Microservices.”
https://martinfowler.com/articles/microservices.html (2025年2月確認)
(2) CNCF, “Observability Whitepaper.”
https://github.com/cncf/tag-observability/blob/main/whitepaper.md(2025年2月確認)
(3) C. Richardson, “Microservices patterns : With examples in java,” Manning Publications Co., 2019.
(4) B.H. Sigelman, L.A. Barroso, M. Burrows, P. Stephenson, M. Plakal, D. Beaver, S. Jaspan, and C. Shanbhag, “Dapper a large-scale distributed systems tracing infrastructure,”2010.
(5) Opentracing. Io, “Opentracing.”
https://opentracing.io/. (2025年2月確認)
(6) B. Li, X. Peng, Q. Xiang, H. Wang, T. Xie, J. Sun, and X. Liu., “Enjoy your observability : an industrial survey of microservice tracing and analysis,” Empirical Software Engineering, pp.1-28, 2022.
(7) Jaegertracing. Io, “Jaegertracing.”
https://www.jaegertracing.io/. (2025年2月確認)
(8) Aws. Amazon. Com, “AWS.”
https://aws.amazon.com/xray/ (2025年2月確認)
(9) Alibabacloud. Com, “Alibabacloud.”
https://www.alibabacloud.com/en/product/arms?_p_lc=1 (2025年2月確認)
(10) Dynatrace. Com, “Dynatrace.”
https://www.dynatrace.com/solutions/distributed-tracing/ (2025年2月確認)
(11) Splunk. Com, “Splunk observability.”
https://www.splunk.com/ (2025年2月確認)
(12) Skywalking. Org, “Apache Skywalking.”
https://skywalking.apache.org/ (2025年2月確認)
(13) Zipkin. Io, “Zipkin.”
https://zipkin.io/ (2025年2月確認)
(14) P. Liu, H. Xu, Q. Ouyang, R. Jiao, Z. Chen, and S. Zhang, et al., “Unsupervised detection of microservice trace anomalies through service-level deep bayesian networks,” 31st IEEE Int. Symp. Software Reliability Engineering (ISSRE), pp.48-58, 2020.
(15) G. Yu, P. Chen, H. Chen, Z. Guan, Z. Huang, and L. Jing, et al., “Microrank : End-to-end latency issue localization with extended spectrum analysis in microservice environments,” Proc. the Web Conf., pp.3087-3098, 2021.
(16) T. Zhou, et al., “TraceStream : Anomalous service localization based on trace stream clustering with online feedback,” 34th IEEE Int. Symp. Software Reliability Engineering (ISSRE), Florence, Italy, pp.601-611, 2023.
(2025年2月20日受付)
オープンアクセス以外の記事を読みたい方は、以下のリンクより電子情報通信学会の学会誌の購読もしくは学会に入会登録することで読めるようになります。 また、会員になると豊富な豪華特典が付いてきます。
電子情報通信学会 - IEICE会誌はモバイルでお読みいただけます。
電子情報通信学会 - IEICE会誌アプリをダウンロード