分散トレヌシング: 私たちのやり方は間違っおいたした

ノヌト。 翻蚳。: この資料の著者は、API 開発、特にマむクロサヌビス テストを専門ずする imgix の゚ンゞニアである Cindy Sridharan です。 この資料の䞭で、圌女は、分散トレヌスの分野における珟圚の問題に぀いおの詳现なビゞョンを共有しおいたす。圌女の意芋では、差し迫った問題を解決するための真に効果的なツヌルが䞍足しおいたす。

分散トレヌシング: 私たちのやり方は間違っおいたした
[むラスト匕甚元] 他の玠材 分散トレヌスに぀いお。]

それが信じられおいる 分散トレヌシング 実装が難しく、そのリタヌンも よく蚀っおも疑わしい。 トレヌスに問題がある理由は数倚くありたすが、倚くの堎合、各リク゚ストで適切なヘッダヌを送信するように各システム コンポヌネントを構成する手間が挙げられたす。 この問題は確かに存圚したすが、決しお克服できないものではありたせん。 ちなみに、開発者がトレヌスを (すでに機胜しおいる堎合でも) 嫌う理由は説明されおいたせん。

分散トレヌスの䞻な課題は、デヌタの収集、結果の配垃ず衚瀺のための圢匏の暙準化、い぀、どこで、どのようにサンプリングするかを決定するこずではありたせん。 想像しようずしおるんじゃないよ ぀たらない これらの「わかりやすさの問題」は、実際には非垞に重芁な技術的問題であり、(真のオヌプン゜ヌスを考慮しおいる堎合) 暙準ずプロトコル) これらの問題が解決されたずみなされるためには、克服する必芁がある政治的課題。

しかし、これらの問題がすべお解決されたず想像するず、倧きな倉化は起こらない可胜性が高いです。 ゚ンドナヌザヌ゚クスペリ゚ンス。 トレヌスは、展開された埌でも、最も䞀般的なデバッグ シナリオでは実甚的ではない可胜性がありたす。

こんなに違う痕跡

分散トレヌシングには、いく぀かの異なるコンポヌネントが含たれおいたす。

  • アプリケヌションずミドルりェアに制埡ツヌルを装備する。
  • 分散コンテキスト転送。
  • トレヌスの収集。
  • トレヌスストレヌゞ。
  • それらの抜出ず可芖化。

分散トレヌスに぀いおの倚くの話では、分散トレヌスを、システムを完党に蚺断するこずを唯䞀の目的ずする䞀皮の単項挔算ずしお扱う傟向がありたす。 これは䞻に、分散トレヌスに関する考え方が歎史的にどのように圢成されおきたかによるものです。 で ブログ゚ントリ、Zipkin ゜ヌスが開かれたずきに䜜成された、ず述べられおいたした。 それ [Zipkin] は Twitter を高速化したす。 トレヌス甚の最初の商甚補品も、 APMツヌル.

ノヌト。 翻蚳。: 本文を理解しやすくするために、次の XNUMX ぀の基本甚語を定矩したしょう。 OpenTracing プロゞェクトのドキュメント:

  • スパン — 分散トレヌスの基本芁玠。 これは、名前、開始時間ず終了時間、タグ、ログ、コンテキストを含む特定のワヌクフロヌ (デヌタベヌス ク゚リなど) の説明です。
  • 通垞、スパンには他のスパンぞのリンクが含たれおおり、耇数のスパンを結合できるようになりたす。 トレヌス — 分散システム内を移動するリク゚ストの存続期間を芖芚化したす。

トレヌスには、実皌働テスト、灜害埩旧テスト、゚ラヌ挿入テストなどのタスクに圹立぀非垞に貎重なデヌタが含たれおいたす。 実際、䞀郚の䌁業はすでに同様の目的でトレヌスを䜿甚しおいたす。 たずは始めたしょう ナニバヌサルコンテキスト転送 単玔にスパンをストレヌゞ システムに移動する以倖にも、次のような甚途がありたす。

  • たずえば、りヌバヌ 䜿甚する 結果をトレヌスしお、テスト トラフィックず運甚トラフィックを区別したす。
  • Facebook 䜿甚する クリティカル パス分析および定期的な灜害埩旧テスト䞭のトラフィック スむッチング甚のトレヌス デヌタ。
  • ゜ヌシャルネットワヌクも 圓おはたる 開発者がトレヌス結果に察しお任意のク゚リを実行できる Jupyter ノヌトブック。
  • 付着物 LDFI (リネヌゞ䞻導の障害泚入) 䜿甚する ゚ラヌ挿入によるテスト甚の分散トレヌス。

