Nginx Helper 2.0.1でコメント時にパージが動かない。

Nginx Helperで個別記事のキャッシュをパージできない。 – return $lock;
これとは別の問題です。2.0.1の段階でコメントがついた時に個別記事のパージが動かなくなりました。前回とは異なり、個別記事のURLは正しいようです。

バージョンアップの度に動かなくなることが多いプラグインのため、以下から適当に1.9系のバージョンを持ってきたところ動作しました。やはり2.0.x系に問題がありそうです。修正されるまでバージョンアップはなしで運用かなと思います。
Releases · rtCamp/nginx-helper · GitHub

調べてみると同じ問題に当たっている方がいて、やはり1.9系に戻してるようです。
Nginx-Helper で上手いことキャッシュのパージが行われない問題 | ぶっちろぐ

某飲食店予約システムのインフラ構成を予想したい。

インフラのイの字もわからないのにインフラ系のことをせざるを得ない状況になっており、勉強のために某飲食店予約システムのインフラ構成を予想しようと思いました。ピンクくて丸いやつ向けです。

注意

記事の内容は、野球の試合をテレビで見ながらイチャモンをつけるおっさんくらい薄く、知識量に比例して正確性は皆無です。インフラをわかってない人が頑張るとこういう予想にたどり着くんだね、という参考にはなるかもしれません。

参考にしたページ

とりあえず情報を集めます。

トレタのインフラ運用、支えている道具(Packer, Terraform, Serverspec, Ansible, Roadworker, Circle CI)、考え方 – トレタ開発者ブログ
トレタのインフラ運用 – Speaker Deck
トレタのMySQL MySQL casual #8
記事が結構古いからだいぶ変わってそうですね。どっかに答え載ってるんじゃないかと思って開発者ブログを見てみたけど最近の記事はなかった…。SlideShareとかにはあるのかもしれないですね。

うっす~いよそう

実際に使ってみてのエラーの返り方やレスポンスの感じだと以下のような構成でしょうか…?

  • サーバ:Amazon EC2
  • ロードバランサ:ALB?NLB?
  • バックエンド:Ruby on Rails
  • DB:Amazon RDS for MySQL
  • 静的コンテンツ(json等):CloudFront
  • 静的コンテンツ(画像等):Amazon S3

default backend – 404(多分Nginx Ingress Controllerのデフォルトバックエンドのレスポンス)が時たま返ってきたことから予想すると、おそらくRoRはKubernetesのPodで動いてるかもしれません。AWSを使ってるなら、GKEを採用しているのかなぁと予想しました。(リバースプロキシもIngressを使用)

実際の挙動からのうっす~いよそう

予約用の内部APIは予約対象の店舗のIDごとに処理する仮想サーバが決まっているわけではないようで、一店舗に予約処理が集中すると他の店舗のリクエストも応答しなくなるという挙動でした。(実際、先月はそれで巻き添え食らったところが落ちていた)
EC2使ってるならスケールアウトするか、予行演習で前もってやばいのはわかってたので、ピンクいやつだけL7ロードバランサでRDSもRoRも専用のインスタンスに処理させるとかいくらでも手は打てたと思うのですが、どうしてこうしなかったのかはよくわかりません。

以下を読んだのですが、ELB自体は5万RPSかけても受けきれるっぽいのと、API叩いたときに502 Bad Gateway返ってきてたので、Ingress Controllerまでは問題なくて、バックがボトルネックになっているのかなぁと思いました。(小学生並みの感想)
[社内勉強会]ELBとALBと数万スパイク負荷テスト

感想

やっぱりよくわからない。

metabaseを日本語化するとバグりすぎてつらいので英語のまま使う。

metabase v0.30.3の話です。コントリビューターの方々には本当に申し訳ないのですが、日本語化すると表示周りのバグのせいでビジュアライゼーションの種類が選択できなくなるのと、翻訳がめちゃくちゃで使い勝手が著しく悪くなるので、英語の状態のまま使用することにしました。 
ビジュアライゼーションの種類が選択できなくなるのは、ブラウザのDeveloper Tool等で要素を書き換えれば回避可能です。issueにはすでに上がっていました。

ここを書き換えれば選択可能になる

