StagramakerのサーバをVPSに移転しました

昨夜のStagramaker(スタグラメーカー)のメンテナンスでサーバ移転を行いました。

年明けくらいからデータベースのデータ量がものすごいことになってきて、パフォーマンス低下が目立つようになっていたので、不要データの削除やアルゴリズムの改善など、対処療法的にチマチマと対策してなんとかしのいでいたのですが、抜本的な対策をしないと限界点に到達するのも時間の問題ということに。

開設当初はInstagramの成長スピードを甘く見積もっていたので、まさか1年足らずでこんなすごい規模になるとは思っておらず、データが膨大になった時のことをそれほど想定していなかったというのもありますし、僕がよく練らずにつけた機能のせいで無駄なデータが大量に作られていたとか… とにかく僕の思慮不足でデータベースの肥大化を招いてしまった感じです。

Instagramの写真の枚数って今何億枚くらいあるんだろう…? 2月くらいに5億枚ってニュースはありましたよね。去年の6月にStagramakerをオープンした時はまだ、写真のIDは1億2千万台くらいだったんだけどな…

そんなInstagramの成長度からすれば微々たるものですが、ありがたいことにStagramakerもたくさんの人たちに使ってもらえるようになりましたし、これからもまだまだ成長させていきたいので、「パンクしちゃったのでStagramakerやめま〜す(テヘペロ)」ってわけにはいきません。

そんなわけで、この1ヶ月くらいかけていろいろStagramakerの中身を改造していました。やるべきことは、不要データの完全消去と最適化、表示系アルゴリズムの改善。そして、より速いサーバへの移転。

 

まずは徹底的に不要データを削除しました。とにかくテーブルが巨大になってしまい、かなり単純なSQLですらタイムアウト食らったりするひどい状況でした。レンタルサーバのMySQLに設定されてるメモリ関連の設定値が少なめってのが非常に痛かったんですが、やれる範囲でなんとかしないといけません。

試行錯誤した結果、limit節で一度に200件ずつ抜き出して要・不要を判定して…って感じならタイムアウトせずにほぼ確実に処理できることがわかりました。でも、少なく見積もっても700万件くらいのデータをチェックしないといけなかったので(結局select countを実行することができなかったのであくまで推測ですw)、それをレンタルサーバの制限時間内でループしまくるスクリプトを作り、cronで昼夜フル稼働。1日あたり数十万件のチェックができるようになりました。

2週間くらいかけて不要データを消し続け、ようやくSQLの実行も、バックアップも問題なくできるくらいの件数になってきたのですが、それでも最適化はできませんでした。肥大化しまくってバカみたいにテーブルのサイズが大きくなってしまったので、いくら件数減らしても最適化にはメモリを大量に使わないとなのかな? でも、件数が減ってくれたお陰で、新しいテーブル作ってそのままコピーしてリネームすることが可能に。人力ですが、ついに最適化することができたのでした。

 

そんなわけで、今月頭くらいに不要データ削除と、同時進行で行なっていたアルゴリズム改善が一段落して、いよいよサーバ移転を残すのみ、というところまでやっとこぎつけたのですが… ふと気づいたら、いろいろ改善したStagramakerはそれほど重くなくなっちゃったんですね。そりゃあサクサク快適ってわけにはいきませんが、そこそこストレスなく使えるくらいに改善できていました。

とにかくデータ量が多すぎて重くなってたのは考えるまでもないんですが、そうなるともはやVPSに移転させても代わり映えしないかもだし、もしかしたら遅くなるかもしれないし。移転するメリットがあまりなくなっちゃったんじゃないの?ってサーバ移転自体を取りやめようかと。

でも、レンタルサーバで運用し続けていると、そのうち不要データなしに前のデータサイズくらいまでまた肥大化するかもしれないし、またバックアップも取れないような状況になるかもしれないし。いろいろ考えると自由度の高いVPSに移行した方がいいんだろうなってことでサーバ移転を決行することに。

 

体感でしかないんですが自分たちで試した限りではサーバ移転してそれなりには速くなったとは思います。キャッシュも効きますし。でも、前よりもここは遅くなったかもなあというところもあったりして、結局、どっちがよかったのかなあという微妙な結果になっちゃったかもしれないです。改善作業開始時点のベンチマークとっとけばよかったんですが、あの時はこのままじゃとにかくヤバイ!ってのでそんな発想できなかったんで… もったいないことしました。

表面上は全く代わり映えしませんし、サーバを変えたことで劇的に速くなった!というわけにもいきませんでしたが、これからはレンタルサーバの時にあったようないろいろな制限もないし、環境面でのチューニングもできるようになったし、遅くなりにくくできればいいな、と思ってます。いろいろ勉強していかないとなあ。

まだやっときたいことはいくつかあるんですが、とりあえずこれで一段落かな。長かった…

 

これでまた重くてしょうがないってなったら、その時はもう今回みたいな不要データはないわけだし、もっとグレードの高いVPSや、専用サーバに移転させるしかないんだろうし、そもそもサーバをパワーアップさせれば万全ってもんでもないんだろうし… って、そこまでStagramakerが成長してくれるのなら作ったかいもありますし、喜んで移転したいくらいですけれど。

 

というわけで、これからもStagramakerをよろしくお願いします!

Stagramaker - Instagramの写真を自由にまとめてあなただけのスタグラムをつくろう