アメーバ事業本部コミュニティ事業部の大﨑 (@hiroosak)です。 構成図の概要は上の図の通りです。 フェイルオーバーは
24LOGというサービスの開発を担当しています。
サイバーエージェントでは、コミュニティサービスが多数存在しているのですが、
実は、その中のいくつかのサービスでRailsが使われています。
ですが、社内・社外問わずあまり知られていないようです。
なので、今回は、Railsを使ったプロジェクトでは
どのように開発が行われているかを簡単に紹介したいと思います。
基本構成
(監視サーバなどは上の図から省いています)
静的なファイルは、社内の共通ストレージに置き、検索については
社内のラボチームで用意したシステムと連携しています。
なのでプロジェクトのチームでは、主に app, db, cache, queue を見ています。
ちなみに、rubyのバージョンは主に2.0, railsは3.2です。
各構成はChef Server, もしくは Ansibleで管理されています。
DB
MySQLのバージョンは基本は5.5です。
どのプロジェクトもマスター-スレーブ構成で、
Rails側では、ar-octopus を使っての
master slave接続切り分けを行っています。
マスターならHAProxyを使ってのマスタースレーブ入れ替え。
スレーブなら検知後にalias IPからslaveを外すようになっています。
Cache
主にRedisを利用しています。Redisもmaster, slave構成になっており
redis-sentinel を使った監視を行っています。
Rails 側からは redis, hiredis を利用してアクセスしています。
また用途によってdb番号を別々にしており、最初は1組だったのが
ある程度サービスの規模が大きくなったタイミングなどで
用途別にredisサーバーを分割する、といったこともしています。
Queueing
どのサービスもRedisを使っているのもあり、
ほとんどの場合キューイングは resque を利用しています。
これは「いいね」系のアクションの処理であったり
iOS, Androidへのプッシュ通知の送信などで利用しています。
また定期実行用に resque-scheduler も利用しています。
デプロイ
Github Enterpriseを使いながら、大体以下のような作業を行っています。
デプロイはCapistranoを利用しています。
基本的には、インフラチームなどチーム外のメンバーも触れる場合があるので
unicornのrestartやらLBの切り離しなどの作業は
出来るだけJenkinsにjobを書いています。
終わりに
今回、概要だけですが、
社内でのRailsを使ったコミュニティサービスについて紹介しました。
社内のごく一部のプロジェクトのみの利用なので
あまり表に出てこないのですが、
実はきちんと利用しているんだよという認識が広まれば幸いです。
↧
サイバーエージェントでRailsを使っているコミュニティサービスのお話
↧