<p>こんにちわ、サイト管理者のわかっち (<a href="https://twitter.com/wakatchi_tech">@wakatchi_tech</a>) です。</p>
<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-right vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://wakatchi.dev/wp-content/uploads/2022/07/kaisya_man_bad.png" alt=""/><figcaption class="vk_balloon_icon_name">質問者</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content has-background-color has-pale-cyan-blue-background-color "><span class="vk_balloon_content_before has-text-color has-pale-cyan-blue-color"></span><span class="vk_balloon_content_after "></span>
<p>マイクロサービスアーキテクチャだとトラブルが起きたときに大変だよ</p>
</div></div></div>
<p>こんな質問をいただきました。</p>
<p>マイクロサービスアーキテクチャは、先端技術をビジネスの柱とする企業だけにとどまらず、あらゆる業種の基幹システムでの採用が増えてきています。一方、マイクロサービスアーキテクチャの運用は、マイクロサービス分割の失敗やモノリスから移行する際の考慮不足、分散トランザクションの活用など、多くの課題が見えてきました。</p>
<p>分散トランザクションの活用についてはこちらの記事をご参照ください。</p>
<div class="wp-block-vk-blocks-blog-card has-border-color is-layout-flow wp-block-blog-card-is-layout-flow" style="border-color:#0000001f;border-width:1px;border-radius:5px;padding-top:var(--wp--preset--spacing--20);padding-right:var(--wp--preset--spacing--20);padding-bottom:var(--wp--preset--spacing--20);padding-left:var(--wp--preset--spacing--20)">
<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-a26d1989 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-vertically-aligned-top is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:33.3%"><figure class="wp-block-vk-blocks-blog-card-featured-image"><a href="https://wakatchi.dev/microservices-tx-pattern-saga-tcc/" target="_self" ><img src='https://wakatchi.dev/wp-content/uploads/2022/07/blockchain-6580138_1920-1024x683.jpg' class="has-border-color" style="border-color:#0000001f;border-radius:5px;border-width:1px;object-fit:cover;" /></a></figure></div>
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:66.6%"><h5 class="wp-block-vk-blocks-blog-card-title"><a href="https://wakatchi.dev/microservices-tx-pattern-saga-tcc/" target="_self" >TCCパターンとSagaパターンでマイクロサービスのトランザクションをまとめてみた</a></h5>
<div class="wp-block-vk-blocks-blog-card-excerpt"><p class="wp-block-vk-blocks-blog-card-excerpt__excerpt">マイクロサービスのトランザクション設計である、TCCやSagaパターンをまとめました。オーケストレーションとコレオグラフィで分類し、各手法の特性や分類および実装時の留意点を詳説しています。分散システムの安定運用を支えるアプローチを解説する必読の設計ガイドです</p></div></div>
</div>
</div>
<div class="wp-block-vk-blocks-spacer vk_spacer vk_spacer-type-margin-top"><div class="vk_block-margin-md--margin-top"></div></div>
<p>なかでも課題としてよく挙げられるのが、<strong><span data-color="#f78da7" style="background: linear-gradient(transparent 60%,rgba(247, 141, 167, 0.7) 0);" class="vk_highlighter">分散アーキテクチャはトラブルシューティングが従来よりも困難になりがち</span></strong>、という点です。サーバレスやコンテナによるマイクロサービスアーキテクチャでは、数多くのマイクロサービスが連動してユーザにサービスを提供します。そのため障害や性能問題が発生した際は、各マイクロサービスの一連の動きを追跡できなければなりません。そこで、マイクロサービスの動きを追跡し、観測可能にする可観測性(Observability)という考え方が重要になってきます。</p>
<p>可観測性は分散トレーシングによって実現します。分散トレーシングによって、サービス同士がどのように呼び出し合っているか、それぞれがどこにボトルネックがあるのかを、実際に実行されているリクエストを元に可視化できます。</p>
<p>今回は、マイクロサービスアーキテクチャが可観測性を実現する方法として、<a href="https://www.cncf.io/">CNCF</a>で標準化が進められているOpenTelemetryをご紹介します。</p>
<div class="wp-block-vk-blocks-table-of-contents-new vk_tableOfContents vk_tableOfContents-style-default tabs"><div class="tab"><div class="vk_tableOfContents_title">目次</div><input type="checkbox" id="chck1"/><label class="tab-label vk_tableOfContents_openCloseBtn button_status button_status-open" for="chck1" id="vk-tab-label">CLOSE</label><ul class="vk_tableOfContents_list tab_content-open">
<li class="vk_tableOfContents_list_item vk_tableOfContents_list_item-h-2">
<a href="#vk-htags-bdd522ba-4cf4-40b2-8521-2bec80b39c8f" class="vk_tableOfContents_list_item_link">
<span class="vk_tableOfContents_list_item_link_preNumber">1. </span>
マイクロサービスアーキテクチャと可観測性
</a>
</li>
<li class="vk_tableOfContents_list_item vk_tableOfContents_list_item-h-2">
<a href="#vk-htags-7970bfd2-3850-4946-b493-4ca9db570018" class="vk_tableOfContents_list_item_link">
<span class="vk_tableOfContents_list_item_link_preNumber">2. </span>
可観測性を獲得するOpenTelemetry
</a>
</li>
<li class="vk_tableOfContents_list_item vk_tableOfContents_list_item-h-2">
<a href="#vk-htags-56db36e7-b0a4-40f3-a035-86cbbd823af9" class="vk_tableOfContents_list_item_link">
<span class="vk_tableOfContents_list_item_link_preNumber">3. </span>
OpenTelemetryによる依存性の低減
</a>
</li>
<li class="vk_tableOfContents_list_item vk_tableOfContents_list_item-h-2">
<a href="#vk-htags-c0d1f2d0-b334-4de5-8306-a7e507053bf0" class="vk_tableOfContents_list_item_link">
<span class="vk_tableOfContents_list_item_link_preNumber">4. </span>
まとめ
</a>
</li>
</ul></div></div>
<h2 class="wp-block-heading" id="vk-htags-bdd522ba-4cf4-40b2-8521-2bec80b39c8f">マイクロサービスアーキテクチャと可観測性</h2>
<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img src="https://wakatchi.dev/wp-content/uploads/2022/08/7-1024x683.jpg" alt="" class="wp-image-766" style="aspect-ratio:1.499267935578331;width:494px;height:auto"/></figure></div>
<p></p>
<p><a href="https://github.com/cncf/toc/blob/master/DEFINITION.md">CNCFの宣言</a>によると、<strong>クラウドネイティブなアーキテクチャとは可観測性を実現したシステムである</strong>、と定義されています。</p>
<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>クラウドネイティブ技術は、パブリッククラウド、プライベートクラウド、ハイブリッドクラウドなどの近代的でダイナミックな環境において、スケーラブルなアプリケーションを構築および実行するための能力を組織にもたらします。 このアプローチの代表例に、コンテナ、サービスメッシュ、マイクロサービス、イミュータブルインフラストラクチャ、および宣言型APIがあります。<br>これらの手法により、回復性、管理力、および可観測性のある疎結合システムが実現します。 これらを堅牢な自動化と組み合わせることで、エンジニアはインパクトのある変更を最小限の労力で頻繁かつ予測どおりに行うことができます。</p>
<cite>https://github.com/cncf/toc/blob/master/DEFINITION.md</cite></blockquote>
<p><strong><span data-color="#fcb900" style="background: linear-gradient(transparent 60%,rgba(252, 185, 0, 0.7) 0);" class="vk_highlighter">可観測性は、ログ・メトリクス・トレースの3つの柱で構成されます。</span></strong>この3つの柱を収集・測定する手法をテレメトリと呼び、そのデータを`テレメトリデータ`と呼びます。テレメトリデータを収集・測定する仕組みは、CNCFで標準化が進められています。</p>
<p>マイクロサービスアーキテクチャでは、システム開発の当初から可観測性の仕組みを導入することをお勧めします。アジャイル開発のプラクティスとして初期(Scrumなら最初のスプリント)からCI/CDを導入すべきと言われますが、可観測性も併せて導入し、開発初期からCI/CD/CM(継続的モニタリング)を実現するとよいでしょう。</p>
<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-think vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://wakatchi.dev/wp-content/uploads/2022/07/wakatchi_icon_2.jpg" alt=""/><figcaption class="vk_balloon_icon_name">わかっち</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content has-background-color has-luminous-vivid-amber-background-color "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>CI/CDはよく知られてるけど、CM(継続的モニタリング)ってあまり知られてないよね</p>
</div></div></div>
<h2 class="wp-block-heading" id="vk-htags-7970bfd2-3850-4946-b493-4ca9db570018">可観測性を獲得するOpenTelemetry</h2>
<p>OpenTelemetryは、<a href="https://opentracing.io/">OpenTracing</a>と<a href="https://opencensus.io/">OpenCensus</a>という二つのプロジェクトが統合され発足したCNCFのプロジェクトで、<strong><span data-color="#fcb900" style="background: linear-gradient(transparent 60%,rgba(252, 185, 0, 0.7) 0);" class="vk_highlighter">クラウドネイティブなアプリケーションの可観測性フレームワーク(ツール、API、SDKの集合)</span></strong>を提供します。アプリケーションのパフォーマンスと動作を可視化するために、分析用のテレメトリデータ(ログ、メトリック、トレース)を計測、生成、収集、およびエクスポートします。また、OpenTelemetryはクロスプラットフォームであり、様々な言語をサポートします。</p>
<div class="wp-block-image">
<figure class="aligncenter size-full"><a href="https://wakatchi.dev/wp-content/uploads/2022/08/9f256cfd6a2ec7724c7e8b31fd7043a4.png"><img src="https://wakatchi.dev/wp-content/uploads/2022/08/9f256cfd6a2ec7724c7e8b31fd7043a4.png" alt="" class="wp-image-402"/></a></figure></div>
<p>【出展】</p>
<div style="border-color:#0000001f;border-radius:5px;border-width:1px; padding-top:1.5rem;padding-right:1.5rem;padding-bottom:1.5rem;padding-left:1.5rem;" class="wp-block-vk-blocks-blog-card has-border-color is-layout-flow wp-block-blog-card-is-layout-flow">https://blog.newrelic.co.jp/product-news/what-is-opentelemetry/</div>
<p>少し古いですが、CNCFが2020年9月に公開した可観測性の<a href="https://www.cncf.io/blog/2020/09/11/cncf-end-user-technology-radar-observability-september-2020/">テクノロジーレーダー</a>では、OpenTelemetryはASSESSに位置付けられており、普及はこれから、といったところでしょうか。</p>
<div class="wp-block-image">
<figure class="aligncenter size-full"><a href="https://wakatchi.dev/wp-content/uploads/2022/08/dd55526ea65f7d1d3da1e77faaa6064c.png"><img src="https://wakatchi.dev/wp-content/uploads/2022/08/dd55526ea65f7d1d3da1e77faaa6064c.png" alt="" class="wp-image-403"/></a></figure></div>
<p>【出展】</p>
<div style="border-color:#0000001f;border-radius:5px;border-width:1px; padding-top:1.5rem;padding-right:1.5rem;padding-bottom:1.5rem;padding-left:1.5rem;" class="wp-block-vk-blocks-blog-card has-border-color is-layout-flow wp-block-blog-card-is-layout-flow">https://www.cncf.io/blog/2020/09/11/cncf-end-user-technology-radar-observability-september-2020/</div>
<p></p>
<p><a href="https://www.cncf.io/blog/2020/09/11/cncf-end-user-technology-radar-observability-september-2020/">可観測性のテクノロジーレーダー</a>で述べられているとおり、可観測性のツール導入後は、別のツールへの変更や統合は難しい傾向にあります。多くの企業にとって可観測性はコアビジネスではないため、投資の費用対効果の説明が難しいことが原因です。そのためにも、テレメトリデータを収集する仕組みは極力標準化されたものを採用すべきです。</p>
<p>可観測性に対応した製品が情報を可視化するためには、分析用のテレメトリデータ(ログ、メトリック、トレース)が必要です。従来、テレメトリデータはオープンソースプロジェクト、または商用ベンダによって提供されてました。しかしながら、標準化が行われていないため、結果としてデータの移植性が失われ、可観測性の製品を利用するユーザの負担が大きくなります。</p>
<p>OpenTelemetryプロジェクトは、商用ベンダに依存しない単一のソリューションを提供することで、これらの問題を解決します。OpenTelemetryプロジェクトは、クラウドベンダ、可観測性の商用ベンダ、エンドユーザから幅広い業界サポートと採用があります。</p>
<h2 class="wp-block-heading" id="vk-htags-56db36e7-b0a4-40f3-a035-86cbbd823af9">OpenTelemetryによる依存性の低減</h2>
<p>クラウドベンダや商用製品ベンダの多くがOpenTelemetryの対応を発表しており、今後はOpenTelemetryがテレメトリデータ収集の標準ツールに位置付けられることが期待されます。例えば、AWSであればX-Ray、商用製品ではNew RelicなどがOpenTelemetryに対応しています。今後、より多くのベンダがOpenTelemetryに対応することを期待しています。</p>
<p>マイクロサービスアーキテクチャの可観測性を獲得する際は、クラウドベンダや商用ベンダへの依存性を下げるために、OpenTelemetryの採用を検討してみましょう。</p>
<h2 class="wp-block-heading" id="vk-htags-c0d1f2d0-b334-4de5-8306-a7e507053bf0">まとめ</h2>
<p>簡単ではありますが、クラウドネイティブやマイクロサービスという華々しい言葉に比べてやや地味な可観測性に触れてみました。いかがだったでしょうか?<br>まだまだ情報が少なく、普及するにはまだ時間を要するかもしれません。</p>
<p>マイクロサービスアーキテクチャの運用には、後回しにしがちなログ監視やメトリクス監視、分散トレーシングをシステム開発当初から検証していくことをお勧めします。可観測性が重要と認識しつつも、アプリケーション開発に直接影響を及ぼさないため、後回しにしがちです。可観測性が獲得できないマイクロサービスは運用できない、という認識を持ち、そのツールとしてOpenTelemetryを候補に入れてみてはいかがでしょうか。</p>
<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://wakatchi.dev/wp-content/uploads/2022/07/wakatchi_icon_2.jpg" alt=""/><figcaption class="vk_balloon_icon_name">わかっち</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content has-background-color has-luminous-vivid-amber-background-color "><span class="vk_balloon_content_before has-text-color has-luminous-vivid-amber-color"></span><span class="vk_balloon_content_after "></span>
<p>マイクロサービスアーキテクチャの導入に可観測性は必須だよ!</p>
</div></div></div>
<p>本記事が、マイクロサービス導入に向けて少しでもお役に立てれば幸いです。</p>
<p>本ブログでは、可観測性の具体的な構築例やユースケースなどを積極的に発信していきます。</p>
<p>最後までお読みいただき、ありがとうございました!</p>
こんにちわ、サイト管理者のわかっち (@wakatchi_tech) です。
質問者
マイクロサービスアーキテクチャだとトラブルが起きたときに大変だよ
こんな質問をいただきました。
マイクロサービスアーキテクチャは、先端技術をビジネスの柱とする企業だけにとどまらず、あらゆる業種の基幹システムでの採用が増えてきています。一方、マイクロサービスアーキテクチャの運用は、マイクロサービス分割の失敗やモノリスから移行する際の考慮不足、分散トランザクションの活用など、多くの課題が見えてきました。
分散トランザクションの活用についてはこちらの記事をご参照ください。
マイクロサービスのトランザクション設計である、TCCやSagaパターンをまとめました。オーケストレーションとコレオグラフィで分類し、各手法の特性や分類および実装時の留意点を詳説しています。分散システムの安定運用を支えるアプローチを解説する必読の設計ガイドです
なかでも課題としてよく挙げられるのが、分散アーキテクチャはトラブルシューティングが従来よりも困難になりがち、という点です。サーバレスやコンテナによるマイクロサービスアーキテクチャでは、数多くのマイクロサービスが連動してユーザにサービスを提供します。そのため障害や性能問題が発生した際は、各マイクロサービスの一連の動きを追跡できなければなりません。そこで、マイクロサービスの動きを追跡し、観測可能にする可観測性(Observability)という考え方が重要になってきます。
可観測性は分散トレーシングによって実現します。分散トレーシングによって、サービス同士がどのように呼び出し合っているか、それぞれがどこにボトルネックがあるのかを、実際に実行されているリクエストを元に可視化できます。
今回は、マイクロサービスアーキテクチャが可観測性を実現する方法として、CNCFで標準化が進められているOpenTelemetryをご紹介します。
CNCFの宣言によると、クラウドネイティブなアーキテクチャとは可観測性を実現したシステムである、と定義されています。
クラウドネイティブ技術は、パブリッククラウド、プライベートクラウド、ハイブリッドクラウドなどの近代的でダイナミックな環境において、スケーラブルなアプリケーションを構築および実行するための能力を組織にもたらします。 このアプローチの代表例に、コンテナ、サービスメッシュ、マイクロサービス、イミュータブルインフラストラクチャ、および宣言型APIがあります。
これらの手法により、回復性、管理力、および可観測性のある疎結合システムが実現します。 これらを堅牢な自動化と組み合わせることで、エンジニアはインパクトのある変更を最小限の労力で頻繁かつ予測どおりに行うことができます。
https://github.com/cncf/toc/blob/master/DEFINITION.md
可観測性は、ログ・メトリクス・トレースの3つの柱で構成されます。この3つの柱を収集・測定する手法をテレメトリと呼び、そのデータを`テレメトリデータ`と呼びます。テレメトリデータを収集・測定する仕組みは、CNCFで標準化が進められています。
マイクロサービスアーキテクチャでは、システム開発の当初から可観測性の仕組みを導入することをお勧めします。アジャイル開発のプラクティスとして初期(Scrumなら最初のスプリント)からCI/CDを導入すべきと言われますが、可観測性も併せて導入し、開発初期からCI/CD/CM(継続的モニタリング)を実現するとよいでしょう。
わかっち
CI/CDはよく知られてるけど、CM(継続的モニタリング)ってあまり知られてないよね
OpenTelemetryは、OpenTracingとOpenCensusという二つのプロジェクトが統合され発足したCNCFのプロジェクトで、クラウドネイティブなアプリケーションの可観測性フレームワーク(ツール、API、SDKの集合)を提供します。アプリケーションのパフォーマンスと動作を可視化するために、分析用のテレメトリデータ(ログ、メトリック、トレース)を計測、生成、収集、およびエクスポートします。また、OpenTelemetryはクロスプラットフォームであり、様々な言語をサポートします。
【出展】
https://blog.newrelic.co.jp/product-news/what-is-opentelemetry/
少し古いですが、CNCFが2020年9月に公開した可観測性のテクノロジーレーダーでは、OpenTelemetryはASSESSに位置付けられており、普及はこれから、といったところでしょうか。
【出展】
https://www.cncf.io/blog/2020/09/11/cncf-end-user-technology-radar-observability-september-2020/
可観測性のテクノロジーレーダーで述べられているとおり、可観測性のツール導入後は、別のツールへの変更や統合は難しい傾向にあります。多くの企業にとって可観測性はコアビジネスではないため、投資の費用対効果の説明が難しいことが原因です。そのためにも、テレメトリデータを収集する仕組みは極力標準化されたものを採用すべきです。
可観測性に対応した製品が情報を可視化するためには、分析用のテレメトリデータ(ログ、メトリック、トレース)が必要です。従来、テレメトリデータはオープンソースプロジェクト、または商用ベンダによって提供されてました。しかしながら、標準化が行われていないため、結果としてデータの移植性が失われ、可観測性の製品を利用するユーザの負担が大きくなります。
OpenTelemetryプロジェクトは、商用ベンダに依存しない単一のソリューションを提供することで、これらの問題を解決します。OpenTelemetryプロジェクトは、クラウドベンダ、可観測性の商用ベンダ、エンドユーザから幅広い業界サポートと採用があります。
クラウドベンダや商用製品ベンダの多くがOpenTelemetryの対応を発表しており、今後はOpenTelemetryがテレメトリデータ収集の標準ツールに位置付けられることが期待されます。例えば、AWSであればX-Ray、商用製品ではNew RelicなどがOpenTelemetryに対応しています。今後、より多くのベンダがOpenTelemetryに対応することを期待しています。
マイクロサービスアーキテクチャの可観測性を獲得する際は、クラウドベンダや商用ベンダへの依存性を下げるために、OpenTelemetryの採用を検討してみましょう。
簡単ではありますが、クラウドネイティブやマイクロサービスという華々しい言葉に比べてやや地味な可観測性に触れてみました。いかがだったでしょうか?
まだまだ情報が少なく、普及するにはまだ時間を要するかもしれません。
マイクロサービスアーキテクチャの運用には、後回しにしがちなログ監視やメトリクス監視、分散トレーシングをシステム開発当初から検証していくことをお勧めします。可観測性が重要と認識しつつも、アプリケーション開発に直接影響を及ぼさないため、後回しにしがちです。可観測性が獲得できないマイクロサービスは運用できない、という認識を持ち、そのツールとしてOpenTelemetryを候補に入れてみてはいかがでしょうか。
わかっち
マイクロサービスアーキテクチャの導入に可観測性は必須だよ!
本記事が、マイクロサービス導入に向けて少しでもお役に立てれば幸いです。
本ブログでは、可観測性の具体的な構築例やユースケースなどを積極的に発信していきます。
最後までお読みいただき、ありがとうございました!