GCEのデータ転送量が思いの外高くなるので対策して転送量を半減させました。
目次
GCEはデータ転送量の課金がある
Google Compute Engineですが、インターネットに配信するデータ量に応じて課金があります。
お名前.com VPSからGoogle Compute Engineにサーバー移行した その1 | A-tak-dot-com
たとえば通信料はだいたいGCEから外に出て行くのが1GBあたり$0.12とか
1GBあたり$0.12とかですが、うちみたいに写真が多いサイトだとなかなか馬鹿にならない。2015年10月の実績では$13.78もいってます。勉強も兼ねているとは言え、個人で運営しているサイトだとなんとか費用は抑えたいところです。
GCE以外から画像データを配信しよう
GCEからの配信にお金がかかるならば、GCE以外から画像は配信すればいいじゃない。パンがなければケーキを食べればいいじゃない。
そこで思い出したのがPhoton。
WordPressのJetspackというプラグインの中の機能として「Photon」というものがあります。これはCDN(Contens Delivery Network)という仕組みをWordPressに簡単に使えるようにしてくれるプラグイン。
CDNとは何かというとコンテンツをエンドユーザーに近いサーバーから効率的に配信する仕組みです。
ここでミソなのが、CDNのキャッシュサーバーが大本のGCPのサーバーからコンテンツを取得して各ユーザーに配信するので、GCPに立てたサーバーからデータが配信されるのはキャッシュサーバーがキャッシュする時のみ。一度キャッシュされれば、キャッシュが破棄されるまではデータが配信されないので、GCPのデータ転送量が削減されるというわけ。
本来は一カ所のサーバーからコンテンツ配信すると負荷が集中して表示が遅くなったりするのを緩和するために使うのですが、今回は通信料の削減に役立てようという作戦です。Photonは無料で使えます。
どれぐらい画像の直接アクセスが減ったか?
実績値を測ってみました。nginxのアクセスログをBigqueryに流し込んでいるので、Bigqueryで集計してみた。
サブクエリ使って長いけど、こんなの流した。
SELECT
log_date,
access_count,
jpeg_count,
jpeg_count / access_count AS rate
FROM (
SELECT
DATE(TIMESTAMP(metadata.timestamp)) AS log_date,
COUNT(textPayload) AS access_count
FROM (TABLE_DATE_RANGE(log.nginx_a_tak_access02_,TIMESTAMP('2015-11-21'), TIMESTAMP('2015-12-01')))
WHERE
textPayload NOT LIKE '%GoogleHC%'
GROUP BY
log_date
ORDER BY
log_date) AS all
INNER JOIN (
SELECT
DATE(TIMESTAMP(metadata.timestamp)) AS jd,
COUNT(textPayload) AS jpeg_count
FROM (TABLE_DATE_RANGE(log.nginx_a_tak_access02_,TIMESTAMP('2015-11-21'), TIMESTAMP('2015-12-01')))
WHERE
textPayload NOT LIKE '%GoogleHC%'
AND textPayload LIKE '%.jpg%'
GROUP BY
jd
ORDER BY
jd) AS jpeg
ON
all.log_date=jpeg.jd
日付毎に分割されたテーブルをTABLE_DATE_RANGEでまとめて、GoogleHC(ヘルスチェック)のログを除外してトータルのリクエスト数を測った。合わせて今度は.jpgのリクエストの数も並べて、トータルリクエスト数とjpgへのリクエスト数の比率も出した。
23日からPhotonを有効にしている。
log_date | access_count | jpeg_count | rate |
---|---|---|---|
2015/11/21 | 65,068 | 28,578 | 44% |
2015/11/22 | 64,518 | 27,929 | 43% |
2015/11/23 | 53,243 | 14,991 | 28% |
2015/11/24 | 44,926 | 10,114 | 23% |
2015/11/25 | 38,888 | 8,905 | 23% |
2015/11/26 | 36,227 | 7,553 | 21% |
2015/11/27 | 36,649 | 7,689 | 21% |
2015/11/28 | 40,790 | 9,373 | 23% |
2015/11/29 | 38,554 | 8,153 | 21% |
2015/11/30 | 40,182 | 7,738 | 19% |
2015/12/1 | 30,533 | 6,113 | 20% |
Photonを有効にする前の22日まではjpgファイルへのリクエストが総リクエスト数の40%ぐらいだったのが、Photonを有効にした23日以降は28%まで下がっている。24日以降はキャッシュが十分に行われたのかおおむね20%程度にまでなっている。まさに半減。
指先一つで半減
PhotonをWordPressの管理画面で有効にするだけで転送量半減します。GCEやAWSを使ってWordPress運用されている方はお試しあれ。
[追記]
一つ難点があるとすれば画像パクりの対処が意味がなくなる。
Photonにより画像のリンク先がPhotonのサーバーに変わるので、自前のサーバーに直リンク対策しても意味がなくなる。まぁ、直リンクによる無駄なトラフィックは関係なくなるから、まぁよいか。