先日、タイの仕事をやる機会があって、無事納品しリリースという段階になったのですが、最後の最後で罠が待ち受けていました。
今回はこんな感じの構成でのリリースを検討していました。
- リニューアルに伴い、サーバを移転する
- 新サーバにすべてのソースコードおよびデータが整ったら、hostsを切り替えて確認する
- 確認して問題なければ、ドメインにひも付けてあるネームサーバを切り替える
よくあるパターンですよね。このやり方だと、サービスが停止することがないため安心です。
僕の手元ではhostsの切り替えによる稼働を確認して、あとはネームサーバーの切り替えだけだわいとなったんですよ。
残る作業はお客さんに連絡して、Skypeで「こうやってhostsファイルを編集してください」って説明して、あとは「ほらできてるでしょ?」とドヤるだけ。ところがどっこい、いざ開いたら、なんとこんな感じに!
スタイルシートおよび画像がほとんど出てこないんですね。こちらのMacではちゃんと表示されているんですよ。でも、お客さんのPCでは明らかに出ていないんですね。
はてなんでだろうと不思議に思ったのですが、以前も「CSSがまったくぜんぜん更新されない」という事案が発生して、理由がよくわからなかったということがあったのですが、こんな仮説を立てました。
- もしかして、ISP(インターネットサービスプロバイダ)が回線節約のために、静的リソースなどをキャッシュしてるんじゃないの?
- で、hostsの書き換えを行なっても、画像とかCSSは旧サーバに見に行ってるんじゃないの?
では試してみようということで、次のような実験を行いました。
- 旧サーバに中山きんにくんの画像をtest-img.jpgとしてアップロード
- 新サーバに堀北真紀をtest-img.jpgとしてアップロード
期待する結果
- http://example.co.th/test-img.jpg で画像が表示される
- hostsの切り替えを行った場合、堀北真希が表示される
- hostsの切り替えをオフにすると、中山きんにくんが表示される
- 仮説(タイのISPがキャッシュしてる説)が正しかった場合、顧客のPCでだけ常に中山きんにくんが表示される
実際の結果
日本 | タイ | |
---|---|---|
hostsあり | 堀北 | きんにくん |
hostsなし | きんにくん | きんにくん |
どっちみちきんにくんやないかい!
というわけで、やはり仮説通り「ISPが静的リソースをキャッシュしている」ということになりました。hostsの書き換えを行なっているにもかかわらず旧サーバを見に行くということは、ネットワーク上のどこかであらためて名前解決を行なっているんですかね。
感想
日本のプロバイダ使っている限りはそんなことあんまりなくて、むしろキャッシュする方がめんどくさいんじゃないかとすら思うのですが、そうでもないんですかね。
確かに、タイみたいな新興国だとインフラもまだまだ整っていないので、そういう工夫もありなのかなあ、と思いました。
ただ、環境再現性が皆無な上、客の前に出して初めてわかる問題だったので、ちょっとびっくりしました。もしかしたら他の新興国でも同じような状況かもしれないので、海外の仕事をするときは気をつけて下さい。終わり。
[429] [429] Client error: `POST https://webservices.amazon.co.jp/paapi5/getitems` resulted in a `429 Too Many Requests` response: {"__type":"com.amazon.paapi5#TooManyRequestsException","Errors":[{"Code":"TooManyRequests","Message":"The request was de (truncated...)