対策案

  1. metabase.jarをいじる
  2. リバースプロキシ(nginx)の設定でaccept-languageからja-JPを消す

metabase修正するのはできるけど、バージョン上がっても治ってなかった場合に同じことを繰り返すのがつらいので、リバースプロキシ(nginx)でどうにかします。

proxy_hide_header accept-language;
proxy_set_header accept-language "en-US,en;q=0.9";

無事英語のダッシュボードが表示されるようになりました。

metabaseの設定画面で一瞬でもLanguageにトルコ語(Turkish)を選択すると詰む。

500エラーで詰んだ。

???? "SETT?NG" ????????
Table "SETT?NG" not found. SQL statement:
SELECT * FROM "SETT?NG" WHERE ("KEY" = ? AND "VALUE" > ?) LIMIT 1 [42102-197]

バージョンはv0.30.3です。
最初何が起こったのか全くわかりませんでしたが、エラー内容的に言語設定があやしそうだったので、 metabase.db.mv.dbの中身を直接見て、SETTINGのsite-localeをen-USに設定したら無事に復旧しました。
ゆとりなので修正にはGUIのH2 Consoleを使用しました。あと、DBのIDとPWはそれぞれ空文字でした。

issueにはすでに上がっていました。
Table Not Found – Wrong table name with locale characters · Issue #8565 · metabase/metabase

翻訳しなくてもいいところが翻訳されまくっててわかりにくいので英語に戻したいんですが、ブラウザのロケールで強制的に言語が決まってしまうので大変に辛いです。

インドのプネーでAISのSIM2Flyを使ったみた雑感とか。

仕事でインドのプネーに1週間ほど滞在していました。
Pokemon Goでどうしてもサニーゴを捕まえたかったのと、人とコンタクトをとる手段(主にLINE)が使用不能になると命に関わりそうだったので、事前にAmazonでSIMを購入しました。

使用感

インドだとAirtel回線を使用して繋ぐことになります。使用感ですが、特に問題なく繋がり問題なく使えました。が、4G回線でも遅い気がしました。LINEでもテキストメッセージは問題なく送信できるけど、写真は厳しいといった状態ですね。Amazonのレビューにもある通り、バスでの移動中に時たまエラーで繋がらなくなったりしましたが、機内モードから戻すと掴んだので許容範囲かなという感じです。いつでもどこでもスマホでネットが使える日本のインフラに感謝の気持ちがわきました。

ハードとの相性とか

nexus5, nexus5x, zenfone3, nova liteで試しましたが、nexus5とnexus5xでは2G回線しか掴まないか、接続時にエラーが出て(アンテナのアイコンに×マークが付く)ほぼ使い物にならない状態だったので、このSIMを使用して5と5xをインドに携帯するのはおすすめできません。LGのハードに問題があるのかもしれませんが、はっきりとした原因は不明です。5も5xもどっちも使えなかったのでOSの問題ではない気がします。他の機種では問題なく使えました。iPhoneはわかりません。

インド行った感想

バスで走ってるといたるところにAirtelのお店があってインドすげーなーと思いました。サニーゴは滞在最終日にバスで空港に向かってる途中で根性で捕まえました。全然出てくれなくてだいぶ諦めてたのでめっちゃうれしいです。
Phoenix Market Cityにちょっとだけ寄ったのですが、Pixel2の展示会やってました。触ってる暇がなかったのは残念でした。買って帰ろうかなーと思ったのですが、インドで買っても普通に高い(日本円で8万くらいする)のでやめました。

Pixel2の広告

道路状況が本当に最悪(しぬほど揺れるのとスピードブレイカーの凸段差で酔う)なのと、運転手が普通にアホみたいにスピード出すので死ぬかと思いました。道路に牛も人も普通に突っ込んでくるしバイク乗ってる人ほぼ全員ノーヘルだし車線は存在しないし信号はないしとにかくやべえ。現地の人曰く、プネーはまだましで、デリーが最高にクソらしいです。これ以上クソだったらほんと死ぬのでデリーは行きたくないなと思いました。
あと、滞在最終日の朝にnexus5xが突然うんともすんともいわなくなってブートローダーすら起動しなくなりました。LG製品はもう二度と買いたくないです。