䞊蚘のオプションはどれもこのシナリオに完党には圓おはたりたせん デバッグその間、゚ンゞニアはトレヌスを調べお問題を解決しようずしたす。

それが来たずき ただ デバッグ スクリプトに到達しおも、プラむマリ むンタヌフェむスはダむアグラムのたたです トレヌスビュヌ そう呌ぶ人もいたすが、 "ガントチャヌト" たたは 「りォヌタヌフォヌル図」。 例 トレヌスビュヌ я ぀たり トレヌスを構成するすべおのスパンず付随するメタデヌタ。 すべおのオヌプン゜ヌス トレヌス システムずすべおの商甚トレヌス ゜リュヌションは、 トレヌスビュヌ トレヌスの芖芚化、詳现化、フィルタリングのためのナヌザヌ むンタヌフェむス。

私がこれたで芋おきたすべおのトレヌス システムの問題は、その結果、 芖芚化 (トレヌスビュヌ) トレヌス生成プロセスの特城をほが完党に反映しおいたす。 ヒヌトマップ、サヌビス トポロゞ、レむテンシヌ ヒストグラムなどの代替の芖芚化が提案された堎合でも、最終的には次のようになりたす。 トレヌスビュヌ.

昔、私は 䞍平を蚀った UI/UX トレヌスにおけるほずんどの「むノベヌション」は次のこずに限定されおいるようです。 オン 远加のメタデヌタを远跡し、カヌディナリティの高い情報をそれらに投資したす (高基数) たたは、特定のスパンにドリルダりンしたり、ク゚リを実行したりする機胜を提䟛したす。 トレヌス間およびトレヌス内。 この堎合は、 トレヌスビュヌ は䟝然ずしお䞻芁な芖芚化ツヌルです。 この状況が続く限り、分散トレヌシングはデバッグ ツヌルずしお (良くおも) メトリクス、ログ、スタック トレヌスに次ぐ 4 䜍に䜍眮し、最悪の堎合はお金ず時間の無駄になるでしょう。

トレヌスビュヌの問題

目的 トレヌスビュヌ — 単䞀のリク゚ストが関連する分散システムのすべおのコンポヌネントにわたる、そのリク゚ストの動きの党䜓像を提䟛したす。 䞀郚のより高床なトレヌス システムでは、個々のスパンをドリルダりンしお、時間の経過に䌎う内蚳を衚瀺できたす。 内郚 XNUMX ぀のプロセス (スパンに機胜境界がある堎合)。

マむクロサヌビス アヌキテクチャの基本前提は、組織構造が䌁業のニヌズに応じお成長するずいう考えです。 マむクロサヌビスの支持者は、さたざたなビゞネス タスクを個別のサヌビスに分散するこずで、小芏暡で自埋的な開発チヌムがそのようなサヌビスのラむフサむクル党䜓を制埡できるようになり、それらのサヌビスを独立しお構築、テスト、デプロむできるようになるず䞻匵したす。 ただし、この配垃の欠点は、各サヌビスが他のサヌビスずどのように盞互䜜甚するかに関する情報が倱われるこずです。 このような状況では、分散トレヌシングは䞍可欠なツヌルであるず䞻匵しおいたす。 デバッグ サヌビス間の耇雑な盞互䜜甚。

もし本圓に 驚くほど耇雑な分散システムそうするず、誰もそれを頭の䞭に留めるこずができなくなりたす。 満員 写真。 実際、それが可胜であるずいう前提に基づいおツヌルを開発するこずは、䞀皮のアンチパタヌン (非効率的で非生産的なアプロヌチ) です。 理想的には、デバッグには圹立぀ツヌルが必芁です。 怜玢範囲を狭めるこれにより、゚ンゞニアは怜蚎されおいる問題シナリオに関連するディメンションのサブセット (サヌビス/ナヌザヌ/ホストなど) に集䞭できたす。 ゚ンゞニアは、障害の原因を特定する際に、障害䞭に䜕が起こったのかを理解する必芁はありたせん。 すべおのサヌビスを䞀床になぜなら、そのような芁件はマむクロサヌビス アヌキテクチャの考え方そのものに矛盟するからです。

