View
6.593
Download
1
Embed Size (px)
DESCRIPTION
メタップスでのAWS,Ruby on Railsを使った少人数でのグローバルプラットフォームの開発について紹介します。
Citation preview
2013 Metaps Inc.
メタップスでの少人数グローバルプラットフォーム開発について
About Metaps
Metaps について
About Metaps
Metaps は Android アプリディベロッパー向けのプラットフォームを世界 230 カ国に提供しています。
http://www.metaps.com/
About Metaps
新宿を HEAD OFFICE として現在 7 箇所にオフィスを開設。開発はすべて新宿で行っています。
About me
Name : 小森谷 一生Position : ManagerHistory : SIer, Livedoor, GREEExperience : Perl,PHP,Ruby
インフラ設計
Infrastructure
世界の全ての Android アプリがMetaps のサービスを導入できること
要件
Infrastructure
グローバルな Ad システムとして、クリアしなければいけない課題
Infrastructure
言語 通貨
通信速度 端末スペック
時差 広告単価
国 セキュリティ
Infrastructure
選択した手段
Infrastructure
Infrastructure
ビジネス的要件などを考慮した上で、JP, US, EU, SG の 4Region へサービスを展開。JP にのみ Master データを保持し、他 Region は全てキャッシュを参照する Read Only 専用とする。
Infrastructure
Android アプリに搭載された SDK からの通信は可能な限り Background Process で行います。どんな通信環境でもユーザーへストレスを与えないことを心がける。
Infrastructure
( 広告表示などの )Read 用 API と ( クリックなどの )Write 用 API でドメインで分割 Read API => Latency Resource Record Write API => JP
画像は全て CloudFront へ。
Infrastructure
各 Region ごとに VPC でネットワーク管理を行い、Availabity Zone は 2 つ以上に分割。それに伴いキャッシュサーバーも NW コスト軽減のため分割。
Infrastructure
Cache は JP から Batch ぶん回しでキャッシュを生成。 Elasticache の Redis Replication を利用してZone 別に冗長構成に。
AWS の利用状況
Application
- AutoScale は使わない。設定や運用コストの高さに加えて、 Deploy 作業などとの衝突可能性がある。
最近 Console から設定ができるようになったらしい
- 増設時は Daily で IMAGE のバックアップを自動で行っているので、そこから script で Service In 。 Chef については導入検討中。
- EC2 の Instance は c3.xlarge のパフォーマンスが非常によく、全台 Replace 中。
在庫が少なくなっているようなので必要な方はお早めに !
- US の方がコストが安いため次のサービスでは、 US に Master Storage を置くことも検討。
アプリケーション
Application
Application
Nginx
Unicorn + Rails
fluentd client
API Instances
RDS MySQL
Dynamo
Elasticache
Storage
Fluentd host
fluentd host
S3
Redshift
Data Warehouse
数十 GB/ 1day
Ad システムとして Ruby/Rails は遅くない?
Application
“50ms or Die” というフレーズがありますが metaps のサービスはサーバーと、様々な通信環境の Android Device の通信のため、物理的に通信距離が遠くなることが Response 低下に繋がります。
そのため数 ms の Response Time をチューニングするよりも、アイデアを使って世界中からユーザー体感で速い表示を行うことが重要。それを行うために素早く行うにはRails が最適と判断。
upstream response time では 50ms を切ることはやってます!
Ruby の利用状況
Application
- Unicorn, Puma, Rainbows! で Benchmrk を計測しUnicorn を採用
- Ruby2/Rails4 への移行は現在検証中
- DB 接続処理などが、 JP とそれ以外の Region で処理を切り分けている部分があり、煩雑になりがちなところがある。
- RDS Cross Region Replica がリリースされたので、それを使って解消できるかも。現在 Replica Lag の検証中で Production 利用も問題無い雰囲気。
Requsts
Application
- Region ごとの Request 数は JP,US,SG,EU
- 全 Region合わせて現在 1日数億 Request
- 予想外に南米からの Request もあり Sanpaulo Region立ち上げもあるかも?
実機検証
ロシアからのアクセスが Route53 の Latency Algorithm により US を向いてしまう時がある。それを実機レベルで検証するすべがない。。
Application
SDK
SDK
SDK
アプリディベロッパーが簡単に導入できることを心がけている
Exchanger.start(this, "YOUR_APPLICATION_CODE", Exchanger.ORIENTATION_PORTRAIT, false);
Exchanger.showFullScreen(this, null, false);
SDK を読み込み、この2行を書くだけで metaps サービスの基本的な導入ができる
- ドキュメントも製品の一つとして、品質の高いものを提供する
- Plugin として Unity, Air を提供
SDK
- Android のバージョンアップなどは常にキャッチアップ
- Webview の Rendering がそれほど速くないため試行錯誤中
- rooted device, reverse compile などの Security対策
- UnitTest & Build は Jenkins
- 世界には予測不能な Android 端末が出まわってたり・・・
課題
Problem
Problem
- ピーク時間が各 Region ごとに違うため Deploy や負荷状況の差異を気にする必要が有るため、それを補える自動 Deploy の環境構築が必要。
- 大型のアプリがバージョンアップをした際に、 SDK の Initialize が行われそれに伴う Request が発生し、瞬間的にサーバーの負荷が高まる場合がある。
- 為替の激しい変動。
- Android のバージョンアップに伴う仕様変更。
課題
世界を変えよう
Change the world
現在のチーム人数で 10倍以上の Traffic を捌けるように構築してある自信はあります。が、さらに世の中を一歩前へ進める価値を提供する仲間を探しています。
http://www.metaps.com/ja/careers/