キャッシュストレージ

Traffic Server のキャッシュは URL と関連するヘッダーにより キャッシュオブジェクト をインデックスする オブジェクトストア と呼ばれる高速なオブジェクトデータベースで構成されています。

The Traffic Server Cache

Traffic Server のキャッシュは URL と関連するヘッダーにより キャッシュオブジェクト をインデックスする オブジェクトストア と呼ばれる高速なオブジェクトデータベースで構成されています。これは Traffic Server が Web ページだけでなく最適な帯域の節約をする部分的な Web ページも格納、取得、提供を可能とします。洗練されたオブジェクト管理により、オブジェクトストアは同じオブジェクトの 代替 バージョン ( バージョンは異なる言語やエンコーディングにより異なります ) をキャッシュできます。またとても小さいオブジェクトもとても大きいドキュメントも効率よく格納できるので、無駄な領域を最小限にできます。キャッシュがいっぱいのとき、 Traffic Server は一番リクエストされたオブジェクトが容易に利用可能で新鮮な状態であることを維持するために 新鮮でない データを削除します。

Traffic Server はキャッシュディスクのあらゆるディスク障害に耐性を持つよう設計されています。ディスクが完全に故障した場合、Traffic Server はディスク全体を壊れていると印付けし、残りのディスクを使用し続けます。そしてディスク故障を示すアラームが作成されます。すべてのディスクが故障すると、Traffic Server はプロキシー限定モードに入ります。

次のキャッシュ設定作業を行うことができます。

  • キャッシュに割り当てられたディスク領域の総量を変更する。 キャッシュキャパシティの変更 を参照。
  • 特定のプロトコルと オリジンサーバー/ドメイン 用にキャッシュディスクの領域を予約してキャッシュを区分けする。 キャッシュの区分け を参照。
  • キャッシュ内のすべてのデータを削除する。 キャッシュのクリア を参照。
  • 時間、ポート、リクエストのメソッド ( など ) に対する追加のフィルターによるリクエストされたドメイン名、URL の正規表現、ホスト名または IP に対するキャッシュディレクティブの上書き。 ATS は、キャッシュしないようにも、常にキャッシュするようにも、 no-cache ディレクティブを無視するようにも、他にもいろいろと設定できます。これらは cache.config で設定されます。

The RAM Cache

Traffic Server はとてもよく使用されるオブジェクトの小さな RAM キャッシュを維持します。RAM キャッシュは、特に一時的なトラフィックのピークの際に、一番人気のあるオブジェクトをできるだけ素早く提供しディスク負荷を低減します。以下の RAM キャッシュのサイズの変更 で説明されているように、必要に応じて RAM キャッシュのサイズを設定できます。

RAM キャッシュは二つのキャッシュ削除アルゴリズム、通常の LRU (Least Recently Used) とより進んだ CLFUS (Clocked Least Frequently Used by Size; ヒット率を最大化するために新しさ、頻度、サイズのバランスをとるもので、most frequently used アルゴリズムに似ています ) に対応しています。デフォルトでは CLFUS を使用し、これは proxy.config.cache.ram_cache.algorithm で制御されます。

LRUCLFUS RAM キャッシュはスキャン耐性を増加する設定に対応しています。典型的な LRU では、存在しうるすべてのオブジェクトに順にリクエストを行うと、リクエストのたびにキャッシュを撹拌することになるでしょう。この問題に対してある程度の耐性を追加するために proxy.config.cache.ram_cache.use_seen_filter オプションを設定することができます。

さらに、CLFUS は RAM キャッシュ自体の圧縮にも対応しています。これはコンテンツ自体が圧縮されていない場合 ( 例えば画像 ) に便利です。これを Content-Encoding: gzip と混同しないでください。この機能は RAM キャッシュ自体の領域を内部的に節約するだけの機能です。それ自体、 User-Agent に対して完全に透明です。 RAM キャッシュの圧縮は proxy.config.cache.ram_cache.compress オプションで有効化されます。

取りうる値は :

意味
0 圧縮しない (デフォルト)
1 fastlz 圧縮
2 libz 圧縮
3 liblzma 圧縮

RAM キャッシュのサイズの変更

