## Memo ## Abstract マイクロサービスから構成されるWebサービスにおいて、ソフトウェアとハードウェアの両方のボトルネックを検出する方法を提案する。ボトルネックとは、ウェブサービス全体の最大性能を制限するリソースのことである。ボトルネックには、スレッド、ロック、チャネルなどのソフトウェアリソースと、プロセッサ、メモリ、ディスクなどのハードウェアリソースの両方が含まれることが多い。1つのリクエストが複数のソフトウェアリソースとハードウェアリソースを同時に利用することがあるため、ボトルネックは階層構造を形成しています。マイクロサービスアーキテクチャでは、言語、ライブラリ、フレームワーク、ミドルウェアを横断する統一的な分析視点がないため、階層化されたボトルネックの検出は困難である。 我々は、各マイクロサービスのスレッド数と状態、およびネットワーク接続によるマイクロサービス間の依存関係をプロファイリングすることで、マイクロサービスにおける層状ボトルネックを検出する。このアプローチは、標準的なデバッグツールに依存するため、様々なプログラミング言語に適用することができます。しかし、我々のアプローチは、どのマイクロサービスがボトルネックになっているかを検出するだけでなく、なぜそれがボトルネックになったのかを理解することも可能です。これは、マイクロサービスにおける層状のボトルネックを一目で分かるようにするための新しい可視化手法によって可能になります。我々は、最先端のマイクロサービスベンチマークである[[DeathStarBench]]とAcme Airのマイクロサービスにおいて、我々のアプローチが層状のボトルネックをうまく検出し、可視化することを実証している。これにより、マイクロサービスのレプリカ数を単純に拡張する場合と比較して、再ソース利用率あたりのスループットが高くなるように、マイクロサービス自体を最適化することができます。 [[2022__CLOUD__Detecting Layered Bottlenecks in Microservices__translations]]