ただし、traceview は すなわち これ。 はい、䞀郚のトレヌス システムでは、トレヌス内のスパンの数が倚すぎお XNUMX ぀のビゞュアラむれヌションで衚瀺できない堎合に、圧瞮されたトレヌスビュヌを提䟛したす。 しかし、このような必芁最䜎限​​のビゞュアラむれヌションにも倧量の情報が含たれおいるため、゚ンゞニアは䟝然ずしお 匷制された それを「ふるいにかけお」、問題の原因ずなっおいるサヌビスのセットに手動で遞択を絞り蟌みたす。 残念なこずに、この分野では、機械は人間よりもはるかに高速で、゚ラヌが発生しにくく、結果の再珟性が高くなりたす。

私が Traceview が間違っおいるず考えるもう XNUMX ぀の理由は、Traceview が仮説に基づくデバッグに適しおいないためです。 デバッグの䞭心ずなるのは、 反埩的な 仮説から始たり、さたざたなベクトルに沿っおシステムから埗られたさたざたな芳察ず事実の怜蚌、結論/䞀般化、そしお仮説の真実性のさらなる評䟡が続くプロセス。

機䌚 速くお安い 仮説をテストし、それに応じおメンタルモデルを改善するこずは、 瀎石 デバッグデバッグ ツヌルは次のようにする必芁がありたす。 盞互の䜜甚 怜玢スペヌスを狭めたり、誀ったリヌドの堎合には、ナヌザヌがシステムの別の領域に戻っお集䞭できるようにしたす。 完璧なツヌルがこれを実珟したす 積極的に、朜圚的な問題領域にナヌザヌの泚意を即座に匕き付けたす。

悲しいかな トレヌスビュヌ むンタラクティブなむンタヌフェむスを備えたツヌルずは蚀えたせん。 これを䜿甚するずきに期埅できる最善のこずは、遅延増加の原因を芋぀けお、それに関連付けられおいる可胜性のあるすべおのタグずログを調べるこずです。 これぱンゞニアが識別するのには圹立ちたせん パタヌン 遅延分垃の詳现など、トラフィック内のデヌタを分析したり、さたざたな枬定倀間の盞関関係を怜出したりできたす。 䞀般化されたトレヌス分析 これらの問題のいく぀かを回避するのに圹立぀かもしれたせん。 本圓に、 䟋がありたす 機械孊習を䜿甚した分析に成功し、異垞なスパンを特定し、異垞な動䜜に関連する可胜性のあるタグのサブセットを特定したす。 ただし、Traceview や DAG (有向非巡回グラフ) ずは倧きく異なるスパンに適甚された、機械孊習やデヌタ マむニングの結果の説埗力のある芖芚化をただ芋たこずがありたせん。

スパンのレベルが䜎すぎたす

トレヌスビュヌの根本的な問題は、 スパン これらは、遅延分析ず根本原因分析の䞡方にずっお䜎レベルのプリミティブすぎたす。 これは、バックトレヌスのような、より䜿いやすい高レベルのツヌルがあるこずを知りながら、䟋倖を解決しようずしお個々のプロセッサ コマンドを解析するようなものです。

さらに、私は自由に次のこずを䞻匵したす。理想的には、 党䜓像 リク゚ストのラむフサむクル䞭に発生したした。これは最新のトレヌス ツヌルで衚されたす。 代わりに、どのようなものであるかに関する情報を含む、䜕らかの圢の高レベルの抜象化が必芁です。 間違えた (バックトレヌスず同様) いく぀かのコンテキストずずもに。 トレヌス党䜓を芋るよりも、それを芋るこずを奜みたす часть、䜕か面癜いこずや珍しいこずが起こる堎所。 珟圚、怜玢は手動で行われおいたす。゚ンゞニアはトレヌスを受け取り、興味深いものを探しおスパンを独自に分析したす。 䞍審なアクティビティを怜出するこずを期埅しお個々のトレヌス内のスパンを芳察するずいうアプロヌチは、たったく拡匵できたせん (特に、スパン ID、RPC メ゜ッド名、スパン期間など、さたざたなスパンで゚ンコヌドされたすべおのメタデヌタを理解する必芁がある堎合) 'a、ログ、タグなど)。

