MongoHQを無料版から有料版($18/GB/月)に変えてみた


Node.jsでYouTubeで同期再生してリアルタイムチャットするサービスを作りましたよ - 私事ですが……」で作って細々と運用しているサービス「TauStream (Realtime chat with movies)」、HerokuとMongoHQの無料版を使っていたのだけれど、ちょいちょいリクエストの処理に30秒以上掛かって、HerokuさんがApplication Errorを吐くことが多くなってきていた。


無料版とはいえそんなに重い処理はしてないし、同じ処理でも時間帯によって重いときと軽いときがあるので、接続に時間が掛かるケースがあるのかなと。
実際ログを見た感じでもそんな雰囲気だったので、エイヤでMongoHQだけ有料版(Elastic Deployments)にしてみた。


一応、8GBぐらいまではMongoLabの方が安かったりもするのだが、既にMongoHQを使ってて乗り換えるのが面倒だったのとアカウントをいろいろなところに登録するのが嫌だったので今回はスルー。


手順は以下。中身が同じCloneが作れるので楽。公式の移行手順も参考に。

  • アプリケーションをメンテナンスモードにするなどして止める。
  • MongoHQの管理画面で対象DBの[Admin]の[Overview]タブの右の「Clone Database」で中身も同じDBを生成(DBを統べる「Deployment」を作っていない場合は併せて作ることになる)。
  • 無事生成されたら新しいDBの接続情報をアプリケーションに設定する。
  • アプリケーションを起動する。


以下のあたりがポイント。

  • 一度Cloneした後でも新DBの[Admin]の[Overview]タブの右の「Import a database」で一旦新DBの中身をクリアして再度別のDBの中身を流し込める。これはClone元ではないDBのものでもOK。Cloneせずに「Add Database」で新規にDBを作った場合もこの機能で移行できる。
  • 有料版のDBは「Deployment」という単位で括られる。この「Deployment」に2個のホストが割り当てられ、レプリカセットを形成している。この「Deployment」の下に複数のDBを作ることも可能。「$18/GB/月」というのもこの「Deployment」に対して課せられるっぽい。モニタリングなどもこの単位。
  • DBへの接続文字列もホストをカンマ区切りしたレプリカセットになっている。レプリカセットの記述に直接対応していないミドルウェアを使っている場合は一方のみを選んで指定することになる。


アプリケーションに対してab/weighttpでグルングルン回して計測した感じではそんなにスループットは上がってない感じではあるものの、「繋がらない」「繋がりにくい」というのは今のところ発生しなくなった。