サイバーエージェントでRailsを使っているコミュニティサービスのお話 | サイバーエージェント 公式エンジニアブログ
アメーバ事業本部コミュニティ事業部の大﨑 (@hiroosak)です。
24LOGというサービスの開発を担当しています。

サイバーエージェントでは、コミュニティサービスが多数存在しているのですが、
実は、その中のいくつかのサービスでRailsが使われています。

パシャペ テルミー 24LOG

ですが、社内・社外問わずあまり知られていないようです。
なので、今回は、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 側からは redishiredis を利用してアクセスしています。
また用途によってdb番号を別々にしており、最初は1組だったのが
ある程度サービスの規模が大きくなったタイミングなどで
用途別にredisサーバーを分割する、といったこともしています。 

Queueing

どのサービスもRedisを使っているのもあり、
ほとんどの場合キューイングは resque を利用しています。
これは「いいね」系のアクションの処理であったり
iOS, Androidへのプッシュ通知の送信などで利用しています。 

また定期実行用に resque-scheduler も利用しています。 

デプロイ 

Github Enterpriseを使いながら、大体以下のような作業を行っています。

  • GitHub Enterprise にあるリポジトリのdevelopブランチにpull-request
  • merge後、Jenkinsがrspec実行、staging環境にデプロイ
  • みんなでstaging環境を確認
  • developブランチからmasterにpull-request
  • merge後、Jenkinsがproduction環境にデプロイ
デプロイはCapistranoを利用しています。
基本的には、インフラチームなどチーム外のメンバーも触れる場合があるので
unicornのrestartやらLBの切り離しなどの作業は
出来るだけJenkinsにjobを書いています。


終わりに

今回、概要だけですが、
社内でのRailsを使ったコミュニティサービスについて紹介しました。


社内のごく一部のプロジェクトのみの利用なので
あまり表に出てこないのですが、
実はきちんと利用しているんだよという認識が広まれば幸いです。