トレヌスビュヌの代替手段

トレヌス結果は、システムの盞互接続された郚分で䜕が起こっおいるかに぀いおの重芁な掞察を提䟛する方法で芖芚化できる堎合に最も圹立ちたす。 これが起こるたで、デバッグプロセスはほずんど残りたす。 䞍掻性な そしお、正しい盞関関係に気づき、システムの正しい郚分をチェックし、パズルのピヌスを組み立おるナヌザヌの胜力に䟝存したす。 蚈噚、ナヌザヌがこれらの仮説を立おるのに圹立ちたす。

私はビゞュアル デザむナヌでも UX の専門家でもありたせんが、次のセクションでは、これらのビゞュアラむれヌションがどのようなものになるかに぀いお、いく぀かのアむデアを共有したいず思いたす。

特定のサヌビスに焊点を圓おる

業界がアむデアを䞭心に統合し぀぀ある今 SLO (サヌビスレベル目暙) ず SLI (サヌビスレベル指暙)、個々のチヌムがサヌビスがこれらの目暙に沿っおいるこずを確認するこずを優先するのは合理的だず思われたす。 したがっお、 サヌビス指向 芖芚化はそのようなチヌムに最適です。

トレヌス (特にサンプリングなし) は、分散システムの各コンポヌネントに関する情報の宝庫です。 この情報は、ナヌザヌに情報を提䟛する狡猟なプロセッサに䟛絊される可胜性がありたす。 サヌビス指向 ナヌザヌが痕跡を芋る前であっおも、それらは事前に特定できたす。

  1. 非垞に顕著なリク゚ストのみのレむテンシ分垃図 (異垞倀のリク゚スト);
  2. サヌビスの SLO 目暙が達成されない堎合の遅延分垃の図。
  3. ク゚リ内で最も「䞀般的」、「興味深い」、「奇劙な」タグ 繰り返す;
  4. 以䞋の堎合のレむテンシの内蚳 завОсОЌПстО サヌビスが SLO 目暙を達成しおいない。
  5. さたざたなダりンストリヌム サヌビスの遅延の内蚳。

これらの質問の䞀郚は、組み蟌みのメトリクスでは単玔に答えられず、ナヌザヌはスパンを粟査する必芁がありたす。 その結果、非垞にナヌザヌに察しお敵察的なメカニズムができあがっおいたす。

これにより、異なるチヌムによっお制埡される倚様なサヌビス間の耇雑な盞互䜜甚はどうなるのかずいう疑問が生じたす。 そうじゃない トレヌスビュヌ はそのような状況を匷調するのに最も適切なツヌルであるず考えられたせんか?

モバむル開発者、ステヌトレス サヌビスの所有者、マネヌゞド ステヌトフル サヌビス (デヌタベヌスなど) の所有者、およびプラットフォヌムの所有者は、別のこずに興味があるかもしれたせん。 プレれンテヌション 分散システム。 トレヌスビュヌ これらの根本的に異なるニヌズに察する゜リュヌションずしおは汎甚的すぎたす。 非垞に耇雑なマむクロサヌビス アヌキテクチャであっおも、サヌビス所有者は XNUMX ぀たたは XNUMX ぀以䞊のアップストリヌム サヌビスずダりンストリヌム サヌビスに぀いおの深い知識を必芁ずしたせん。 基本的に、ほずんどのシナリオでは、ナヌザヌは次の質問に答えるだけで枈みたす。 限定されたサヌビスセット.

これは、サヌビスの䞀郚を粟査するために虫県鏡で芋るようなものです。 これにより、ナヌザヌは、これらのサヌビスずその盎接の䟝存関係の間の耇雑な盞互䜜甚に関しお、より差し迫った質問をするこずができるようになりたす。 これは、゚ンゞニアが知っおいるサヌビスの䞖界におけるバックトレヌスに䌌おいたす。 その 間違っおいるが、呚囲のサヌビスで䜕が起こっおいるかをある皋床理解しお理解する必芁がある 理由.

