Slide 1

Slide 1 text

海外から快適に使ってもらう ためにしてきたこと みてねのMeetup #2 for サーバーサイド/SRE 2018/09/05 おぜきよしろう

Slide 2

Slide 2 text

自己紹介 ● 尾関芳郎 ● みてねがすき ● ポーカーがすき ● ロックフェスがすき

Slide 3

Slide 3 text

「家族アルバム みてね」について

Slide 4

Slide 4 text

● URL: https://mitene.us/ ● 2015年4月 サービス開始 ● 2017年7月 英語版提供開始 ○ ここを伸ばしていくために頑張ってます ● 2018年7月 ユーザー数 300万人突破 ● 2018年8月 写真・動画のアップロード総数10億枚突破 「家族アルバム みてね」について

Slide 5

Slide 5 text

課題の整理

Slide 6

Slide 6 text

課題の整理 ● 海外における課題 ○ 日本よりもアプリの動作が遅い ○ 海外で成功するためにはまずここをなんとかせねば!

Slide 7

Slide 7 text

課題の整理 ● そもそも「遅い」って、何が遅いの? ● 何を速くすれば快適になるの?

Slide 8

Slide 8 text

アプリケーションの特徴 ● 家族間で画像・動画をシェア ○ 大量の画像・動画がアップされるため、大量のストレージが必要 ○ それぞれ少数人からのアクセスしかないため、 CDNキャッシュ効率が悪い ● 海外展開 ○ 日本のリージョンに構築しているため、ネットワークレイテンシが大きい ○ ピークタイムが国によって違う (とはいえ、今はほとんどが日本からのアクセス )

Slide 9

Slide 9 text

アプリケーションの特徴 ● 家族間で画像・動画をシェア ○ 大量の画像・動画がアップされるため、大量のストレージが必要 ○ それぞれ少数人からのアクセスしかないため、 CDNキャッシュ効率が悪い ● 海外展開 ○ 日本のリージョンに構築しているため、 ネットワークレイテンシが大きい ○ ピークタイムが国によって違う (とはいえ、今はほとんどが日本からのアクセス )

Slide 10

Slide 10 text

アプリケーションの特徴 ● 家族間で画像・動画をシェア ○ 大量の画像・動画がアップされるため、大量のストレージが必要 ○ それぞれ少数人からのアクセスしかないため、 CDNキャッシュ効率が悪い ● 海外展開 ○ 日本のリージョンに構築しているため、 ネットワークレイテンシが大きい ○ ピークタイムが国によって違う (とはいえ、今はほとんどが日本からのアクセス ) ● 今日は、AWSが提供する機能で解決してきたことを共有します ○ (AWS使ってない人すみません ) ○ それ以外もいろいろやってますが、 AWSの話なら自社に取り入れやすいですよね

Slide 11

Slide 11 text

何をやったか?

Slide 12

Slide 12 text

何をやったか? 1. 写真・動画ダウンロードの高速化 2. 写真・動画アップロードの高速化 3. APIアクセス全体の高速化

Slide 13

Slide 13 text

1. 写真・動画ダウンロードの高速化 ● みてねの画像・動画DL時のフロー(変更前) ○ 全画像に対して、一度 APIにアクセスしてCloudFrontの署名付きURLを発行している ■ これが遅い

Slide 14

Slide 14 text

1. 写真・動画ダウンロードの高速化 ● 署名付きURLはまとめて発行するようにAPIの仕様を変更 ○ 且つ署名はワイルドカードを使用 ○ APIへのアクセスを大幅に減らすことができた!

Slide 15

Slide 15 text

1. 写真・動画ダウンロードの高速化 ● ここを掘り下げたものが弊社酒井がiOSDCで発表しています ○ https://speakerdeck.com/_atsushisakai/image-distribution-for-overseas ■ こちらの資料もご確認ください。

Slide 16

Slide 16 text