Traffic Server は人気のある小さなオブジェクトを速く取得するために専用の RAM キャッシュを提供します。デフォルトの RAM キャッシュサイズは設定した キャッシュパーティション の数とサイズをもとに自動的に計算されます。キャッシュをプロトコルやホストで区分けした場合、各パーティションの RAM キャッシュのサイズはそのパーティションのサイズに比例します。

キャッシュヒットパフォーマンスを良くするために RAM キャッシュサイズを増やすことができます。しかしながら、RAM キャッシュのサイズを増やしてパフォーマンスの低下 ( レイテンシーの増加など ) に気づいた場合、オペレーティングシステムがネットワークリソース用により多くのメモリーを必要としている可能性があります。この場合は、RAM キャッシュのサイズを元の値に戻すべきです。

RAM キャッシュサイズを変更するには:

  1. Traffic Server を停止
  2. RAM キャッシュのサイズを指定するために proxy.config.cache.ram_cache.size 変数を設定。デフォルト値の -1 はディスク 1 ギガバイトにつきおおよそ 1 MB で RAM キャッシュのサイズが自動的に決まります。
  3. Traffic Server を再起動。RAM キャッシュのサイズを 1GB 以上に増やした場合、trafficserver コマンドで再起動してください (start-traffic-server を参照 ) 。

キャッシュキャパシティの変更

コンテンツをクリアすることなくキャッシュに割り当てられたディスク領域の総量を増加もしくは削減することができます。キャッシュのサイズ ( バイト ) を確認するには、traffic_ctl metric get proxy.process.cache.bytes_total コマンドを実行してください。

キャッシュキャパシティの増加

既存のディスク上のキャッシュに割り当てられたディスク領域の総量を増加させる、もしくは Traffic Server のノードに新しくディスクを追加するには :

  1. Traffic Server を停止
  2. 必要であればハードウェアを追加。
  3. 既存のディスクに割り当てられたディスクスペースの総量を増加させるため、もしくは追加した新しいハードウェアを記載するために storage.config を編集。
  4. Traffic Server を再起動。

キャッシュキャパシティの削減

既存のディスク上のキャッシュに割り当てられたディスク領域の総量を削減する、もしくは Traffic Server のノードからディスクを取り外すには :

  1. Traffic Server を停止
  2. 必要であればハードウェアを取り外す。
  3. 既存のディスクに割り当てられたディスクスペースの総量を削減するため、もしくは取り除いたハードウェアへの参照を削除するために storage.config を編集。
  4. Traffic Server を再起動。

重要

storage.config で、フォーマットされた、もしくは raw ディスクは少なくとも 128 MB なければなりません。

キャッシュの区分け

キャッシュ領域をより効率的に管理し、特定のプロトコル用に異なるサイズで キャッシュボリューム を作成することでディスクの使用量を制限することができます。そのうえ特定の オリジンサーバー やドメインからのデータを格納するためにこれらのボリュームを設定することができます。このボリューム設定は クラスター 内のすべてのノードで同じでなければなりません。

特定のプロトコル用のキャッシュパーティションの作成

プロトコルに応じてコンテンツを格納するために、キャッシュのためのサイズの異なる分割された ボリューム を作成することができます。これは一定のディスク領域が常に特定のプロトコル用に利用可能であることを保証します。 Traffic Server は今のところ HTTP オブジェクト用の http パーティションタイプのみを対応しています。

プロトコルによってキャッシュを区分けするには

  1. volume.config ファイルに作成したいボリュームごとに一行入力

    volume=1 scheme=http size=50%
    volume=2 scheme=http size=50%
    
  2. Traffic Server を再起動。

重要

ボリューム定義はクラスター内の全てのノードで同じでなければなりません。

パーティションサイズとプロトコルを変更する

プロトコルによってキャッシュボリュームを設定した後、いつでもその設定を変更することができます。変更を行う前に次のことに注意してください。

  • キャッシュボリュームのサイズとプロトコルの割り当てを変更する前に Traffic Server を停止しなければなりません。
  • ボリュームのサイズを増加する際は、ボリュームのコンテンツは削除されません。しかし、ボリュームサイズを削減する際には、ボリュームのコンテンツは削除されます
  • ボリューム数を変更する際は、サイズやプロトコルタイプが同じままであってもボリュームは削除され再作成されます。
  • Traffic Server のノードに新しいディスクを追加する際は、割合で指定されたボリュームサイズは比例して増加します。
  • ボリュームサイズの相当な変更はディスクの断片化を起こすかもしれません。これはパフォーマンスとヒット率に影響を及ぼします。キャッシュボリュームサイズへの多くの変更を行う前にキャッシュをクリアすべきです ( キャッシュのクリアを参照 ) 。

