以下引用
@see https://eure.jp/2014/06/26/pairs_infrastructure_cloud/
- Facebookプラットフォームを利用した恋愛・婚活マッチングサービス
- 先日会員数が120万人を突破しました!!(2014年8月現在)
>AWSを使用したベーシックな構成ではありますが、特徴としては、
- ELBで複数台のWEBサーバへ分散、RDSのリードレプリカで複数台のDBヘ分散する事で負荷を軽減している
- コンテンツファイル(画像・CSS・JS)はCloudFront経由で配信し負荷を軽減している
- レコード数の多いテーブル、書き込みの頻度が高いテーブルはDynamoDBを使用することで、DB、特にマスタの負荷を軽減している
- 2つのAvailability Zoneをまたぐ事でデータセンター全体での障害・災害でもサービス継続ができるようにしている
- DBマスタはRDSのMulti-AZ配備を行い、DBマスタ単体の障害はもちろん、上述したDC全体での障害・災害にも備えている
- 1つのVPC内でサブネットをLB、App、DBの3つのレイヤ・日本用とグローバル用で切り分けて、Network ACL、Security Groupを適切に設定する事でセキュリティを確保している
では実際に、各種サービス・ツールをどのように使っているかをご説明します。
もくじ
AWSの各種サービス
- ELB:Cross-Zone Load Balancingを使用しています。またSticky Sessionを使ってアプリのセッション管理を行っています。
- EC2:WEBサーバはCentOS, Apache or nginx, PHP(CodeIgniter)の構成。Apacheはmod_pagespeedを使用してレスポンスタイムの向上を図っています。
- S3:画像やfluentdに集約されたログを保存しています。
- CloudFront:CSS/JS/画像のCDNとして使用しています。CSS/JSのoriginはWEBサーバ、画像のoriginは画像変換サーバを指しています。画像変換サーバからはS3に保存している画像を取りに行きます。
- RDS/MySQL:マスタは緊急対応の初動が遅れる事も考慮してMulti-AZ化しています。またスレーブへのアクセスはAZをまたぐことで発生するレイテンシ対策としてアプリケーション側で同一のAZのスレーブを優先して参照するようにしています。
- DynamoDB:足あとやユーザーの行動履歴などレコード数が数億を超えるようなデータを格納
- ElastiCache:MySQLから抽出したデータをキャッシュ
- SES:メール、プッシュの配信
- SQS:メール、プッシュのバウンスをキューイングして、PHPでバッチ処理しています。
- Route53
ログ、分析
- fluentd:各サーバからログを集約し、S3への保存するタスクとElasticsearchに回すタスクを動かしています。
- Elasticsearch:アクセスログの解析を行っています。
- Kibana:アクセスログの解析結果をGUIで表示する優れたツールです。
- GoogleAnalytics:基本中の基本ですが、かかせません。
デプロイ
- Capistrano:本番環境のデプロイや、Apacheの再起動などのタスクを登録して使用しています。
監視
- Zabbix:WEBサーバやログなどユーティリティー系のサーバ、CloudWatchと連携した各種AWSサービスの監視を行っています。
- New Relic:WEBサーバのリソース監視。PHPやJSのエラー補足、負荷の増減が分かりやすいインタフェースで表示されるので、デプロイ後のモタリングに重宝しています。
- Crashlytics:ネイティブアプリのクラッシュログ収集
CI/CD
- Travis CI:GitHubと連携してCIを回しています。
- AWS OpsWorks:こちらは導入半ばですが、AMIでの管理に限界を感じているので今後本格的に使用していく予定です。
おまけに開発関連
- Slack:チャットツール デプロイや監視系の通知、コミットの通知は、Slackに飛ぶよう設定されています。
- JIRA:BTSです。JIRA Agileをプラグインとして入れて、カンバン方式で開発を管理しています。
- Google Spreadsheet:粒度の荒いタスク管理はこれに限ります。
- GitHub:Gitリポジトリ管理 ブランチモデルはgit-flowです。
- Confluence:コンテンツコラボレーションツールで、社内のナレッジベースとして使用しています。
- TestFlight:iOSのベータテスティング・プラットフォーム。ネイティブアプリのリリース前には必ず社内テストを通します。
- DeployGate:Androidのベータテスティング・プラットフォーム。同じくリリース前の社内テストに使用しています。
120万人のユーザーを抱えるpairsですが、エウレカはベンチャー企業なので、エンジニアの数は限られています。
- 社内リソースを考えると出来る限りソフトウェア開発に集中したい。
- けれどもインフラもある程度自分たちでコントロール可能な状態に置いておきたい。
この相反する要求を満たすために、上記のような構成・体制で開発を行っています。