7月の運営状況について

親愛なる友人各位へ

こんにちは、 Team Best Friends の @rosylilly です。業務多忙につきお知らせが遅れて申し訳ありません。7月の運営状況についてお知らせします。

収入状況

現在、93人の Birds に支えられて、月 $628 の収入を予定しています。全体としては減少傾向なのですが、今のところ増費用に対して無理ないペースで推移しています。

皆さんの支援に、心からの感謝を捧げます。本当にありがとう。

費用状況

7月のサーバーコストは結果的に $416.53 で着地しました。

サービスの成長に伴って各種コストが増加傾向にあるのですが、基本的にはそこまで爆発的な増加は見込んでいません。ただ、通信量の増加により ElastiCache(Redis)のスケールアップ(性能向上)を実行したため、来月度からはその点の費用感が向上する可能性が高いです。

EC2 間のネットワークコストが馬鹿にならない量になってきたため、もしかすると安定性を犠牲にしてすべての EC2 インスタンスを 1 AZ に配置する戦略を実行するかもしれません。その際はメンテンス情報として先んじてお伝えしますので、ご理解いただけますと幸いです。

コストのすべての明細はこちらからダウンロードして頂けます。

開発状況

とくにこれと言った開発はなく、数日前に v2.9.3 にアップデートしたぐらいでしょうか?(それも8月にはいってのことなので、7月には特にこれといって)

インフラ周りは変更があったのですが、表に見えないところなので、すこしわかりにくいかもしれません。

  • データベースの容量を自動拡張するように変更
  • sidekiq の並列実行数を 20 から 40 まで拡張。
  • 外部からのメディアでメモリ不足を起こすことが偶発していたのでメモリを増設
  • 重要度の低いログの送信を停止
  • ロードバランサーがヘルスチェックを実行した際にヘルスチェックのしすぎでアタックとみなされて接続を絶たれる障害の解決
  • サーバーボットが @server latency [queue] でキューのつまり具合を報告するようになりました
  • elasticache を t2.micro から t2.medium に差し替え

すこし面白い(面白くない)出来事としては「ロードバランサーがヘルスチェックを実行した際にヘルスチェックのしすぎでアタックとみなされて接続を絶たれる障害の解決」の点で、これは何が起こっていたかについてすこし解説します。

通常、ロードバランサー、つまりみなさんからのリクエストを振り分けて各サーバーに渡してくれる部分は、自分に紐付けられたサーバーがきちんと動いているか?を確認するため、指定されたパスにリクエストを実際に送って、期待する応答がくるかを検査します。これを属にヘルスチェックといいます。

当然、ヘルスチェックは「すべての」ロードバランサーから行われるわけですが、Best Friends では可用性のため、4つの Availability Zone にロードバランサーを配置しています。つまり、4台のロードバランサーが一度に一つのエンドポイントにヘルスチェックを実行します。

この際、いままで利用されていたヘルスチェック先は /api/v1/instance だったわけですが、このエンドポイントはインスタンス情報を返す API です。そう、API へのリクエストは Mastodon のシステムにより、『短時間で大量のアクセスが来た場合ブロック』します。

何が起こったか、ご理解いただけましたでしょうか?そうです。Best Friends Mastodon はロードバランサーをブロックしました

ロードバランサーは当然ブロックされているのでリクエストが正常に実行出来ず「こいつはダメなので捨てて、新しいサーバーを作ったほうがいい」とサーバー管理をするシステムへ伝えます。

サーバー管理システムはロードバランサーを全面的に信用するので、そのサーバーを問答無用で停止、削除。哀れサーバーくんは爆発四散。新しいサーバーくんは『寝起きにいきなりめちゃくちゃ API 叩いてくる BAN リストにあるやつ』を問答無用で叩き返します。ロードバランサーは激怒した。仕事もせぬサーバーなど朕には必要ない。その首いますぐ叩き折って……

という具合で、サーバーが起き上がっては即死するという愉快なループに陥りました。これを業界用語で腹筋といいます。ひとつ勉強になりましたね。

現在はアクセスが集中してもブロックされないリクエストパスをヘルスチェック先にしているので、この腹筋問題の再発は当面ありえません。設定ミスによりご迷惑おかけしたこと、深くお詫び申し上げます。

最後に

レポートの公開が遅れてしまったことをお詫び申し上げます。また、開発報告も特になく、障害のおもしろ小話になってしまってすいません……

日々頂いている通報などは適宜処理しており、喫緊の連絡等であれば DM 、リプライをいただければ(DM の方が流れなくて安全です)反応できるようにはしているので、何かあればお気軽にご相談ください(タイムラインにいなくても DM は通知を受け取っています)。

今後とも Best Friends をよろしくおねがいします。それでは、またタイムラインでお会いしましょう!

Tier Benefits
Recent Posts