BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース コンテナ化されたマイクロサービスをデバッグする - Idit Levine氏のQCon SFでの講演より

コンテナ化されたマイクロサービスをデバッグする - Idit Levine氏のQCon SFでの講演より

原文(投稿日:2017/11/16)へのリンク

QCon San Franciscoで、Idit Levine氏が“Debugging Containerized Microservices”と題して講演し、分散型マイクロサービスベースシステムにおけるデバッグの問題点を概説するとともに、システム固有の課題を克服する上で可能な3つのアプローチを紹介した。講演では、氏が開発中の新たなオープンソースのマイクロサービスデバッガであるSquashも紹介された。SquashはVS Code IDEと統合されて、Kubernetes上にデプロイされたマイクロサービスアプリケーションのデバッグを可能にする。

solo.ioの創業者でCEOのLevine氏の講演は、現在のマイクロサービスのデバッグが非常に難しいものだ、と述べることから始まった。モノリシックなアプリケーションであれば、シングルプロセスで構成されるのが一般的なので、デバッガをこのプロセスにアタッチするだけでアプリケーションの状態や実行フローをすべて見ることができる。マイクロサービスベースのシステムは、本質的にネットワークを越えて通信する複数プロセスからなる分散システムであるため、これが効果的なデバッグという課題を大幅に複雑なものにしている。

The problem of debugging microservices

講演では続いて、マイクロサービスをデバッグする上で可能な3つのアプローチが紹介された – 分散トラッキング、Levine氏の開発したオープンソースのSquashマイクロサービスデバッガの利用、サービスメッシュの使用である。

Open Zipkin -- Cloud Native Computing Foundation(CNCF)がホストするAPI仕様であるOpen Tracingの実装 -- などの分散トラッキングツールは、マイクロサービスベースのアプリケーション内の実行フローを監視し、理解するために使用することができる。このアプローチのメリットは、OSSコンポーネントからでも、任意のロギングツールへのアウトプットが容易であることだ。クリティカルパスの解析が可能になり、開発者は、要求レイテンシやトレースコンテキストに関連する他のメタデータを容易にドリルダウンできる。運用担当者は、システムトポロジを解析し、リソースの共有あるいは競合を原因とするボトルネックの特定が可能になる。短所としては、トレーシングではランタイムデバッグやアプローチ状態の変更が不可能であること、コードのラップやデコレーションといった変更が必要な場合があること、実行時にパフォーマンス上のペナルティを発生させる可能性があること、プリント出力以外を見ることはできないため、アプリケーション全体の状態を把握できないこと、などがあげられる。

2番目のアプローチは、Levine氏とsolo.ioのチームが開発しているオープンソースのSquashマイクロサービスデバッガを使ってデモが行われた。Squashでは今のところ、Delve(Go言語)あるいはGDB(C++、Objective C、Javaなど)でデバッグ可能な言語で記述され、Kuberneteコンテナオーケストレーションプラットフォームにデプロイされたマイクロサービスの、CS Code内でのデバッグのみがサポートされている -- ただし将来的には、より多くのIDEや言語、ランタイムプラットフォームをサポートする予定である(そのためにコミュニティからのコントリビューションを求めている)。

Squash microservices debugger architecture

Squashのアーキテクチャは、Kubernetesにデプロイされて動作するSquashサーバで構成されている。Squashサーバはアプリケーション毎のブレークポイントに関する情報を保持し、Squashクライアントのオーケストレーションとコントロールを行なう。SquashクライアントはKuberneteノードにデーモンとしてデプロイされる。クライアントはDockerコンテナとしてラップされ、デバッガのバイナリも保持する。ユーザインターフェースにはIDE -- 現在はVS Codeのみ -- を使用する。Squashエクステンションをインストールすることで、IDEコマンドパレットでSquashコマンドが利用できるようになる。

マイクロサービスをデバッグするための第3のアプローチは、Istio / Envoyのようなサービスメッシュ機能を利用することだ。Envoyなどのサービスメッシュデータプレーンは、システムのすべてのパケット/要求にタッチして、サービスディスカバリやヘルスチェック、ルーティング、ロードバランシング、認証と承認、監視可能性などを担当する。Istioのようなサービスメッシュコントロールプレーンは、メッシュ内で実行される全データプレーンのポリシとコンフィギュレーションを提供する。これらの特性は、イントロスペクションや実行フロー管理を行なう上で理想的なポイントを提供する。ただし、Open ZipkinとJeagerをIstioに統合した分散トラッキングおよび集中ロギングシステムを除けば、現時点でこの領域に存在するデバッグツールの数は多くない。

これら3つのデバッグアプローチをすべて統合すれば究極のソリューションになる、とLevine氏は述べた上で、聴衆に対して、solo.io Slackチャネルへの参加と、Squashで行なっている開発へのコントリビューションを呼びかけて、自身の講演を締め括った。

Levine氏の講演“Debugging Containerized Microservices”で使用されたスライド(58Mb PPTX)は、QCon SFのWebサイトからダウンロードすることができる。Squashマイクロサービスデバッガのコードは、同プロジェクトのGitHubリポジトリにある。講演のビデオは、近日中にInfoQで公開される予定だ。

この記事を評価

採用ステージ
スタイル

この記事に星をつける

おすすめ度
スタイル

BT