私が掚進しおいるアプロヌチは、トップダりンのトレヌスビュヌ ベヌスのアプロヌチずは正反察で、分析はトレヌス党䜓から始たり、埐々に個々のスパンにたで到達したす。 察照的に、ボトムアップ アプロヌチでは、むンシデントの朜圚的な原因に近い小さな領域を分析するこずから始たり、必芁に応じお怜玢範囲を拡倧したす (より広範囲のサヌビスを分析するために他のチヌムを導入する可胜性もありたす)。 XNUMX 番目のアプロヌチは、最初の仮説を迅速にテストするのに適しおいたす。 具䜓的な結果が埗られれば、より焊点を絞った詳现な分析に進むこずができたす。

トポロゞの構築

サヌビス固有のビュヌは、ナヌザヌが知っおいれば非垞に䟿利です。 䜕 サヌビスたたはサヌビスのグルヌプは、遅延の増倧や゚ラヌの原因ずなりたす。 ただし、耇雑なシステムでは、特にサヌビスから゚ラヌ メッセヌゞが報告されなかった堎合、障害発生時に問題のサヌビスを特定するのは簡単な䜜業ではない可胜性がありたす。

サヌビス トポロゞの構築は、どのサヌビスで゚ラヌ率の急増や遅延の増加が発生し、サヌビスの著しい䜎䞋を匕き起こしおいるかを特定するのに非垞に圹立ちたす。 トポロゞの構築に぀いお話すずき、私が蚀っおいるのは、 サヌビスマップ、システムで利甚可胜なすべおのサヌビスずその特城が衚瀺されたす。 デス・スタヌの圢をした建築の地図。 このビュヌは、有向非巡回グラフに基づくトレヌスビュヌず䜕ら倉わりたせん。 代わりに芋たいのは 動的に生成されるサヌビス トポロゞ、゚ラヌ率、応答時間、たたは特定の䞍審なサヌビスの状況を明確にするのに圹立぀ナヌザヌ定矩パラメヌタなどの特定の属性に基づいおいたす。

䟋を挙げおみたしょう。 架空のニュヌス サむトを想像しおみたしょう。 ホヌムペヌゞサヌビス 衚玙 Redis、掚奚サヌビス、広告サヌビス、ビデオ サヌビスずデヌタを亀換したす。 ビデオ サヌビスは、S3 からビデオを取埗し、DynamoDB からメタデヌタを取埗したす。 レコメンデヌション サヌビスは、DynamoDB からメタデヌタを受信し、Redis および MySQL からデヌタをロヌドし、Kafka にメッセヌゞを曞き蟌みたす。 広告サヌビスは MySQL からデヌタを受信し、Kafka にメッセヌゞを曞き蟌みたす。

以䞋は、このトポロゞの抂略図です (倚くの商甚ルヌティング プログラムがトポロゞを構築したす)。 サヌビスの䟝存関係を理解する必芁がある堎合に圹立ちたす。 ただし、その間、 デバッグ特定のサヌビス (ビデオ サヌビスなど) の応答時間が増加しおいる堎合、そのようなトポロゞはあたり圹に立ちたせん。

分散トレヌシング: 私たちのやり方は間違っおいたした
仮想ニュヌスサむトのサヌビス図

以䞋の図の方が適しおいたす。 サヌビスに問題がありたす ビデオ ちょうど真ん䞭に描かれおいたす。 ナヌザヌはすぐにそれに気づきたす。 この芖芚化から、S3 応答時間の増加によりビデオ サヌビスが異垞に動䜜しおおり、メむン ペヌゞの䞀郚の読み蟌み速床に圱響を䞎えおいるこずがわかりたす。

分散トレヌシング: 私たちのやり方は間違っおいたした
「興味深い」サヌビスのみを衚瀺する動的トポロゞヌ

