DBの見直しは断念

図3●パフォーマンスを確保するために検討した選択肢
当初,DBMSの再設計を考えたが,主にコスト面で断念。ツールを使いAPサーバー上にコンテンツをキャッシュする方法を選択した
図4●キャッシュ利用によるパフォーマンスの向上効果
Zend Performance Suiteを使い,1秒間に処理できるリクエスト件数を測定した。グラフ中の( )内は,キャッシュ無しと比較してパフォーマンスがどの程度向上したか
図5●状態はCookieに書き込む
PHP4にはセッションIDを相互に引き続ぐ機能がない。クライアントの状態をCookieに保持し,GETメソッド内に埋め込むことにした

 DBサーバーの負荷を軽減するには,専用のDBを導入してレプリケーションしたり,サービスごとにテーブルを分散させたりする方法が考えられた。が,いずれもOracleのライセンスを新規購入する必要があり,コストが余計にかかってしまう(図3[拡大表示])。アプリケーションの作りや運用が複雑になることを避ける意味からも,これらの方法は早い時点で除外した。

 オープンソースDBを使えばコスト面の問題は解消する。しかしテストしたところ,2000万PVに耐えられるスループットが出なかった。

 そこで採用したのは,PHPの解析済みスクリプトやコンテンツをAPサーバー上にキャッシュするツール「Zend Performance Suite(ZPS)」。テストしてみると,キャッシュ無しに比べて平均500倍近い性能が得られることが分かった(図4[拡大表示])。

 Webサーバー側に静的なファイルを置き,1日1回バッチで更新する方法もあり得た。しかし,ZPSのパフォーマンスが思いの外よかったので,それに任せることにした。

利用者の使い方を観察する

 ZPSがキャッシュを表示できるのは,一定時間以内に誰かが同じページを表示した場合。キャッシング・タイムはデフォルトで360秒だったが,とりあえず600秒と長めに設定した。5分や10分で表示内容が変化しないトップページや閲覧ランキングのページには,威力を発揮する。

 半面,利用者ごとに表示内容が変わるページには効果がない。例えば,検索条件を細かく指定できる詳細検索ページでは,DBアクセスが発生しやすい。後に説明するマイガレージ機能では,Cookie情報にひも付けられたデータを呼ぶ必要があるため,これもDBアクセスを増やす原因となる。

 それでも「トップページなどからのDBアクセスがほとんどなくなる分だけ,リソースには余裕が出てくる。結果的にDBアクセスの処理も早くなる」(翼システム 自動車事業部 東京システム開発部 東京SH開発課 主任 岩創氏)。詳細検索やマイガレージ機能がどの程度利用されるかにより,キャッシュの効果は大きく左右される。利用者がどういう使い方をするのか,数カ月間,観察することにした。

 現在のところ,eクルマさがしはオートバイテルの新車見積もりにのみリンクされているが,「いずれは中古車の売買仲介サイトにもリンクさせる」(翼システム ネットビジネス事業部 ネットワーク推進部 コンテンツ企画開発課 課長代理 高橋栄一氏)方針だ。中古車検索は新車よりさらに処理コストが高い。中古車は発売中止になった車種まで対象にしなければならず,データ量が10倍になるからだ。その時にキャッシュ方式がどの程度有効かを判断するためにも,利用者の使い方を見極める必要がある。

状態はCookieに保持

 eクルマさがしには,マイガレージというコンテンツのクリップ機能がある。選択した車種の情報を保持しておく機能だ。

 ただし,その情報はサーバー側では保持しない。クリップした車種のコードをCookieに含め,クライアント側で保持しておく。当該ページをリクエストするたびにHTTPのGETメソッドに含めて送信する(図5[拡大表示])。

 その理由は,PHPには複数サーバー間でセッション情報を引き継ぐ機能がないためだ。サーバー側にクライアントの状態を保持してセッションIDなどを使いひも付けるやり方だと,Web/APサーバーの1台に障害が起きた場合に,クライアントの状態が消えてしまう。そのリスクを避けた。

 このやり方は,複数サイトを連携させる点からも便利だ。CookieやHTMLに記述した車種データをGETメソッドに含めるだけで,クライアントの画面に表示されている車種を別サイトに受け渡すことができるからだ。

 利用者のアクセスをオートバイテルに引き渡すときに,GETメソッドに車種コードを含めて送信する。ただし,翼システムで使っている車種コードとオートバイテルの車種コードは異なる。そのため,翼システムの車種コードを受け取り,オートバイテルの車種コードに変換する機能をオートバイテルのシステム側に作り込んだ。

(尾崎 憲和=ozaki@nikkeibp.co.jp)