オリジンサーバーもしくはドメインによってキャッシュを区分けする

サイズとプロトコルによってキャッシュを区分けした後、作成したボリュームを特定のオリジンサーバーやドメインに割り当てることができます。ボリュームを一つのオリジンサーバーにも複数のオリジンサーバーにも割り当てられます。しかしながら、ボリュームを複数のオリジンサーバーに割り当てると、ボリューム上で各オリジンサーバー用の空き領域の保証はありません。コンテンツは人気度によってボリューム内に格納されます。ボリュームを特定のオリジンサーバーとドメインに割り当てることに加え、一覧に記載していないすべてのオリジンサーバーとドメインからのコンテンツを格納するための汎用ボリュームを割り当てなければなりません。この汎用ボリュームは特定のオリジンサーバーもしくはドメイン用のパーティションが壊れた際にも使用されます。汎用ボリュームを割り当てないと、 Traffic Server はプロキシー限定モードで動作します。

注釈

特定のホストやドメインにボリュームを割り当てる前に Traffic Server を停止する必要はありません。しかし、このタイプの設定は時間がかかり、メモリ使用量のスパイクを引き起こすかもしれません。したがって、トラッフィクが少ない時間帯にパーティション割り当ての設定を行うのが最適です。

ホスト名とドメインによってキャッシュを区分けするには:

  1. 特定のプロトコル用のキャッシュパーティションの作成で説明したように、サイズとプロトコルによってキャッシュボリュームを設定。
  2. オリジンサーバーもしくはドメインに属さないコンテント用に使用する汎用パーティションの追加と同様に、各ホストとドメイン用にプロトコルを基に分割したボリュームを作成。ボリュームは同じサイズである必要はありません。
  3. 各オリジンサーバーやドメインで使用されるボリュームを割り当てるための行を hosting.config ファイルに入力。
  4. ファイルに記載されているどのオリジンサーバーやドメインにも属さないコンテンツで使用する汎用ボリュームを割り当てる。特定のオリジンサーバー用のすべてのボリュームが壊れた場合、Traffic Server は hosting.config によるオリジンサーバーのコンテンツを格納するために汎用ボリュームも使用します。
  5. 設定の変更を反映するためにコマンド traffic_ctl config reload を実行。

キャッシュオブジェクトのサイズ制限を設定

デフォルトでは、Traffic Server はどんなサイズのオブジェクトがキャッシュされることを許しています。次の手順により、このデフォルトの振る舞いを変更してキャッシュ内のオブジェクトのサイズを制限する指定が行えます。

  1. キャッシュ内で許されるオブジェクトの最大サイズをバイト単位で指定するために proxy.config.cache.max_doc_size を設定。 0 ( ゼロ ) を設定するとキャッシュオブジェクトのサイズは無制限になります。
  2. 設定の変更を反映するためにコマンド traffic_ctl config reload を実行。

キャッシュのクリア

キャッシュをクリアすると、キャッシュ全体からすべてのデータを削除します。これにはホストデータベースのデータも含まれます。区分けのような確実なキャッシュの設定作業を行う前にはキャッシュをクリアすべきです。 Traffic Server が動作している間はキャッシュのクリアは行えません。

キャッシュをクリアするには:

  1. Traffic Server を停止 (Traffic Server を停止するを参照 )。

  2. キャッシュをクリアするために次のコマンドを入力

    traffic_server -Cclear
    

    clear コマンドはオブジェクトストアとホストデータベース内のすべてのデータを削除します。Traffic Server は削除の確認を促しません。

  3. Traffic Server を再起動 (Traffic Server の起動を参照 ) 。

キャッシュからオブジェクトを削除する

Traffic Server はキャッシュから特定のオブジェクトを取り除くときのためにカスタム HTTP リクエストメソッド PURGE を受け付けます。オブジェクトがキャッシュ内で見つかり取り除くことに成功すると、Traffic Server は 200 OK の HTTP メッセージで応答します。そうでない場合は、404 File Not Found メッセージが返されます。

