海外から快適に使ってもらうためにしてきたこと / the battle with network latency
by
fanglang
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
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の機能だけである程度解決できる