grzegorznowak.server_performance_assesment
Ansibleサーバーパフォーマンス評価(役割)
Ansibleを使って、あなたのマシン/コンテナ/ドロップレット/リノードのパフォーマンスを理解します。
新しいホストで実行すると、基本のパフォーマンスがどのようなものかを知ることができ、それがあなたの目標に合っているかを確認できます。
このプロジェクトは、今後の運用チームの即時の要求を解決するためのものであり、一般的には多くのケースに十分な解決策となるでしょう。あなたの助けがあれば、さらに多くのシステムやケースに拡張できることを喜んでいます。
カタリスト
このプロジェクトのきっかけは、我々のクラウドマシンのややランダムな挙動でした。プロバイダーの名前を明かさないために、彼らの名前をまったく無関係で暗号的なコードネーム「ザ・シャーキー」に変えます。
ザ・シャーキーは新しいクラウドマシンをすばやく立ち上げるのが得意です。これらをクリルと呼ぶことにしましょう。クリルのパフォーマンスは、ザ・シャーキーのドキュメントには明確に示されておらず、ただ__共有CPU__を持っていることが記載されています。具体的には、ディスクやRAMから期待できるIOPSやメモリスループット、あるいは基盤となるハイパーバイザーのCPUファミリーについての情報は一切提供されていません。そして、パフォーマンスの低いマシンが提供される可能性が高いです。
ザ・シャーキーは、均等なクリルを作ることにはあまり関心がなく、ひたすら多くのクリルを作ることに注力しています。その結果、できるだけ多くのクリルを一つのハイパーバイザーに詰め込み、限界に達するまで続けます。その段階では、ユーザーが感じるパフォーマンスの低下は顕著です。
しかしユーザーは、支払った料金(時間単位)に応じて、毎回同じスペックと能力を持つものを期待するのが普通です。これはアプリケーションやビジネスにとって重要であり、公式にはザ・シャーキーからそれ以外の情報が提供されることはありません(特定の種類の共有クリルを使用する場合には、共有CPU空間での変動について公式に記載されていますが、それはCPUのことだけです)。
ユースケース
この役割は、2方向のチェックを可能にするために作成されました。
- 最初に、実際にプロビジョニングを行う前にこれを実行し、基準が仮定に合っていることを確認します。もし大きく外れている場合は、クリルを削除して再作成するかもしれません。
- 次に、特定のイベント(他のツールから得られるアプリの応答時間が低下した場合など)でトリガーされるようにスケジュール実行したいです。これにより、実際の問題がインフラストラクチャのパフォーマンス低下に関連していないかを確認できます。少なくとも、開発者に最適化されていないコードを押し付けることに責任を押し付ける前に確かめた方が良いでしょう。まあ、後者はどうにでもできるかもしれませんが、私たちは「早期リリース、干渉されると最適化」という考え方を強く信じています。
低レベルの前提
この計画は、マシンのパフォーマンス能力に対する一連のプロビジョニングブロッキングアサーションを最小限の追加ソフトウェアを使用して実現することです。 そのため、最終結果は実際のはい/いいえの答えというよりはヒューリスティックになるかもしれませんが、テストのカナリアとしては完全に適しているはずです。
テスト
./bootstrap_testing.sh
source testing_env/bin/activate
read -s PASS && ANSIBLE_BECOME_PASS=$PASS molecule verify -s lxd
このコマンドを実行すると、あなたのsudoパスワードを入力するための静かなプロンプトが表示されます。それを入力してEnterキーを押すと、続行します。
使用法
Gitリポジトリからクローンした場合
あなたのplaybook.yml
にこの役割を追加し、受け入れ可能な基準性能に合わせてパラメータを調整します。
- name: Verify
hosts: all
become: true
roles:
- role: ansible-server-performance-assessment
spa_disk_write_MB_per_s_assertion: 300 [MB/sで、好みに応じて調整]
spa_disk_read_MB_per_s_assertion: 300 [MB/sで、好みに応じて調整]
# ネットワークベンチ
# speedtest.netに感謝!あなたをプロダクションで使うとは思っていませんでしたが、こうなりました。
spa_speedtest_tmp_file: /tmp/spa_speedtest.out
spa_downlink_assertion: 100 # 値はMb/s(ビット毎秒)
spa_uplink_assertion: 100 # 値はMb/s(ビット毎秒)
# メモリベンチ
spa_memory_speed_assertion: 10000 # 値はMB/s(バイト毎秒)
# CPUベンチ
spa_cpu_event_per_second_assertion: 300 # Sysbenchによって報告される1秒あたりのイベント数
tags:
- benchmark
- never
上記のサンプルは、--tags=benchmark
パラメータがAnsibleに渡された場合のみ実行されます
(既存のプレイブックファイルと簡単に統合するために)。
制限
この役割は、en
ロケール以外ではあまり機能しないか、全く機能しません。なぜなら、ベンチマークソフトウェアの一部の解析は出力の特定のフレーズを使用して行われているからです。これは、私よりもawkや正規表現に慣れた誰かによって、二回目の開発によって改良される可能性があります。
ansible-galaxy install grzegorznowak.server_performance_assesment