29
2013 Metaps Inc. メメメメメメメメメメ メメメメメメメメメメメメメメメメメメメ

メタップスでの少人数 グローバルプラットフォーム開発について

  • View
    6.593

  • Download
    1

Embed Size (px)

DESCRIPTION

メタップスでのAWS,Ruby on Railsを使った少人数でのグローバルプラットフォームの開発について紹介します。

Citation preview

Page 1: メタップスでの少人数 グローバルプラットフォーム開発について

2013 Metaps Inc.

メタップスでの少人数グローバルプラットフォーム開発について

Page 2: メタップスでの少人数 グローバルプラットフォーム開発について

About Metaps

Metaps について

Page 3: メタップスでの少人数 グローバルプラットフォーム開発について

About Metaps

Metaps は Android アプリディベロッパー向けのプラットフォームを世界 230 カ国に提供しています。

http://www.metaps.com/

Page 4: メタップスでの少人数 グローバルプラットフォーム開発について

About Metaps

新宿を HEAD OFFICE として現在 7 箇所にオフィスを開設。開発はすべて新宿で行っています。

Page 5: メタップスでの少人数 グローバルプラットフォーム開発について

About me

Name : 小森谷 一生Position : ManagerHistory : SIer, Livedoor, GREEExperience : Perl,PHP,Ruby

Page 6: メタップスでの少人数 グローバルプラットフォーム開発について

インフラ設計

Infrastructure

Page 7: メタップスでの少人数 グローバルプラットフォーム開発について

世界の全ての Android アプリがMetaps のサービスを導入できること

要件

Infrastructure

Page 8: メタップスでの少人数 グローバルプラットフォーム開発について

グローバルな Ad システムとして、クリアしなければいけない課題

Infrastructure

言語 通貨

通信速度 端末スペック

時差 広告単価

国 セキュリティ

Page 9: メタップスでの少人数 グローバルプラットフォーム開発について

Infrastructure

選択した手段

Page 10: メタップスでの少人数 グローバルプラットフォーム開発について

Infrastructure

Page 11: メタップスでの少人数 グローバルプラットフォーム開発について

Infrastructure

ビジネス的要件などを考慮した上で、JP, US, EU, SG の 4Region へサービスを展開。JP にのみ Master データを保持し、他 Region は全てキャッシュを参照する Read Only 専用とする。

Page 12: メタップスでの少人数 グローバルプラットフォーム開発について

Infrastructure

Android アプリに搭載された SDK からの通信は可能な限り Background Process で行います。どんな通信環境でもユーザーへストレスを与えないことを心がける。

Page 13: メタップスでの少人数 グローバルプラットフォーム開発について

Infrastructure

( 広告表示などの )Read 用 API と ( クリックなどの )Write 用 API でドメインで分割 Read API => Latency Resource Record Write API => JP

画像は全て CloudFront へ。

Page 14: メタップスでの少人数 グローバルプラットフォーム開発について

Infrastructure

各 Region ごとに VPC でネットワーク管理を行い、Availabity Zone は 2 つ以上に分割。それに伴いキャッシュサーバーも NW コスト軽減のため分割。

Page 15: メタップスでの少人数 グローバルプラットフォーム開発について

Infrastructure

Cache は JP から Batch ぶん回しでキャッシュを生成。 Elasticache の Redis Replication を利用してZone 別に冗長構成に。

Page 16: メタップスでの少人数 グローバルプラットフォーム開発について

AWS の利用状況 

Application

- AutoScale は使わない。設定や運用コストの高さに加えて、 Deploy 作業などとの衝突可能性がある。

  最近 Console から設定ができるようになったらしい

- 増設時は Daily で IMAGE のバックアップを自動で行っているので、そこから script で Service In 。 Chef については導入検討中。

- EC2 の Instance は c3.xlarge のパフォーマンスが非常によく、全台 Replace 中。

   在庫が少なくなっているようなので必要な方はお早めに !

- US の方がコストが安いため次のサービスでは、 US に Master Storage を置くことも検討。