注釈

デフォルトでは PURGE リクエストメソッドは localhost インターフェースで受信した時のみ処理されます。

次のサンプルでは、Traffic Server がドメイン example.com 上で動作しており、キャッシュから remove_me.jpg という画像を取り除きたいとします。デフォルトでは PURGE リクエストは他のどの IP からも許されていないので、localhost からデーモンに接続します。

$ curl -vX PURGE --resolve example.com:80:127.0.0.1 http://example.com/remove_me.jpg
* About to connect() to example.com port 80 (#0)
* Trying 127.0.0.1... connected
* Connected to example.com (127.0.0.1) port 80 (#0)

> PURGE /remove_me.jpg HTTP/1.1
> User-Agent: curl/7.19.7
> Host: example.com
> Accept: */*
>
< HTTP/1.1 200 Ok
< Date: Thu, 08 Jan 2010 20:32:07 GMT
< Connection: keep-alive

次に Traffic Server が取り除かれたオブジェクトへのリクエストを受け取ったときは、新しいコピーを取得するためにオリジンサーバーに接続します。新しいコピーは Traffic Server で以前にキャッシュされていたバージョンを置き換えます。

上記の手続きは特定の Traffic Server のキャッシュからオブジェクトを取り除くだけです。もし途中でキャッシュされていたりエンドユーザーの Web ブラウザーによってキャッシュされている場合、ユーザーは古い ( 取り除かれた ) コンテンツを見るかもしれません。

キャッシュの検査

Traffic Server provides a Cache Inspector utility that enables you to view, delete, and invalidate URLs in the cache (HTTP only). The Cache Inspector utility is a powerful tool that's capable of deleting all the objects in your cache. Therefore, make sure that only authorized administrators are allowed to access this utility through proper use of the @src_ip option in remap.config and the instructions detailed in Controlling Access.

キャッシュ検査ユーティリティにアクセスする

キャッシュ検査ユーティリティにアクセスするには :

  1. proxy.config.http_ui_enabled1 に設定。

  2. リバースプロキシーモードでキャッシュ検査機能にアクセスするには、URL にアクセスできるようにするために remap.config にリマップルールを追加しなければなりません。これは @src_ip オプションによって限られたホストに制限されるべきです。アクセスをネットワーク 172.28.56.0/24 に制限するには以下を使用します。

    map http://yourhost.com/myCI/ http://{cache} @action=allow @src_ip=172.28.56.1-172.28.56.254
    
  3. traffic_ctl config reload を実行して Traffic Server の設定をリロードしてください。

  4. ブラウザーを開き、次の URL へ移動。

    http://yourhost/myCI/
    

    キャッシュ検査機能の画面が表示されます。

キャッシュ検査ユーティリティを使用する

キャッシュ検査ユーティリティはキャッシュのコンテンツを見たり削除したりできるいくつかのオプションを提供します。

Lookup URL (URL を指定しての検索)
キャッシュ内で特定の URL を検索します。 Traffic Server がキャッシュ内で URL を見つけると、URL に対応するそのオブジェクトの詳細 ( 例: ヘッダー長や代替の数 ) を表示します。キャッシュからその URL を削除するためのオプションが表示されます。
Delete URL (URL を指定しての削除)
キャッシュから特定の URL に対応するオブジェクトを削除します。削除を試みた後成功または失敗が表示されます。
Regex Lookup (正規表現を指定しての検索)
一つ以上の正規表現にマッチする URL を検索します。
Regex Delete (正規表現を指定しての削除)
指定した正規表現にマッチするすべての URL を削除します。
Regex Invalidate (正規表現を指定しての無効化)
キャッシュ内で指定した正規表現にマッチするオブジェクトを新鮮でないと印付けます。 Traffic Server はキャッシュオブジェクトの有効性と新鮮さを確認するために関係のあるオリジンサーバーに接続し、必要ならばキャッシュオブジェクトを更新します。

注釈

いかなる時でも、一人の管理者だけがキャッシュ検査機能からキャッシュエントリの削除と無効化を行うべきです。複数の管理者による同時の変更は予想外の結果を引き起こすかもしれません。