アイマストドン通信 (β) 2018/09/27

アイマストドンの皆様

 

おつかれさまです、フサギコです。

本記事では、アイマストドンがこれまでに行ったインフラ改善の取り組みについてご報告します。

 

AMI生成のpacker化

アイマストドンは構築当初よりAWSのAuto Scaling Groupという機能を用いて運用しています。

 

Auto Scaling Groupを使う事によって負荷に追従した台数だけを起動することによる余計なコストの削減や、随時新しいサーバに入れ替わることで不安定になることを回避しているわけですが、Auto Scaling Groupを使うにあたって必要となるAMIと呼ばれるものはしばらくの間、最初に作ったものへの継ぎ足しで作っており、どのような設定をしたのか完全には管理しきれていない状態となっていました。

 

この問題に対しpackerというツールを使うことで、作成手順が全てコードとして書き起こされ、3月下旬以降は何が入っているのかを管理できるようになっています。

 

この話については7月7日に開催されましたIM@S Engineer TalksのLT枠で発表しており、その際のアーカイブを下記のURLから見ることが出来ます。
https://www.youtube.com/watch?v=UvN8M3QzE08&t=3h18m50s

 

画像用S3バケットの東京リージョンへの移動

アイマストドンは費用削減のため、世界各地に存在するAWSのリージョン(厳密には違いますが要するにデータセンター)のうち、us-west-2(オレゴン)リージョンにて運用しています。

 

構築当初は画像が記憶されているS3と呼ばれるサービスもリージョンをオレゴンに指定し使っていたため、大きな画像を見ようとした際にダウンロードが遅く、長く待たされてしまうという問題がありました。

 

これに対してはまず、2017年5月31日ごろに日本国内にキャッシュサーバを設けることで2回目以降は短時間で表示できるようになっていましたが、それでも初回表示は時間がかかってしまう状態のままとなっていました。

 

8月11日にS3バケットのみを東京へ移し、初回表示も待ち時間が短く表示できるようになりました。

 

画像をアップロードする際はまだ遅いという問題が残っていますが、これを解消するためにはアイマストドンを丸ごと東京に移すしか方法がなく、仮に移すとした場合は月額の費用が概算で1.5倍程度になってしまうため実行できていない、というのが実情です。

 

WebAppサーバとSidekiqサーバの分離

マストドンは、AWSに任せられる(正確には、アイマストドンが任せている)部分を除くとnginx、node.js、puma、sidekiqという四つの部分に概ね分けることができます。

 

インターネットからのアクセスをnginxがpumaとnode.jsに振り分け、pumaが新規投稿の受付や初回表示時のTLをまとめて取得する部分、設定画面などを、node.jsが投稿のリアルタイム配信を担当しています。

 

sidekiqは、pumaが受け付けた新規投稿を配信する処理を始めとしたマストドンの様々な処理(ジョブ)を、ジョブが発行されたそばから順次、可能な限り速く処理しています。

 

これまでアイマストドンは費用削減のため、これらのnginx、node.js、puma、sidekiqを同じサーバ内で同時に起動していました。

 

そのため、アイマスライブの終了直後などの負荷が急激に高まった際にsidekiqのジョブが山積みとなり、そちらにCPUを取られた結果pumaの処理が遅くなって新規投稿や閲覧がしづらくなるときもあるという問題がありました。

 

9月9日ごろにnginx、node.js、pumaを起動するサーバのAuto Scaling Groupと、sidekiqを起動するサーバのAuto Scaling Groupを分けることで、そのような問題が起こらないよう改修しました。


インフラのterraform管理化

上のほうでAMIが最初に作ったものへの継ぎ足し状態でコード管理されていなかったと書きましたが、
これはアイマストドンのインフラ構成、すなわちAuto Scaling GroupやRDS(データベース)などの設定も同じ問題を抱えています。

 

これに対しては8月11日のS3バケット移行を皮切りに順次、terraformというツールの管理下へ取り込みを行っています。

 

先に書きましたWebAppサーバとSidekiqサーバの分離はこのterraform管理化を進めていたために実現出来たものでした。

 

とはいえ全てがterraformの管理下に取りこめたわけではなく、個別の説明は省きますが現時点での未取り込みならびに取り込み済みの項目は下記の通りです。

 

  • 取り込み済み
    • VPCおよびサブネット
    • セキュリティグループ
    • 画像用s3バケット
    • Auto Scaling Group(Sidekiq)
    • 起動設定(WebApp, Sidekiq)
  • 未取り込み
    • Auto Scaling Group(WebApp)
    • ELB
    • Routes53
    • RDS
    • Elasticache
    • cloudwatch
    • IAM

未取り込みのものについても順次取り込んでいく予定です。
その際に短時間の停止メンテナンスなどが発生する可能性もありますが、必要となった際には随時@imastodonでお知らせしますので、ご協力をお願いいたします。

 

各種アラートのLINEへの通知

これに関しては単純にやってみたかっただけという部分が大きいのですが、Auto Scalingによるサーバ台数の増減、WebAppの中に調子が悪いサーバがある、などの通知をLINEへ送信し、LINEで見れるようにしてみました。

 

「WebAppの中に調子が悪いサーバがある」などはアイマスライブ終了直後以外はほとんどの場合安定しているアイマストドンでは滅多に発報されることがありませんが、Auto Scalingによるサーバの増減は毎日順調に通知されることを確認しています。

 

書いたコードはhttps://github.com/takayamaki/aws-sns-line-notifyに公開しています。

 

さいごに

一個人でこの規模のサービスを運用している割にはサービス断が少なく安定しているかのように見えるアイマストドンですが、
本記事でご報告しましたようにその裏では思ったよりは様々な改善、改修が今も行われています。

 

引き続き、皆様のご支援賜りますようお願い申し上げます。



報告する

2
≪ 前の作品 作品一覧 次の作品 ≫
Twitterでシェア!



"フサギコ" is creating "imastodon.net"
imastodon.netを構築、運用しています
フサギコ is creating imastodon.net

imastodon.netを構築、運用しています
お支払い方法
 クレジットカード
 銀行振込
 楽天Edy決済
 デビット&プリペイドカード(Vプリカ等)
  支援はいつ開始してもOK!
  Entyで支援すると約1.5倍以上オトク!
詳細