Page 17: メタップスでの少人数 グローバルプラットフォーム開発について

アプリケーション

Application

Page 18: メタップスでの少人数 グローバルプラットフォーム開発について

Application

Nginx

Unicorn + Rails

fluentd client

API Instances

RDS MySQL

Dynamo

Elasticache

Storage

Fluentd host

fluentd host

S3

Redshift

Data Warehouse

数十 GB/ 1day

Page 19: メタップスでの少人数 グローバルプラットフォーム開発について

Ad システムとして Ruby/Rails は遅くない? 

Application

“50ms or Die” というフレーズがありますが metaps のサービスはサーバーと、様々な通信環境の Android Device の通信のため、物理的に通信距離が遠くなることが Response 低下に繋がります。

そのため数 ms の Response Time をチューニングするよりも、アイデアを使って世界中からユーザー体感で速い表示を行うことが重要。それを行うために素早く行うにはRails が最適と判断。

upstream response time では 50ms を切ることはやってます!

Page 20: メタップスでの少人数 グローバルプラットフォーム開発について

Ruby の利用状況

Application

- Unicorn, Puma, Rainbows! で Benchmrk を計測しUnicorn を採用

- Ruby2/Rails4 への移行は現在検証中

- DB 接続処理などが、 JP とそれ以外の Region で処理を切り分けている部分があり、煩雑になりがちなところがある。

- RDS Cross Region Replica がリリースされたので、それを使って解消できるかも。現在 Replica Lag の検証中で Production 利用も問題無い雰囲気。

Page 21: メタップスでの少人数 グローバルプラットフォーム開発について

Requsts

Application

- Region ごとの Request 数は JP,US,SG,EU

- 全 Region合わせて現在 1日数億 Request

- 予想外に南米からの Request もあり Sanpaulo Region立ち上げもあるかも?

Page 22: メタップスでの少人数 グローバルプラットフォーム開発について

実機検証

ロシアからのアクセスが Route53 の Latency Algorithm により US を向いてしまう時がある。それを実機レベルで検証するすべがない。。

Application

Page 23: メタップスでの少人数 グローバルプラットフォーム開発について

SDK

SDK

Page 24: メタップスでの少人数 グローバルプラットフォーム開発について

SDK

アプリディベロッパーが簡単に導入できることを心がけている

Exchanger.start(this, "YOUR_APPLICATION_CODE", Exchanger.ORIENTATION_PORTRAIT, false);

Exchanger.showFullScreen(this, null, false);

SDK を読み込み、この2行を書くだけで metaps サービスの基本的な導入ができる

- ドキュメントも製品の一つとして、品質の高いものを提供する

- Plugin として Unity, Air を提供

Page 25: メタップスでの少人数 グローバルプラットフォーム開発について

SDK

- Android のバージョンアップなどは常にキャッチアップ

- Webview の Rendering がそれほど速くないため試行錯誤中

- rooted device, reverse compile などの Security対策

- UnitTest & Build は Jenkins

- 世界には予測不能な Android 端末が出まわってたり・・・

Page 26: メタップスでの少人数 グローバルプラットフォーム開発について

課題

Problem

Page 27: メタップスでの少人数 グローバルプラットフォーム開発について

Problem

- ピーク時間が各 Region ごとに違うため Deploy や負荷状況の差異を気にする必要が有るため、それを補える自動 Deploy の環境構築が必要。

- 大型のアプリがバージョンアップをした際に、 SDK の Initialize が行われそれに伴う Request が発生し、瞬間的にサーバーの負荷が高まる場合がある。

- 為替の激しい変動。

- Android のバージョンアップに伴う仕様変更。

課題

Page 28: メタップスでの少人数 グローバルプラットフォーム開発について

世界を変えよう

Change the world

Page 29: メタップスでの少人数 グローバルプラットフォーム開発について

現在のチーム人数で 10倍以上の Traffic を捌けるように構築してある自信はあります。が、さらに世の中を一歩前へ進める価値を提供する仲間を探しています。

http://www.metaps.com/ja/careers/