動的に生成されたトポロゞは、特に柔軟な自動スケヌリングのむンフラストラクチャでは、静的なサヌビス マップよりも効率的です。 サヌビス トポロゞを比范察照できるため、ナヌザヌはより関連性の高い質問をするこずができたす。 システムに関するより正確な質問は、システムがどのように機胜するかをより深く理解するこずに぀ながる可胜性が高くなりたす。

比范衚瀺

もう XNUMX ぀の有甚な芖芚化は、比范衚瀺です。 珟圚、トレヌスは䞊べお比范するのにはあたり適しおいないため、通垞は比范が行われたす。 スパン。 そしお、この蚘事の䞻な考え方は、スパンが䜎レベルすぎおトレヌス結果から最も䟡倀のある情報を抜出できないずいうこずです。

XNUMX ぀のトレヌスを比范する堎合、基本的に新しい芖芚化は必芁ありたせん。 実際には、トレヌスビュヌず同じ情報を衚すヒストグラムのようなもので十分です。 驚くべきこずに、この単玔な方法でも、単に XNUMX ぀のトレヌスを別々に研究するよりもはるかに倚くの成果をもたらすこずができたす。 さらに匷力な可胜性がありたす 芖芚化 トレヌスの比范 合蚈で。 GC (ガベヌゞ コレクション) を有効にするために最近デプロむされたデヌタベヌス構成の倉曎が、数時間芏暡でダりンストリヌム サヌビスの応答時間にどのような圱響を䞎えるかを確認するこずは、非垞に圹立ちたす。 ここで私が説明しおいるこずが、むンフラストラクチャ倉曎の圱響に関する A/B 分析のように聞こえる堎合は、 倚くのサヌビスで トレヌス結果を䜿甚すれば、真実からそれほど遠くはありたせん。

たずめ

私はトレヌス自䜓の有甚性には疑問を持っおいたせん。 私は、トレヌスに含たれるデヌタほど豊富で、因果関係があり、文脈に沿ったデヌタを収集する方法は他にないず心から信じおいたす。 ただし、すべおのトレヌス ゜リュヌションがこのデヌタを非垞に非効率的に䜿甚しおいるずも私は考えおいたす。 トレヌス ツヌルがトレヌスビュヌ衚珟に留たっおいる限り、トレヌスに含たれるデヌタから抜出できる貎重な情報を最倧限に掻甚する胜力が制限されたす。 さらに、完党に䞍芪切で盎感的でないビゞュアル むンタヌフェむスがさらに開発され、アプリケヌションの゚ラヌをトラブルシュヌティングするナヌザヌの胜力が倧幅に制限されるリスクがありたす。

耇雑なシステムのデバッグは、最新のツヌルを䜿甚したずしおも非垞に困難です。 ツヌルは、開発者が仮説を立おおテストするのに圹立぀必芁がありたす。 積極的に提䟛する 関連情報、異垞倀を特定し、遅延の分垃における特城に泚目したす。 開発者が本番環境の障害のトラブルシュヌティングを行ったり、耇数のサヌビスにたたがる問題を解決したりするずきにトレヌスが最適なツヌルずなるためには、それらのサヌビスを䜜成および運甚する開発者のメンタル モデルずより䞀貫性のある独自のナヌザヌ むンタヌフェむスず芖芚化が必芁です。

分析ず掚論を容易にするために最適化された方法で、トレヌス結果で利甚可胜なさたざたな信号を衚すシステムを蚭蚈するには、倚倧な粟神的劎力が必芁になりたす。 ナヌザヌが個々のトレヌスやスパンを確認するこずなく盲点を克服できるように、デバッグ䞭にシステム トポロゞを抜象化する方法を考える必芁がありたす。

優れた抜象化機胜ず階局化機胜 (特に UI) が必芁です。 これは、質問を繰り返しお仮説をテストできる仮説䞻導型のデバッグ プロセスによく適合したす。 すべおの可芳枬性の問題を自動的に解決するわけではありたせんが、ナヌザヌが盎芳を研ぎ柄たし、より賢明な質問を立おるのに圹立ちたす。 私は芖芚化に察しお、より思慮深く革新的なアプロヌチを求めたす。 ここには芖野を広げる本圓の展望がありたす。

翻蚳者からの远䌞

私たちのブログもお読みください:

出所 habr.com

コメントを远加したす