Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
海外から快適に使ってもらうためにしてきたこと / the battle with networ...
Search
fanglang
September 05, 2018
Programming
0
4.7k
海外から快適に使ってもらうためにしてきたこと / the battle with network latency
fanglang
September 05, 2018
Tweet
Share
More Decks by fanglang
See All by fanglang
「家族アルバム みてね」を支えるS3ライフサイクル戦略
fanglang
4
950
マルチCPUアーキテクチャ構成の実現に向けて
fanglang
1
300
Other Decks in Programming
See All in Programming
20251016_Rails News ~Rails 8.1の足音を聴く~
morimorihoge
3
730
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
270
Vueのバリデーション、結局どれを選べばいい? ― 自作バリデーションの限界と、脱却までの道のり ― / Which Vue Validation Library Should We Really Use? The Limits of Self-Made Validation and How I Finally Moved On
neginasu
2
1.6k
Building, Deploying, and Monitoring Ruby Web Applications with Falcon (Kaigi on Rails 2025)
ioquatix
4
2.5k
CSC305 Lecture 10
javiergs
PRO
0
250
Six and a half ridiculous things to do with Quarkus
hollycummins
0
210
AI駆動で0→1をやって見えた光と伸びしろ
passion0102
1
840
NIKKEI Tech Talk#38
cipepser
0
230
bootcamp2025_バックエンド研修_WebAPIサーバ作成.pdf
geniee_inc
0
130
PHPに関数型の魂を宿す〜PHP 8.5 で実現する堅牢なコードとは〜 #phpcon_hiroshima / phpcon-hiroshima-2025
shogogg
1
330
Reactive Thinking with Signals and the Resource API
manfredsteyer
PRO
0
110
What's new in Spring Modulith?
olivergierke
1
170
Featured
See All Featured
Rails Girls Zürich Keynote
gr2m
95
14k
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.5k
GraphQLの誤解/rethinking-graphql
sonatard
73
11k
Reflections from 52 weeks, 52 projects
jeffersonlam
353
21k
Balancing Empowerment & Direction
lara
5
700
Build your cross-platform service in a week with App Engine
jlugia
233
18k
Navigating Team Friction
lara
190
15k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
10
620
Build The Right Thing And Hit Your Dates
maggiecrowley
38
2.9k
Being A Developer After 40
akosma
91
590k
Why Our Code Smells
bkeepers
PRO
340
57k
Art, The Web, and Tiny UX
lynnandtonic
303
21k
Transcript
海外から快適に使ってもらう ためにしてきたこと みてねのMeetup #2 for サーバーサイド/SRE 2018/09/05 おぜきよしろう
自己紹介 • 尾関芳郎 • みてねがすき • ポーカーがすき • ロックフェスがすき
「家族アルバム みてね」について
• URL: https://mitene.us/ • 2015年4月 サービス開始 • 2017年7月 英語版提供開始 ◦
ここを伸ばしていくために頑張ってます • 2018年7月 ユーザー数 300万人突破 • 2018年8月 写真・動画のアップロード総数10億枚突破 「家族アルバム みてね」について
課題の整理
課題の整理 • 海外における課題 ◦ 日本よりもアプリの動作が遅い ◦ 海外で成功するためにはまずここをなんとかせねば!
課題の整理 • そもそも「遅い」って、何が遅いの? • 何を速くすれば快適になるの?
アプリケーションの特徴 • 家族間で画像・動画をシェア ◦ 大量の画像・動画がアップされるため、大量のストレージが必要 ◦ それぞれ少数人からのアクセスしかないため、 CDNキャッシュ効率が悪い • 海外展開
◦ 日本のリージョンに構築しているため、ネットワークレイテンシが大きい ◦ ピークタイムが国によって違う (とはいえ、今はほとんどが日本からのアクセス )
アプリケーションの特徴 • 家族間で画像・動画をシェア ◦ 大量の画像・動画がアップされるため、大量のストレージが必要 ◦ それぞれ少数人からのアクセスしかないため、 CDNキャッシュ効率が悪い • 海外展開
◦ 日本のリージョンに構築しているため、 ネットワークレイテンシが大きい ◦ ピークタイムが国によって違う (とはいえ、今はほとんどが日本からのアクセス )
アプリケーションの特徴 • 家族間で画像・動画をシェア ◦ 大量の画像・動画がアップされるため、大量のストレージが必要 ◦ それぞれ少数人からのアクセスしかないため、 CDNキャッシュ効率が悪い • 海外展開
◦ 日本のリージョンに構築しているため、 ネットワークレイテンシが大きい ◦ ピークタイムが国によって違う (とはいえ、今はほとんどが日本からのアクセス ) • 今日は、AWSが提供する機能で解決してきたことを共有します ◦ (AWS使ってない人すみません ) ◦ それ以外もいろいろやってますが、 AWSの話なら自社に取り入れやすいですよね
何をやったか?
何をやったか? 1. 写真・動画ダウンロードの高速化 2. 写真・動画アップロードの高速化 3. APIアクセス全体の高速化
1. 写真・動画ダウンロードの高速化 • みてねの画像・動画DL時のフロー(変更前) ◦ 全画像に対して、一度 APIにアクセスしてCloudFrontの署名付きURLを発行している ▪ これが遅い
1. 写真・動画ダウンロードの高速化 • 署名付きURLはまとめて発行するようにAPIの仕様を変更 ◦ 且つ署名はワイルドカードを使用 ◦ APIへのアクセスを大幅に減らすことができた!
1. 写真・動画ダウンロードの高速化 • ここを掘り下げたものが弊社酒井がiOSDCで発表しています ◦ https://speakerdeck.com/_atsushisakai/image-distribution-for-overseas ▪ こちらの資料もご確認ください。
2. 写真・動画アップロードの高速化 • 海外版リリース時のアップロードフロー ◦ US在住の場合、us-east(またはus-west)のバケットにアップロード ▪ us-east(またはus-west)から ap-northeast にレプリケーション
▪ US以外は ap-northeast に直接アップロード ◦ ap-northeast のバケットに反映されないと、家族に共有されない
2. 写真・動画アップロードの高速化 • Cross-Region Replication ◦ https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/dev/crr.html ◦ もともとこれによって高速化されることを期待 ◦
ただし、レプリケーションされるまでにタイムラグがある ▪ 体感で、遅い時は数十秒
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 に ルーティングされます。
2. 写真・動画アップロードの高速化 • Amazon S3 Transfer Acceleration を導入 ◦ ap-northeastへのアップロードは平均
0.5秒以上速くなった ▪ とは言え、大きいファイルのアップロードは時間がかかるものなので、ユーザーの体感的には あまり変わらないかも
2. 写真・動画アップロードの高速化 • この時点でうすうす気づいていた ◦ 「あれ、Cross-Region Replicationいらなくね?」
2. 写真・動画アップロードの高速化 • アメリカ出張時に現地から計測 ◦ サムネイル作成完了まで S3 Transfer Accelerationの方が最大40秒ほど速かった ◦
やはりレプリケーションは結構遅いことを実感 ◦ Transfer Accelerationは十分速い • 全てap-northeastのバケットに置くように変更した
2. 写真・動画アップロードの高速化 • はじめからこうすればよかった! ◦ (けどしょうがない)
3. APIアクセス全体の高速化 • シンプルなアプリケーション(略図)
3. APIアクセス全体の高速化 • フロントにCloudFrontを入れる
3. APIアクセス全体の高速化 • CloudFrontを入れるメリット ◦ ユーザーからCloudFrontのエッジロケーションまでの物理的な距離が近い ▪ SSL/TLS の接続確立が速くなる ◦
エッジから日本のリージョンまでの通信経路が最適化される ▪ Transfer Accelerationと同じ原理 • 実際に速くなった ◦ UKからだと平均700msほど速くなった
3. APIアクセス全体の高速化 before after
3. APIアクセス全体の高速化 before after 1,120ms → 321ms !!!!
3. APIアクセス全体の高速化 • リソースを一つのAZに集約 ◦ フロントのEC2, RDS, ElastiCacheのマスターを同じAZに集約 ◦ 10msほど速くなった(海外だからというのはあまり関係ない
) ◦ ※もちろんAZ障害が起きた際の復旧手順は用意している ◦ ※アンチパターンなのであまりおすすめはしない
今後の改善案
今後の改善案 • 端末側で画像の先読み&キャッシュ ◦ 現在開発中 • マルチリージョンAPI ◦ まだかなり先になりそう
まとめ
まとめ • 海外向けアプリはネットワークレイテンシとの戦い • AWSの機能だけである程度解決できる