2016/10/28にioドメインで障害が発生したことを受けて、運営しているサービスで今後どうすべきかを考えてみた。
長くなってしまったので結論だけ書くと、ccTLDではなくて、gTLDを使いましょうということです。
弊社のサービス運用状況
.comで運用しているサービスが1つ、.ioで運用しているサービスが2つ、合計3サービス運用中。
DNS周りは全サービスRoute53を使って運用している。
当日何があったか?
簡単障害の内容を言うと.ioの一部のネームサーバーにおいてDNS名前解決に失敗しており、該当ドメインのサービスにアクセスができないことが発生していた。
※あくまで一部のネームサーバーなので、完全にioサービスがダウンしていたわけではなく、アクセスする度に正しい結果が返ってくることもあった。
今回比較的大きな問題になったのは.ioで運用してるサービスで尚且つサブドメインで運用しているサービス。
運良く(?)メインドメイン(example.io的な)に関して影響が小さかったのはRoute53のNSレコードのTTLが比較的長く設定されていたためだったと思う。
何故大きな問題になったか?
(※便宜的にexample.ioというドメインを使いますが、本来は別のサービスですw)
現象としては、example.ioはアクセスできたが、api.example.ioにはアクセスできなくなった。
理由としてはTTLの時間がネックになっていたと思われる。
具体的には、このサブドメインはRoute53のAレコードのAliasで設定されていた。
このAliasで設定したものはTTLが設定ができずにデフォルトでTTL60秒が設定される。
簡単に言えば60秒毎に名前解決を行おうとする。その時に名前解決が出来ずにエラーになっていた。
逆にメインドメイン(example.io)で大きな問題にならなかったのはこのTTLが長く、キャッシュが使われており、問題となったネームサーバーに名前解決をする頻度が少なかったからだと思われる。
対処方法は何を考えたか?
-
iPhoneアプリで使ってるAPI先を複数用意して切り替えられるようにする
→申請が必要なため早急に修正-デプロイというフローを取ることができなかったため対応はしないことにした。 -
該当のサブドメインのレコードにTTLを設定する
→AliasだとTTLの設定ができず断念
当日の対応と今後について
そうこうしていたら復旧してきたので今回に関しては特別何か対応はしていない。
そして今回の問題に関して、AWSに相談してみた結果、以下のような回答を頂いた。
- そもそもccTLDよりgTLDを使いましょう。何故ならgTLDはICANNとの契約上、SLA100%保証している。
- AliasだとTTLが設定できないから、やるならCNAME使ってTTL設定しましょう。但し今回みたいに参照時に問題発生してたら意味ないよ。AliasとCNAMEの違いはこちらとかを参考に。
今回学んだこと
- 今まであまり気にしてなかったccTLDとgTLDの差
- CNAMEとAliasの差
- サービス運用という観点だと、ccTLDよりもgTLDで運用した方が良さそう(かっこいいから、最近の流行りだからって理由でccTLDを使わないほうがよさそう・・)