3.2K Views
February 02, 21
スライド概要
Shota Sawada
2021年1月29日に行われた「Tier IV 自動運転Web&Dataミートアップ」のプレゼン資料です
https://tier4.connpass.com/event/198897/preview/
AWS X-Rayを使った マイクロサービスの トレーサビリティ向上 Shota Sawada Jan 29th, 2021 1
Profile Shota SAWADA * FMSの開発 * 認証認可基盤の開発 GitHub: @sawadashota Twitter: @xioota 2
CONTENTS マイクロサービスの課題 分散トレーシングとは AWS X-Rayの紹介 ティアフォーにおける活用方法 3
マイクロサービスにおける課題 4
Advantages デプロイ容易性 迅速にデプロイ/ロールバックできる サービスを独立してデプロイできる 耐障害性 障害の影響を局所化できる 小さなチーム・小さなコードベース チームやコードベースが小さくなることで生産性 が向上したり、メンバーがオーナーシップを 持ちやすくなる スケーリング効率 効率よくリソースをスケールできる 再利用性 異なるアプリケーションからサービスを 使うことができる 5
Pain Points トラブルシューティング トラブルが起きたときにや影響範囲を調査したり、 原因の特定や解決する難易度が高くなる ローカル開発体験 サービスが増えていくほど、ローカルでサービスを end-to-endで動かすことが難しくなる レイテンシ モノリスでは1つのプロセスで行ってた処理を 複数ネットワークを経由して行うため レイテンシが大きくなる 認知負荷 サービスごとに異なる言語・ランタイム・ データベースが選択可能ではあるが、 オンボーディングコストが高くなる データ一貫性 サービスを跨いでトランザクションを張ることが できない 6
Pain Points トラブルシューティング トラブルが起きたときにや影響範囲を調査したり、 原因の特定や解決する難易度が高くなる ローカル開発体験 サービスが増えていくほど、ローカルでサービスを end-to-endで動かすことが難しくなる レイテンシ モノリスでは1つのプロセスで行ってた処理を 複数ネットワークを経由して行うため レイテンシが大きくなる 認知負荷 サービスごとに異なる言語・ランタイム・ データベースが選択可能ではあるが、 オンボーディングコストが高くなる データ一貫性 サービスを跨いでトランザクションを張ることが できない 7
一般的なトラブルシューティングの流れ トラブル発生 原因影響調査 恒久対応 ユーザからのレポートや アラートでトラブルに気づく ログやリソース使用状況などから 原因や影響範囲と特定 同じことが起こらないようにする エンドポイントの特定 リカバリ トラブルを引き起こした エンドポイントを特定 正しい状態にする 8
一般的なトラブルシューティングの流れ トラブル発生 原因影響調査 恒久対応 ユーザからのレポートや アラートでトラブルに気づく ログやリソース使用状況などから 原因や影響範囲と特定 同じことが起こらないようにする エンドポイントの特定 リカバリ トラブルを引き起こした エンドポイントを特定 正しい状態にする 9
一般的なトラブルシューティングの流れ トラブル発生 原因影響調査 恒久対応 ユーザからのレポートや アラートでトラブルに気づく ログやリソース使用状況などから 原因や影響範囲と特定 同じことが起こらないようにする 片っ端から各サービスのログを調査するのはツライ エンドポイントの特定 リカバリ トラブルを引き起こした エンドポイントを特定 正しい状態にする 10
分散トレーシング 11
分散トレーシングとは 相関ロギングの一種。 分散システムの動作の可視化を助け、 パフォーマンスのプロファイリング、 本番環境でのデバッグ、障害や インシデントの根本原因分析などに 役立つ。 図 は 「 Dapper, a Large-Scale Distributed Systems Tracing Infrastructure」 よ り 引 用 https://research.google/pubs/pub36356/ 12
可視化 複数のコンポーネントに跨って、 リクエストの順序や各コンポーネント で処理に要した時間が可視化される。 図 は 「 Dapper, a Large-Scale Distributed Systems Tracing Infrastructure」 よ り 引 用 https://research.google/pubs/pub36356/ 13
概念 Span A (Root Span) Trace 複数のSpanを集まり。Spanの親子関係から DAG(有効非巡回グラフ)を作ることができる。 Span トランザクション内のオペレーションを表す。 以下の状態を持つ * オペレーション名 * 開始・終了のタイムスタンプ * attributes * ログ * 親Spanの識別子 * 因果関係のある他のSpanへのリンク * SpanContextの情報(Trace内のSpanを識別する情報) https://github.com/open-telemetry/opentelemetry-specification/blob/master/specification/overview.md Span D Span B Span C Span E Span F 14
しくみ 1. 2. 3. 4. Application Application SDK SDK Agent Agent ApplicationにSDKをインストール SDKからAgentにトレースデータを送信 AgentからCollectorに送信 ストレージに保存 Collector Storage View 15
分散トレーシングの仕様と代表的な実装 * AWS X-Ray https://docs.aws.amazon.com/ja_jp/xray/latest/devguide/aws-xray.html * Google Cloud operations suite (旧Stackdriver) https://cloud.google.com/stackdriver/docs * zepkin https://github.com/openzipkin/zipkin * Jaeger https://github.com/jaegertracing/jaeger * OpenTelemetry (OpenTracingとOpenCensusの時期メジャーバージョン。現在RC) https://github.com/open-telemetry/opentelemetry-specification 16
AWS X-Ray 17
AWS X-Ray 分散トレーシングのマネージドサービス 18
Application Application SDK SDK Agent Agent OSSの場合はすべてのスタックを 運用しないといけないが・・・ Collector Storage View 19
Application Application X-Ray SDK X-Ray SDK X-Ray daemon X-Ray daemon データ保存やサーバの可用性を 気にしなくて良い X-Ray API X-Ray Console AWS Managed 20
X-Ray Console 21
特徴 Serverlessとの相性が良い ELBやLambda、StepFunctionなども 簡単にトレーシングできる マネージドサービス データ保存や可用性を気にしなくてよい AWS Console内でConsoleも提供している 用語や名前が微妙に異なる SpanではなくSegmentsという用語を用いたり、 標準化されたHTTPヘッダではなく、 独自のヘッダ名(X-Amzn-Trace-Id)を使用している アプリケーションへの影響が軽微 X-Ray DaemonにはUDPで投げっぱなし X-Ray Daemonが落ちていてもアプリケーションには 影響しない トレースのサイズに上限がある トレースサイズのクォータは100-500KBと されており、引き上げは不可 22
ティアフォーにおける活用方法 23
Fargate Batch Lambda API Gateway Aurora DynamoDB Athena ELB Secret Manager AppMesh SQS AWS X-Rayの活用状況 Web.Autoでは、様々なAWSのサービスを 使っており、その多くがX-Rayによって トレースされている S3 24
Trace Map 25
Datadogで可視化 X-Ray 26
Datadogで可視化 27 https://docs.datadoghq.com/ja/tracing/guide/serverless_enable_aws_xray/?tab=python
判断材料として エラー発生 レスポンスタイム低下 原因影響特定 パフォーマンス改善の判断 28
課題 29
トレースの最大サイズは100-500KBまで クォータを超えるとトレースデータは欠損する 引き上げは不可 30
gRPC 公式のAWS X-Ray SDKでgRPCに 対応していない 31
あとから導入すると導入漏れがある トレースの途中でX-Rayが導入されていないコンポーネントがあると、 その先の処理が追えなくなる 32
まとめ 33
まとめ * AWS X-Rayは分散トレーシングのマネージドサービス * 簡単に導入でき、特にServerlessと相性が良い * トレースデータがあまりに大きいとトレースデータが欠損することがある * 異常な状態を見極めるためにも普段からトレースを眺めよう 34
© 2021 Tier IV, Inc. 35