【IT】業務で学んだサイジングの秘訣・やり方を伝授
直近の業務で自社製品のサイジングを行いました。
その業務の中でいくつもの学びがあり、最初から知っていたらより良く、そして効率的なサイジングが行えただろうと思えたことについてまとめました。
これからサイジングを行う人には有益な情報だと思うので、参考にしてください。
サイジングとは
誤解が無いようにまずはじめにこのページでいうサイジングとは何かをお伝えしておきます。
このページで言うサイジングとは「システムの利用状況に応じた負荷を算出すること」です。ウェブサービスのサイジングの例としては、30人が同時にアクセスした時のサーバーの負荷(CPU使用率、メモリ使用率)を確認することがあげられます。
サイジングの目的は大きく以下の2つです。
- 処理出来る最大値を把握すること
- 処理出来る最大値を把握し、改善が必要な箇所を洗い出すこと
目的によってサイジングを行うべき時期が変わります。目的が1の場合、実施時期はサイジング対象製品のリリース直前で問題ありません。目的が2の場合、サイジング後にコードを改善する必要があり、改善後に再びサイジングという流れを、目標値に達するまで繰り返すことになるのでそれを考慮した時期に行う必要があります。
スマートフォンアプリなどの出荷後であっても改修が容易な製品であれば、目的1のみ達成できれば良い場合が多いです。反対に、パッケージとして販売する製品のような、お客様のもとに製品が行ってしまい改修が難しい製品の場合は2の目的でサイジングを行うことが多いでしょう。
まずはあなたが行おうとしているサイジングがどちらの目的をもつのかを考え、サイジングを計画に組み込みましょう。
進め方
ではこれより具体的なサイジングの手順について解説していきます。
- 検証項目をリストアップ(例:ページ遷移、画面操作、データ保存、最大同時アクセス数等)
- 監視対象をリストアップ(例:CPU使用量、メモリ使用量、ディスク容量、ネットワーク負荷、処理時間等)
- 監視対象の調査に必要なコマンドやツールの把握(例:Linuxならvmstatやtopコマンド)
- 検証方法、手順の考案(基本的には以下の手順)
- 3の調査で見つかったコマンドを実行し、実行結果をファイルに5秒おきなど定期的に保存し続ける
- 検証項目としてリストアップした内容の内1つを実行する
- コマンドの実行結果をファイルに保存するのを止める
- コマンドの実行結果が保存されたファイルを元にリソース使用量のグラフを作成する
- 検証環境の構築を行う。
- 考えた検証方法、手順を実行する。
以上の手順を踏めば精度が高いサイジングを行うことができます。
注意点
注意点を上げておきます。
リソースは出来るだけ全て監視する
この操作はメモリを特に使用しそうだから測るのはメモリだけにしよう、というように、操作によって負荷がかかる箇所を推測し、そこだけ調査するのは危険です。コンピュータは人が予測したように動くのではなく、プログラムされた通りに動きます。そのため予測から外れた動きをすることが多々あります。勝手な考えで調査するリソースを限定するのは危険です。
メモリ、CPUなど複数のリソース使用量を同時に測ることが出来るツールを利用したり、スクリプトを作成しましょう。一度準備してしまえばあとはそれを使うだけで測りたいすべてのリソース値を網羅することができます。
リソース監視コマンドの実行負荷も考慮する
コマンドを実行するということは多少なりともマシンに負荷がかかる行為です。そのためリソース監視コマンドの実行頻度を0.1秒間隔など高い頻度で行ってしまうと、本来のサイジング結果よりも負荷が高い結果になってしまいます。
これを防ぐためにも以下の工夫をしてリソース監視のためのコマンド実行負荷を最小限に抑えましょう。
- リソースをあまり食わないコマンドを選ぶ
- コマンドの実行頻度を下げる
サイジングの手順は明文化しておく
サイジングは繰り返し行われます。1回目のサイジングと2回目のサイジングで異なったやり方をしていた場合、改善されたのか改悪されたのか変わっていないのかまったく分からなくなります。これを防ぐためにもサイジングの手順は詳細すぎるほどに残しておきましょう。
キーワードは再現性です。サイジングの担当者が変わったとしても誰でも同じように実行できるレベルにまで詳細に手順を記録しておきましょう。
自動化ツールを使う
サイジングは特定の操作を連続で行うことが多く、またサイジング自体が繰り返し行われることが多いです。全てを手作業でやっていたら膨大な時間がかかってしまいます。そこで自動化ツールを利用しましょう。
自動化ツールを利用できるようになるためには時間がかかります。しかし最初に少し時間がかかったとしても後の作業を効率化できるなら利用すべきです。自動化した作業はバージョンアップの際や、再びサイジングを行う際にも利用できます。面倒臭がらずたくさんのことを自動化しておきましょう。それが最終的に一番楽する方法です。
ここで私が利用していた自動化ツールを紹介しておきます。
- UWSC(WindowsOSのGUI操作を自動化出来る)
- JMeter(APIリクエストをCSVに記載した内容に則って繰り返し実行する)
- シェルスクリプト(複数のLinuxコマンドを実行する)
- TeraTermマクロ(TeraTermによるLinuxマシンへの自動ログインからコマンド実行、ログアウトまでの操作を自動化)
- batファイル(Windowsマシンでのコマンド実行)
まとめ
サイジングは製品の機能には直接関係しない箇所なので軽視されがちです。しかし、問題になりバグを生みやすい箇所でもあります。
この記事を読んだ方が適切なサイジングを行うことができるようになり、少しでも世の中の製品の不具合を減らすことができたら幸いです。
最後にサイジングを行う上で読んでおいて良かった本を紹介しておきます。
この本はCPUやメモリとはについて体系立って教えてくれます。深い知識を持ってサイジングを行いたいと思っている人には是非とも読んでおいて欲しいです。
以上、長い文章でしたが読んでくださりありがとうございました。