オルタナティブ・ブログ > プログラマー社長のブログ >

プログラミングでメシが食えるか!?

負荷テストツールの楽しみ

»

ネットワーク関連の仕事をしていると、「負荷」という言葉に結構敏感になります。特にインターネットのように不特定多数の通信が飛び交う環境では、負荷に耐えられるかどうかというのは、サーバにとってとても大切なポイントです。

負荷に対応するためには、性能やリソースに余裕を持たせるか、あるいは入り口に制限を儲けることになりますが、いずれにしても、どのくらいの負荷まで耐えられるかをきちんと把握しておくことはとても大切です。

インターネットでのシステム構築が始まった頃は、本当に人をたくさん集めて負荷テストをしていました。たとえばWEBシステムの負荷テストをするために、土日に100人人を集めて、「せーの!」でブラウザを操作して確認するようなことをしていました。さすがに精度も高くありませんし、人も大変なので、同じような負荷を与えることができるツールを考えるようになります。

私がだいぶ前にWEB負荷テストツール「SADEE2」を開発したのもそんな頃でした。たくさんの人がブラウザからアクセスするのと同じような負荷をプログラムで実現するものです。

負荷テストツールはシステムの耐性を測るために使うのであれば良いのですが、攻撃にも使えます。SADEE2を使えばWEBサーバにかなりの負荷をかけることができますので、他のユーザに迷惑をかけたり、ひどい時にはサーバをダウンさせることもできるかも知れません。DOS(Denial of Service attack)攻撃です。多拠点から攻撃すればDDOS(Distributed Denial of Service attack)攻撃になります。そこで当時は販売価格をあえて高目にしていました。遊びで買う気がしないくらいに、という感じです。今となってはフリーでもいろいろある時代ですので、値段も下げました。

負荷テストツールはシステム管理者や運用者にしてみれば、とても嫌なツールなのですが、エンジニアとしてはかなり楽しめるツールでもあります。ネットワークが輻輳状態になるとどうなるか、とか、排他制御がきちんと動いているかなど、負荷テストツールでシステム全体の挙動を見るのはかなり刺激的です。そんなわけで、結構いろいろな負荷テストツールを作りました。DHCP、SMTPなどの汎用プロトコルはもちろん、様々な専用システム用の負荷テストツール、あるいは、単純にTCPやUDPの負荷を見るためのツールなどです。基本的にサーバプログラムを作ったら、必ず負荷テストもしておきたいので、負荷テストツールも大抵自作する感じになります。

高性能なサーバプログラムを作成するのと同じ楽しみが負荷テストツールの開発にはあり、限界にチャレンジ的な楽しみがあります。先日作成したTCPつなぎ逃げツールなんかも面白いものです。基本的にOSはネットワーク負荷に対抗できるように、安全対策が取られていますが、それを上手く避けながら負荷テストツールを作るのがかなり楽しいのです。UDPの負荷テストツールは基本的にシングルタスクで作る方がやりやすいのですが、TCPはコネクションの対応を考えるとマルチタスクが便利です。が、そうすると排他のオーバーヘッドや、ディスクリプタ数の制限などがあり、それらをどう回避するかなども腕の見せ所です。

ということで、サーバプログラムを作ったら、必ず負荷テストツールを作るくらいの気持ちで、皆さんも是非楽しんでみましょう!

Comment(0)