渋谷エンジニア朝会@bizreach 20141123
TRANSCRIPT
インターナショナルサービス抑えたい 3 つのポイント
2014/11/23 渋谷エンジニア朝会@ Bizreach
株式会社ビズリーチプロダクトマーケティング本部 zuknow 事業
マネージャー 兼 チーフエンジニア鈴木康弘 やっぴー
2
Profile
• 鈴木康弘( yappy )– 株式会社ビズリーチ Web 系エンジニア
• どんな人?– IT コンサルタント → 立ち上げ当初のビズリーチに転職– 6 番目の社員、マンションの一室 → 4年間社員 300 人超– 4 年間で 4 事業の立ち上げに参画
• Bizreach ESS 事業(紹介会社向けサービス)• Bizreach CRS 事業(一般人事向けサービス)• RegionUP 事業( Bizreach のアジア版、プロダクト責任者)• zuknow 事業(教育系サービス、暗記帳アプリ、プロダクト責任者)
– エンジニアリングとプロダクトマーケティングが強み
3
友だちと競える暗記帳アプリ「 zuknow 」
• 勉強を続ける事が学習者にとって最大の課題→解決したい
• 2014 年 1 月 iOS アプリ公開 • 2014 年 4 月 Android アプリ公開• 11 ヶ月で 19 万ダウンロード
5
インターナショナルサービス 抑えたい 3 つのポイント
1. クライアント側の言語設定で動くように(言語リソース問題)
2. Master-DB は UTC0 で管理(時差問題)
3. 地球の裏側にサービスを、ネットワーク遅延は DWA で解決!(ネットワーク遅延問題)
6
インターナショナルサービス 抑えたい 3 つのポイント
1. クライアント側の言語設定で動くように(言語リソース問題)
2. Master-DB は UTC0 で管理(時差問題)
3. 地球の裏側にサービスを、ネットワーク遅延は DWA で解決!(ネットワーク遅延問題)
7
クライアント側の言語設定で動くように
DB中国語
API日本語
Client英語
• クライアント、 API 、 DB の言語がずれる事がよくある– 過去に中国語の設定にしていて、今は日本語設定で使ってるが、さっ
きクライアントの OS の言語設定を英語にしてみた
8
クライアント側の言語設定で動くように
DB中国語
API日本語
Client英語
• クライアント、 API 、 DB の言語がずれる事がよくある– 過去に中国語の設定にしていて、今は日本語設定で使ってるが、さっ
きクライアントの OS の言語設定を英語にしてみた
クライアントで構築される文字列は英語
9
クライアント側の言語設定で動くように
DB中国語
API日本語
Client英語
• クライアント、 API 、 DB の言語がずれる事がよくある– 過去に中国語の設定にしていて、今は日本語設定で使ってるが、さっ
きクライアントの OS の言語設定を英語にしてみた
API 側で構築する、バリデーションエラーなどの文字列は日本語で表示
10
クライアント側の言語設定で動くように
DB中国語
API日本語
Client英語
• クライアント、 API 、 DB の言語がずれる事がよくある– 過去に中国語の設定にしていて、今は日本語設定で使ってるが、さっ
きクライアントの OS の言語設定を英語にしてみた
DB に入っている文字は中国語で表示
11
クライアント側の言語設定で動くように
DBAPI日本語
Client英語
• DB に表示文字列は入れない、表示文字列は表示時に構築• 常にクライアント側の言語設定で動くように
DB に表示文字列を入れない
リクエスト内に、言語情報を入れ、表示時に構築
12
インターナショナルサービス 抑えたい 3 つのポイント
1. クライアント側の言語設定で動くように(言語リソース問題)
2. Master-DB は UTC0 で管理(時差問題)
3. 地球の裏側にサービスを、ネットワーク遅延は DWA で解決!(ネットワーク遅延問題)
13
Master-DB は UTC0 で管理
• ユーザーの時差に合った時間を表示する• アメリカ人に日本時間を出してもしょうがない• DB に、日本時間の Timestamp で保存してもいいが、、
14
Master-DB は UTC0 で管理
DBAPIClient
• DB の時間は UTC0 でいれる• API サーバーも UTC0 で動かす• 表示時に、表示時間文字列を時差を加味して構築
リクエスト内に、時差情報を入れ、表示時に構築
とにかく UTC0で Timestamp は保存
15
インターナショナルサービス 抑えたい 3 つのポイント
1. クライアント側の言語設定で動くように(言語リソース問題)
2. Master-DB は UTC0 で管理(時差問題)
3. 地球の裏側にサービスを、ネットワーク遅延は DCA で解決!(ネットワーク遅延問題)
16
地球の裏側にサービスを、ネットワーク遅延は DWA で解決!
• ネットワーク遅延、日本国内だと 10~50ms• アメリカやヨーロッパでは約 200ms• 単一拠点のインターナショナルサービスは地球の裏側のユーザー
までサポートしなくてはいけない• ネットワーク遅延は大きな問題
17
地球の裏側にサービスを、ネットワーク遅延は DCA で解決!
• DCA(Dynamic Content Acceleration)• 距離が遠い区間の通信を最適化、動的コンテンツのパフォーマン
スを向上• AWS の CloudFront(CDN サービス ) を使って DWA が出来る!
User
CloudFront( CDN )
Static Content
Dynamic Content
普通のアーキテクチャ
18
地球の裏側にサービスを、ネットワーク遅延は DWA で解決!
• CloudFront を動的コンテンツに対しても適応• TTL=0 に、動的コンテンツはキャッシュしないように• HttpHeader も引き継げるようになった
User CloudFront
Static Content
Dynamic Content
DWA のアーキテクチャ
19
地球の裏側にサービスを、ネットワーク遅延は DWA で解決!
• なぜ速くなるのか?– TCP/IP の Hand Shake 回数が減る– Hand Shake 回数が減り、 Web サーバー側の負荷も下がる– SSL 接続の TCP/IP Hand Shake 回数も減る
180ms
CloudFrontEdge
Location
Dynamic Content
360ms
30ms 60ms
SYN
SYN-ACK
ACK
GET /index.html
SYN
SYN-ACK
ACK
GET /index.html
SYN
SYN-ACK
ACK
GET /index.html
GET /index.html
20
地球の裏側にサービスを、ネットワーク遅延は DWA で解決!
• zuknow では平均的に約 700ms 速くなった!• また、スマホの接続が不安定なときでもつながりやすくなった• 単一拠点のインターナショナルサービスをやるときはどうぞ
User CloudFront
Static Content
Dynamic Content
DWA のアーキテクチャ
21
インターナショナルサービス 抑えたい 3 つのポイント
1. クライアント側の言語設定で動くように(言語リソース問題)
2. Master-DB は UTC0 で管理(時差問題)
3. 地球の裏側にサービスを、ネットワーク遅延は DWA で解決!(ネットワーク遅延問題)