[和訳] Cookbookキャッシング #getchef
この記事は1年以上前に投稿されました。情報が古い可能性がありますので、ご注意ください。
本稿は Cookbook Caching (2015/02/18) の和訳です。
chef-server.rb設定ファイルのopscode_erchef['s3_url_ttl']でCookbookのS3 URL TTLを設定しているなら、「現在」(すなわちリクエストの時間)から長時間(デフォルトでは28800秒)の期限付きCookbook URLを作成します。それはChef Clientの実行にとって都合がよいですが、キャッシングにとってよくありません。
それぞれの署名付きURLは期限付きのクエリ文字列を持っています。これはつまり、毎回署名付きURLが生成され、それはユニークであるということです。URLをキャッシュしたければ、URLが頻繁に変更されない必要があります。
Chef Server 12.0.4では、opscode_erchef['s3_url_expiry_window_size']という新しい設定を導入します。え、こんなのいらない? それならこれに:offを設定してブラウザのタブを閉じてください(正直言って、あなた、タブ開きすぎですよ)。実際には:offがデフォルトなので、何もしなくてよいです。
もしURLの唯一性を低くしたいならば、s3_url_expiry_window_sizeをURLがユニークであるべき時間の長さに設定できます。例えば、"15m"に設定してみましょう。そうすると、生成された各URLは15分の間同じになります。代償として、リンクは実際にはs3_url_ttlで設定した期限より少し長く、15分より長くありません。
s3_url_expiry_window_sizeをs3_url_ttlの割合として設定することもできます。デフォルトの28800(8時間)で、s3_url_expiry_window_sizeの値を"10%"とすると、48分の期間となります。
次は"15m"設定の進捗です。
各文字はユニークなURLを表します。大文字はURLが最初に現れた時間です。1:03に生成されたURL Aを見てください。2:15が期限として設定され、1:15まで小文字のaで表されています。
1:15になると新しい区間に入り、1:25までURLを取得しようとしません。1時間に区間の残り時間を足した2:30を期限として設定します。
誰もURLに問い合わせないまま1:30を迎えた後、URL Bは一度だけ用いられて二度と問い合わせされません。あれれ。賭けをして時間を無駄にしました。でもこれが世界の終わりというわけではありません。
1:33で、URL Cが生成されて区間中に何度も使われているので、この機能がうまく働いています。
もうおわかりですね。要求されたすべてのURLに対して新しい期限を設定する代わりに、1日を通して96回だけユニークな期限を生成することになります。
さて、15分は最適な期間ではないかもしれません。"60m"にすると1日に24回だけユニークなURLを生成します。これが設定可能にした理由です。
もしF5ロードバランサーを持っていたり、NginxにCookbookのコンテンツをS3やBookshelfから得る代わりにキャッシュを扱わせたいなら、そう、今ならできます!
s3_url_expiry_window_sizeを有効にした後、他にもやることがあります。CookbookのキャッシュにNginxを使うなら次のようにします:
opscode_erchef['nginx_bookshelf_caching'] = :on
こうすると、NginxはリクエストをS3やBookshelfに転送する代わりにキャッシュしたコンテンツを扱うようになります。もしF5や他のロードバランサを使っているなら、次のようにして無効にします:
opscode_erchef['nginx_bookshelf_caching'] = :off
これでロードバランサがキャッシュしたコンテンツの面倒を見るようになります。