2. 写真・動画アップロードの高速化 ● 海外版リリース時のアップロードフロー ○ US在住の場合、us-east(またはus-west)のバケットにアップロード ■ us-east(またはus-west)から ap-northeast にレプリケーション ■ US以外は ap-northeast に直接アップロード ○ ap-northeast のバケットに反映されないと、家族に共有されない

Slide 17

Slide 17 text

2. 写真・動画アップロードの高速化 ● Cross-Region Replication ○ https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/dev/crr.html ○ もともとこれによって高速化されることを期待 ○ ただし、レプリケーションされるまでにタイムラグがある ■ 体感で、遅い時は数十秒

Slide 18

Slide 18 text

2. 写真・動画アップロードの高速化 ● Amazon S3 Transfer Acceleration を導入 ○ https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/dev/transfer-acceleration.html ■ Amazon S3 Transfer Acceleration を使用すると、クライアントと S3 バケットとの間で、長距 離にわたるファイル転送を高速、簡単、安全に行えるようになります。 Transfer Acceleration では、Amazon CloudFront の世界中に分散したエッジロケーションが利用されています。 エッジロケーションに到着したデータは、最適化されたネットワークパスで Amazon S3 に ルーティングされます。

Slide 19

Slide 19 text

2. 写真・動画アップロードの高速化 ● Amazon S3 Transfer Acceleration を導入 ○ ap-northeastへのアップロードは平均 0.5秒以上速くなった ■ とは言え、大きいファイルのアップロードは時間がかかるものなので、ユーザーの体感的には あまり変わらないかも

Slide 20

Slide 20 text

2. 写真・動画アップロードの高速化 ● この時点でうすうす気づいていた ○ 「あれ、Cross-Region Replicationいらなくね?」

Slide 21

Slide 21 text

2. 写真・動画アップロードの高速化 ● アメリカ出張時に現地から計測 ○ サムネイル作成完了まで S3 Transfer Accelerationの方が最大40秒ほど速かった ○ やはりレプリケーションは結構遅いことを実感 ○ Transfer Accelerationは十分速い ● 全てap-northeastのバケットに置くように変更した

Slide 22

Slide 22 text

2. 写真・動画アップロードの高速化 ● はじめからこうすればよかった! ○ (けどしょうがない)

Slide 23

Slide 23 text

3. APIアクセス全体の高速化 ● シンプルなアプリケーション(略図)

Slide 24

Slide 24 text

3. APIアクセス全体の高速化 ● フロントにCloudFrontを入れる

Slide 25

Slide 25 text

3. APIアクセス全体の高速化 ● CloudFrontを入れるメリット ○ ユーザーからCloudFrontのエッジロケーションまでの物理的な距離が近い ■ SSL/TLS の接続確立が速くなる ○ エッジから日本のリージョンまでの通信経路が最適化される ■ Transfer Accelerationと同じ原理 ● 実際に速くなった ○ UKからだと平均700msほど速くなった

Slide 26

Slide 26 text

3. APIアクセス全体の高速化 before after

Slide 27

Slide 27 text

3. APIアクセス全体の高速化 before after 1,120ms → 321ms !!!!

Slide 28

Slide 28 text

3. APIアクセス全体の高速化 ● リソースを一つのAZに集約 ○ フロントのEC2, RDS, ElastiCacheのマスターを同じAZに集約 ○ 10msほど速くなった(海外だからというのはあまり関係ない ) ○ ※もちろんAZ障害が起きた際の復旧手順は用意している ○ ※アンチパターンなのであまりおすすめはしない

Slide 29

Slide 29 text

今後の改善案

Slide 30

Slide 30 text

今後の改善案 ● 端末側で画像の先読み&キャッシュ ○ 現在開発中 ● マルチリージョンAPI ○ まだかなり先になりそう

Slide 31

Slide 31 text

まとめ

Slide 32

Slide 32 text

まとめ ● 海外向けアプリはネットワークレイテンシとの戦い ● AWSの機能だけである程度解決できる