2005年4月26日火曜日

郵便番号変換でXMLRPCサーバのベンチ

XML-RPCを使って、郵便番号から住所引っ張ってくるサービスを作る際に、perlとPHPどちらの方がパフォーマンスがでるのか気になったので、ちょっと実験してみました。

perlの方はnaoyaさんのApache::XMLRPC::Lite を使った mod_perl ハンドラによる XML-RPC サーバのエントリを参考にApache::XMLRPC::LiteとClass::DBIを使って実装し、PHPの方はXMLRPCの実装にXML-RPC for PHPにあるライブラリを使い、DBとの連携は組み込みのmysql_connectとかを使って実装してみました。ちなみにPHPはまともに動くコードを初めて書きましたが、意外と書けるものですねw

ベンチマークにはabを使い、同時接続数が1,5,10,20の場合をそれぞれ測定してみました。
>

ab -n 100 -c 1 -T text/xml -p post.txt -w http://horiuchi.vcube.net/zipconv/xmlrpc > result.html
<

以下結果です。
-Apache::XMLRPC::Lite
-Apache::XMLRPC::Lite(レスポンスを強制的にbase64にした場合)
-PHP
-CGI ( perl )

レスポンスを強制的にbase64にした場合を測定したのはSOAP::Liteのドキュメントにそうするとパフォーマンスをあがるというようなことが書かれていたので試してみました。
ですが、結果としてはそれほどパフォーマンスはあがってません。逆に同時アクセス数を大きくするとパフォーマンスが落ちてしまいました。
また、PerlとPHPではそれほどパフォーマンスに違いがないようです。

PHPだと劇的に早いという結果になったらPHPにしようかとも思ったのですが、結局どちらにしても違いはそれほどなさそうなので、得意のPerlで行くことにしました。



2 件のコメント:

  1. 結構はやいのかな。。。
    こういうテストのエントリー参考になります。

    返信削除
  2. サーバの方は運用上問題ない速度がでるように思います。
    逆にクライアントの方がXMLをパースする分、遅くなりますね。
    パースに、XML::Simpleを使ったら1秒くらいかかって使い物にならない感じでした。
    クライアントのサーバのスペックをあげればXML::Simpleでもそんなに遅くはならないと思いますが、大量のアクセスを想定するようなサービスの場合は正規表現とか使ってXMLをパースした方が良さそうです。

    返信削除