[CDN][Cloud] AzureCDNをマストドンに適用してみる

技術のお話し

実は

あまりうまくいってません。キャッシュ検査がなされないようで、「高速化」という意味合いでいうと、少し微妙な感じです。
とは言え、とりあえずCDNを通じてアクセスできるようにはなりましたので、載せてみることにしました。

この手順を真似て「うまくいかないじゃないか!」とか言われても困るので、とりあえずご了承を。

さて、何をしたかと言うと、自宅マストドンインスタンスにAzureCDNを思いつきで適用してしまったというお話です。

概要

配信元の設定について

設定の流れとしては、過去の記事と同様です。ので、こちらをご覧ください。

[BLOG] CDN乗り換え

おさらいになりますが、注意ポイントとしては上記の通りになります。特にHTTPアクセスする場合は、そのリクエストはそのままHTTPで渡され、HTTPSアクセスする場合はそのリクエストはそのままHTTPSで渡される点は意識したほうが良いのかなとおもいます。

Verizon Premiumという選択肢

今回、私は奮発をしまして、プランにVerizon Premiumを選びました。と言うのも、実は「Verizon Standard」と「Microsoft Standard」という二種類のエンジンを使っており、当ブログに適用していたわけですが、実際のアクセス統計を取るにはStandardプランは若干機能が弱く、Premium版も試したいということで、思い切ってこのシステムに切り替えた感じです。

当方西日本リージョンを使っており、Standardは18円/GB、Premiumは28円/GBとなっています。この時点ですでに、ブログサイトはPremiumプランへの切り替えを済ませており、既存プラン内でCDNを適用させたかったというのが実態です。

さて、Verizon Premiumではキャッシュ規則の定義方法がStandardプラント大きく異なり、かなりきめ細かく設定をすることが可能です。

Standardプランでは、「キャッシュ規則の定義」と言うメニューから、全体の設定・キャッシュ保持期間、あとパスに対する簡易的なポリシー定義が行なえます。

Premiumプランは全くの別物で、ツール自体が別になり、「ルールエンジン」というもので設定を行います。それが下図です。

また、Verizon Premiumでは、レポート機能が大きく違い、よりアクセス元の確認がしやすくなっています。

Worldmap

どのファイルへアクセスしたのか、どのブラウザでアクセスしたのか、アクセス元の国は何処かなど。特にキャッシュ比率が高い場合に、オリジン側のログにその形跡が渡されているのかとか、そういうところの確認をしようと思ったらこちらは圧倒的に便利だと思います。

様々なグラフ

挫折ポイントいくつか

で、今回もご多分にもれず、いくつかハマりポイントが有りました。具体的には下図のとおりです。

特にStreamingが有効にならなかったのは致命的で、これは流石にトラブルシュートを行っています。実際の内容は上記に記載してるのですが、STREAMING_API_BASE_URLを設定することで、以下のような動作に変わります。

これにより、WebClientを通じたアクセスに関しては、正常にStreamingが行われるようになりました。応答は以下のように変化しています。

が、残念ながらコレで完治というわけには行かず、実はサードパーティー製のアプリでは正常にStreamingが動作しません。とあるMastodon対応アプリ開発者の方が困ってたところをお声がけくださり、お言葉に甘えて相談してみました。Nginxに出力されたログ情報を参照してもらったのですが、恐らくは「STREAMING_API_BASE_URL」の仕様を誰もが想定していないだろうとのこと。
本来、Mastodonの動きとしては、Websocketコネクションを張る際にどこのURLへ接続すればよいのかインスタンスにお伺いを立てるそうです。で、その応答内容に従ってWebsocketコネクションを改めて張りに行くらしいのですが、そもそもそういうパターンってほぼ皆無のようで、Websocket接続で使うFQDNは大元のFQDNと同じという考えで作られてるのが大半じゃないか?とのことでした。

なるほど・・・・良い勉強になりました。
実は、AzureCDNを適用させるための手順をWebに探し求めたりもしていたのですが、ほとんど情報がなく、確かにCloudFlareやCloudFrontを使用している構成例もあったんですが、その殆どがオブジェクトストレージとの連携であり、おそらく自分の組み方はあまり王道とは言えないんだろうなー・・と思いました。

で、私から下した結論としては「私がWebClient使えば済む話だ」ということでした。

  • まずこのインスタンスが私の個人インスタンスであること
  • コレに無理やり対応していただいたとして、アプリ開発者の方々にとってメリットが有るか?というとあまりそうは思えない
  • でもそのくせ、この影響はでかいし、結構な人に迷惑がかかるだろうなぁ
  • CDNはこのまま使い続け、トラフィックやクライアントの傾向分析をしたい
  • この不具合が他インスタンスに影響することも特になさそう

ひとまず祝:CDN適用完了ってことで

完成・・とはなかなかいいにくいですが、とりあえず普通に私が遊ぶ文には、CDN適用でき、レポートも出せるようになったので、万々歳です。残す課題としては、ルールエンジンの設定があまり良くなかったようで、現状Mastodonのコンテンツはすべてキャッシュバイパスされてしまっています。

引き続きルールエンジンとにらめっこしながら、このあたりは修正していきたいなと思います。

ちなみにMastodonインスタンスを適用する前後のグラフが取れてるので載せておきます。

地味に転送量が増えてるのがわかるかと思います。現状、それなりにでかい転送量を記録していて、なんぼかコンテンツがキャッシュされたら嬉しいんだけどなーと思いながら、様子を見守っています。

Tags:

Comments are closed

PAGE TOP