あなたは、開発段階で動作する絶妙なコードを書きました。
それを本番に持ち込んで、さまざまな人に使ってもらうときが来ました。
そのとき、何千もの疑問が頭に浮かびます。
この記事では、これらの質問に答え、アプリケーションを本番環境に移行する際に有効なプロセスを解説します。
連続プロファイリングとは?
継続的プロファイリングとは、実運用環境におけるコードのパフォーマンスを、いつでも、どのような規模でも最適化するプロセスです。
本番環境から継続的にパフォーマンスデータを収集し、開発者や運用チームに提供して、迅速かつ詳細な分析を行うことが必要です。
これは、継続的なプロファイリングのフィードバックを示すラフスケッチです。
なぜ継続的プロファイリングを使用する必要があるのか?
プログラマーがコードのパフォーマンスについてラインレベルのフィードバックを得られるように、継続的なプロファイリングのアーキテクチャが必要です。
ここで言うパフォーマンスとは、限られたリソースの消費率を見ることができることを意味します。
リソースには、ウォールクロック時間、メモリ、CPU時間、ディスクI/Oなどがある。
これらのリソースが枯渇すると、システム内のボトルネックにつながる可能性があります。
そこで、コードベースでこれらのリソースを利用している部分を特定し、改善することができれば、パフォーマンスの低下から素早く回復し、コストを削減し、スケーラビリティ、プログラマーのメンタルモデル、ユーザーエクスペリエンスを向上させることができるのです。
コーディング言語ごとに連続プロファイラを実装する必要があるように感じても、そのコンセプトはあまり変わりません。
継続的プロファイラは、オーバーヘッドを目立たないようにするために、無計画に定期的にプロファイルを取得します。
プロファイラは、アプリケーションの実稼働時の動作に関する重要なデータを提供するプロファイリングレポートを使用して、あなたのような開発者がパフォーマンス問題を安価に自動的に解決するのを助けることで、素晴らしい利点を提供します。
この情報により、あなたにとってホットスポットであるコードの重要な領域を理解し、分析することができます。
この記事もチェック:Pythonで主成分分析(PCA)による次元削減の理論と実装を詳しく解説する
私たちが持っている連続的なプロファイラの種類
コードプロファイラには、大きく分けてサンプリングプロファイラとインスツルメンテーションプロファイラの2種類があります。
- サンプリングプロファイラ。統計的プロファイラーとも呼ばれ、さまざまなタイムポイントのサンプルを取得することで、アプリケーションの「費やした時間」の割り当てを推定することで動作します。
- インスツルメンテーションプロファイラ。アプリケーションのコードをアップグレードし、関数に呼び出しを挿入して、プロセスが呼び出された回数と関数内で費やされた時間を計算することによって動作します。プロファイラがアプリケーションコードに直接インスツルメンテーションを挿入するため、このパフォーマンス分析に関連するオーバーヘッドはしばしば高くなります。
知っておきたい連続プロファイラの話
Gprofiler
Granulate社のgProfilerは、オープンソースの連続プロファイラで、コードを変更することなくシームレスに最小限の労力でインストールすることができます。
プロダクションコードへの可視性はすぐに促進され、gProfilerはバックグラウンドで継続的に動作するようにプロビジョニングされています。
そのため、パフォーマンス問題の分析は、最小限のCPU使用率でリアルタイムに行われます。
また、アプリケーションのクラウド利用を最適化するため、費用対効果の高いソリューションとなります。
Python、Java、Go、Scala、Clojure、Kotlinアプリケーションなどのプログラミング言語をサポートしています。
Datadog継続的プロファイラー
Datadogの連続プロファイラは、CPUやメモリをより多く使用しているコードラインを簡単に発見することができます。
ホスト・アプリケーション上で動作するDatadogのエージェントで提供されます。
Python、Java、Goなどの異なるコーディング言語でプログラムされたアプリケーションをサポートできますが、得られるプロファイリング情報の種類は、言語によって異なります。
例えば、Javaアプリケーションは、各メソッドがファイルから読み書きするのにかかる時間のプロファイリング情報を提供される唯一のものです。
しかし、CPUの関数ごとの使用時間については、どのプログラミング言語でもアクセス可能です。
Amazon CodeGuru Profiler
Amazon CodeGuru Profilerは、プログラマがアプリケーションの動作ランタイムを理解し、コストのかかるコード行を見つけるのに役立ちます。
CPUとメモリの使用率を改善する機会を探すことで、高いレイテンシや低いスループットなどのパフォーマンスの問題を診断するために活用できます。
コスト削減を支援します。
このように、本番環境で常に実行することで、パフォーマンスの問題を発見し、コードアプリケーションの中で最もコストのかかる行やリソースを消費する行を知り、最適化する方法について機械学習を活用した推奨事項を提供することができます。
Amazon CodeGuruは、JavaとPythonのアプリケーションをサポートしています。
Dynatrace コードプロファイラ
Dynatrace Code Profilerは、エンドツーエンドのトランザクションにまたがるコードレベルのトレースに基づいて、特許取得済みのPurePath技術を使用しています。
CPUとメモリツールのプロファイリングを提供し、開発者が問題を検出するためにメソッドレベルまで深く掘り下げることを可能にします。
PHP、Java、.NET、Node.js、Goで作成されたアプリケーションをサポートしています。
連続プロファイラがアプリケーション制作に非常に不可欠であることがわかりますが、この記事で連続プロファイリングに関する多くの疑問に答えることができたと思います。
お読みいただきありがとうございました。
この記事もチェック:オンラインカジノのフロントエンドに採用されているWeb技術