IPA(情報処理推進機構)は9月7日、「自治体・企業等の情報システムへのRuby適用可能性に関する調査」の報告書を公開した。同調査ではRubyについて、自治体や企業などの業務システムの開発といった分野を想定し、機能面・非機能面からその適用性の評価を行った。

調査を実施したのは、「Enterprise Ruby コンソーシアム(テクノプロジェクト、みずほ情報総研)」。検証環境は、富士通の「Platform Solution Center」に設けられた検証ルームと検証用機器が用いられた。

富士通「Platform Solution Center」のサーバルームと検証ルーム

同検証の目的は、Rubyを用いた「入出力処理」、入出力処理によって構成される「アプリケーションとしての処理プロセス」を想定したベンチマークを取得し、幅広いアプリケーション開発にRubyを用いる際に参考となる計測データやチューニング手法とその効果を抽出することだ。

具体的には、Rubyを用いたアプリケーションの「入出力処理」について、O/Rマッピングライブラリを利用したデータベースアクセスの性能に着目し、それを調査するための検証(以下、パフォーマンス検証)と、「アプリケーションとしての処理プロセス」について、実際のWeb アプリケーションでどれくらいの性能が出せるか調査するための検証(以下、スケーラビリティ)が行われた。各検証において、利用されたソフトウェアの環境は次の図のとおり。

左はパフォーマンス検証、右はスケーラビリティ検証に利用されたソフトウェア環境

パフォーマンス検証の結果

パフォーマンス検証の結果からは、RubyでActiveRecordを利用したプログラムではデータ抽出処理に関してfindメソッドをチューニングすることで、性能が大きく向上することがわかった。参照系システムでは、特に複数のデータベースにまたがる検索処理(select join)、一意のデータを検索する処理(select distinct)、集計処理(select group)は、非効率なSQL 文が発行されないよう、findメソッドのチューニングをするとパフォーマンス向上に効果がある。

しかし、今回比較対象としたJava版に比べると性能が及ばなかった。同報告書では、データ抽出処理が多い参照系システムではmemcachedを利用し、データ抽出処理性能を向上させるような仕組みを導入することで入出力処理の性能を担保するとよいとしている。

データ格納や更新、削除処理といった一連のトランザクション処理も、findメソッドのチューニングによって、性能を改善できることがわかった。ただし、ロールバック処理は現状のActiveRecordでは改善策がないため、期待する性能を実現するには、データベースエンジン側のストアドプロシージャを利用するなど、Rubyアプリケーションのチューニング以外での対策が必要だとしている。

スケーラビリティ検証の結果

スケーラビリティ検証では、、ノーマル版での結果を基準値とし、他の改善したアプリケーションを検証した場合、平均して秒間300 スループット程度向上した。現場でも、利用者の増大へ対応する環境を構築する際に、アプリケーション改良版で実施した基本的なチューニングによるHTMLレンダリングの高速化、データベースアクセスの高速化、memcachedの利用によるデータベースアクセス数の低減化は効果があり、スループットを向上させることができるという。

さらにより多くの処理を行うには、サーバ数を増やすスケールアウトの手段が、Rubyによる開発でも有効であり、リニアに性能が出ることが確認された。

同報告書では、「Rubyの性能を向上させる場合、今回の検証で効果が確認されたRubyまたはRuby on Railsの標準機能を用いたチューニング手法の適用を優先し、それでも十分な性能が得られない場合に外部ツールを利用するという順序で検討するとよい」とアドバイスしている。