2010-12-10 9 views
0

コールセンターの受注システムに対してこのAPIを提供しており、オンラインオーダーと通信します。 しかし、多くのリクエストとレスポンスは同じ、多かれ少なかれ静的ですが、APIサーバはそれらを生成しますが、静的ファイルを提供するだけではありません。XMLレスポンスのキャッシュ

XMLレスポンスをキャッシュするための最良の方法として何をお勧めしますか?私はZend_Cacheを見ました。しかし、私が理解していることから、私はそれがクライアント/セッションベースだと思います、私はすべてのクライアントが同じキャッシュを利用することを望みます。

また、すべてのページビューは、バスケットのコンテンツの価格を問わず、どのキャッシングを提案していますか。私はZend_Cacheが多分ここに遊びに来るかもしれないと思う!

私が必要とするのは、APIサーバーの負荷を取り除くことです。そのため、価格要求や、リクエストごとに変更されるその他のリクエストを処理するためのリソースが増えます。

更新:13 2010年12月10.45

要求タイミング

2010-12-10T14:43:46+01:00 DEBUG (7): XML GET /ccstatus [0.054742097854614] 
2010-12-10T14:43:46+01:00 DEBUG (7): XML GET /storestatus [0.063634157180786] 
2010-12-10T14:43:46+01:00 DEBUG (7): XML GET /storestatus [0.062693119049072] 
2010-12-10T14:43:46+01:00 DEBUG (7): XML GET /storestatus [0.062756061553955] 
2010-12-10T14:43:46+01:00 DEBUG (7): XML GET /storestatus [0.062740087509155] 
2010-12-10T14:43:46+01:00 DEBUG (7): XML GET /storelocations [0.065214872360229] 
2010-12-10T14:43:46+01:00 DEBUG (7): XML GET /coupons [0.070861101150513] 
2010-12-10T14:43:47+01:00 DEBUG (7): XML GET /packagedeals [0.51115489006042] 
2010-12-10T14:43:47+01:00 DEBUG (7): XML POST /price [0.065691947937012] 
2010-12-10T14:43:47+01:00 DEBUG (7): XML GET /pizzas [0.10685706138611] 
2010-12-10T14:43:47+01:00 DEBUG (7): XML GET /bevtypes [0.059874057769775] 
2010-12-10T14:43:47+01:00 DEBUG (7): XML GET /bevsizes [0.056848049163818] 
2010-12-10T14:43:47+01:00 DEBUG (7): XML GET /items [0.070401191711426] 
2010-12-10T14:43:47+01:00 DEBUG (7): XML GET /storestatus [0.062546014785767] 
2010-12-10T14:43:47+01:00 DEBUG (7): XML GET /storestatus [0.063254117965698] 
2010-12-10T14:43:47+01:00 DEBUG (7): XML GET /storestatus [0.062647104263306] 
2010-12-10T14:43:47+01:00 DEBUG (7): XML GET /storestatus [0.062632083892822] 
2010-12-10T14:43:47+01:00 DEBUG (7): XML GET /storestatus [0.062486886978149] 
2010-12-10T14:43:47+01:00 DEBUG (7): XML GET /items [0.059072017669678] 
2010-12-10T14:43:47+01:00 DEBUG (7): XML GET /storestatus [0.062618970870972] 
2010-12-10T14:43:48+01:00 DEBUG (7): XML POST /price [0.063409805297852] 

これは、サイドオーダーのページを示す、単一ページビューのリクエストで、バスケットは、2つの項目が含まれています。

これらの時間に基づいて、私はデータをキャッシュすることでかなりの違いを得るだろうと思いますか?これらの時間は無負荷であるため、高負荷ではキャッシングが便利になる可能性があります。

答えて

1

バスケットに依存するpricerequestリクエストで多くのキャッシュを行う方法はありません。これらはセッションベースの非常に可変なものとして私を襲います。そのため、リクエストごとにコンピューティングを行うのはかなり必要です。

他のリクエスト - 「APIリクエスト」 - あなたが提案したものとまったく同じ静的なものであれば、FileまたはMemcachedバックエンドを使ってZend_Cacheをストレートにすることができます。キャッシュしたい静的APIリクエストごとに一意のキーを生成するためのアルゴリズムを理解するだけです。

フロントエンドオプションで無期限のライフタイムを指定し、コンテンツを最新の状態に保つのに十分な頻度でキャッシュを再投入するためにcronジョブを実行することもできます。

大声で考えてみましょう。

乾杯!

+0

素晴らしい考え:)価格要求について、私はセッションで最後の応答を保存すると思っていた、バスケットの内容しかし、おそらく正しいでしょう。多かれ少なかれ静的な要求をファイルに格納することができます。私は最初の投稿を更新しました。各リクエストがAPIから取得するためのログのリストを更新しました。 – Phliplip

+0

バスケットが変更されていない場合、新しいpricerequestを実行する必要はありません。良いキャッチ。 ;-) –

+0

私はZend_Cacheファイルとcronジョブを使ってキャッシュを更新したので、あなたの答えを受け入れました。私たちは直ちにオンライン注文の負荷時間が50%減少したことを見ました:)科学的方法はありません。ページが読み込まれるまで数秒でリンクをクリックするだけです。 – Phliplip

4

Zend_Cacheはセッションベースではありません。それはnumber of backends to store the cached data inを持っています。たとえば、ネットワーク上にmemcachedサーバーをセットアップし、そこにXMLを格納することができます。関数呼び出しやページ全体の結果、または任意のキーでキャッシュすることができます。

あなたは別のオプションは、透過的にあなたのAPIサーバーへの要求を処理し、キャッシュされた応答またはクエリを提供するかどうかを決定し、あなたのAPI Serverとクライアントの間のCaching Proxyを追加することですarticles about Zend_Cache at Devzone

の数を見つけることができますAPIサーバー。このアプローチの利点は、キャッシングロジックをAPIサーバーから遠ざけることです。欠点は、別のサーバーが必要であることです。

+1

キャッシングプロキシは、Varnish(http://www.varnish-cache.org/)とSquid(http://www.squid-cache.org/)です。 – ivy

+0

別のサーバー*アプリケーション*ただし必ずしも別の*物理サーバー*。 –

+0

@ElYobo私は言いませんでしたか? ;) – Gordon

関連する問題