Top Banner
1 Nintendo Switch TM 向け プッシュ通知システム 「NPNS」 任天堂 ネットワークシステム部 渡邉 大洋 小澤 謹裕 わたなべ たいよう
71

Nintendo Switch 向け プッシュ通知システム · ElastiCache for Redis. 25 その他 Amazon SQS ELB Route53 Consul クラスタ動作、ネットワーク分断に強い ejabberd

Sep 25, 2019

Download

Documents

dariahiddleston
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Nintendo Switch 向け プッシュ通知システム · ElastiCache for Redis. 25 その他 Amazon SQS ELB Route53 Consul クラスタ動作、ネットワーク分断に強い ejabberd

1

Nintendo SwitchTM 向けプッシュ通知システム

「NPNS」

任天堂 ネットワークシステム部

渡邉 大洋

小澤 謹裕

わ た な べ た い よ う

こ ざ わ の り ひ ろ

Page 2: Nintendo Switch 向け プッシュ通知システム · ElastiCache for Redis. 25 その他 Amazon SQS ELB Route53 Consul クラスタ動作、ネットワーク分断に強い ejabberd

2

サービス紹介

構成要素

インフラ設計

技術詳細

振り返り

まとめと展望

今日の内容

Page 3: Nintendo Switch 向け プッシュ通知システム · ElastiCache for Redis. 25 その他 Amazon SQS ELB Route53 Consul クラスタ動作、ネットワーク分断に強い ejabberd

3

渡邉 大洋

所属

ネットワークシステム部

Web エンジニア

キャリア入社5年目(組み込み→Web)

これまで

ニンテンドーネットワークID, NPNS

Page 4: Nintendo Switch 向け プッシュ通知システム · ElastiCache for Redis. 25 その他 Amazon SQS ELB Route53 Consul クラスタ動作、ネットワーク分断に強い ejabberd

4

小澤 謹裕

所属

ネットワークシステム部

インフラエンジニア

入社9年目

これまで

ゲームサーバ, Miiverse, NPNS

Page 5: Nintendo Switch 向け プッシュ通知システム · ElastiCache for Redis. 25 その他 Amazon SQS ELB Route53 Consul クラスタ動作、ネットワーク分断に強い ejabberd

5

サービス紹介

Page 6: Nintendo Switch 向け プッシュ通知システム · ElastiCache for Redis. 25 その他 Amazon SQS ELB Route53 Consul クラスタ動作、ネットワーク分断に強い ejabberd

6

Nintendo Switch

世界 1779万台 (2018年3月末時点)

Page 7: Nintendo Switch 向け プッシュ通知システム · ElastiCache for Redis. 25 その他 Amazon SQS ELB Route53 Consul クラスタ動作、ネットワーク分断に強い ejabberd

7

NPNS

ひとことで

プッシュ通知システム

Nintendo Push Notification Service

常時接続を使用

他社プラットフォーム

Apple APNS

Google FCM

Page 8: Nintendo Switch 向け プッシュ通知システム · ElastiCache for Redis. 25 その他 Amazon SQS ELB Route53 Consul クラスタ動作、ネットワーク分断に強い ejabberd

8

Nintendo Switch 上の通知

Page 9: Nintendo Switch 向け プッシュ通知システム · ElastiCache for Redis. 25 その他 Amazon SQS ELB Route53 Consul クラスタ動作、ネットワーク分断に強い ejabberd

9

利用例

フレンドのオンライン通知

Page 10: Nintendo Switch 向け プッシュ通知システム · ElastiCache for Redis. 25 その他 Amazon SQS ELB Route53 Consul クラスタ動作、ネットワーク分断に強い ejabberd

10

利用例

Nintendo みまもり SwitchTM での設定変更

Page 11: Nintendo Switch 向け プッシュ通知システム · ElastiCache for Redis. 25 その他 Amazon SQS ELB Route53 Consul クラスタ動作、ネットワーク分断に強い ejabberd

11

利用例

スマートフォンや PC での購入後の DL 開始指示

Page 12: Nintendo Switch 向け プッシュ通知システム · ElastiCache for Redis. 25 その他 Amazon SQS ELB Route53 Consul クラスタ動作、ネットワーク分断に強い ejabberd

12

利用例

※DL後に完了メッセージ

Page 13: Nintendo Switch 向け プッシュ通知システム · ElastiCache for Redis. 25 その他 Amazon SQS ELB Route53 Consul クラスタ動作、ネットワーク分断に強い ejabberd

13

NPNS利用サービス

Page 14: Nintendo Switch 向け プッシュ通知システム · ElastiCache for Redis. 25 その他 Amazon SQS ELB Route53 Consul クラスタ動作、ネットワーク分断に強い ejabberd

14

性能要件など

スケーラビリティ 1億台に備える

可用率 AWSリージョン規模の障害未満は稼動

遅延 ~数秒(正常時)、~数分(異常時)

インフラ費用 適切な範囲に抑える

Page 15: Nintendo Switch 向け プッシュ通知システム · ElastiCache for Redis. 25 その他 Amazon SQS ELB Route53 Consul クラスタ動作、ネットワーク分断に強い ejabberd

15

構成要素

Page 16: Nintendo Switch 向け プッシュ通知システム · ElastiCache for Redis. 25 その他 Amazon SQS ELB Route53 Consul クラスタ動作、ネットワーク分断に強い ejabberd

16

機能分割

XMPP Cluster

Nintendo Switch 向け、常時接続 & 通知

Consumer API

Nintendo Switch 向け、ID 管理

Provider API

サーバ間連携向け、通知送信要求

Page 17: Nintendo Switch 向け プッシュ通知システム · ElastiCache for Redis. 25 その他 Amazon SQS ELB Route53 Consul クラスタ動作、ネットワーク分断に強い ejabberd

17

関係図

XMPP Cluster

XMPP Cluster

XMPP Cluster

Provider APIConsumer API

通知送信者

Page 18: Nintendo Switch 向け プッシュ通知システム · ElastiCache for Redis. 25 その他 Amazon SQS ELB Route53 Consul クラスタ動作、ネットワーク分断に強い ejabberd

18

Provider API

通知送信者

Consumer API

XMPP Cluster

XMPP Cluster

XMPP Cluster

Consumer API

RESTful API

Page 19: Nintendo Switch 向け プッシュ通知システム · ElastiCache for Redis. 25 その他 Amazon SQS ELB Route53 Consul クラスタ動作、ネットワーク分断に強い ejabberd

19

Provider API

通知送信者

Consumer API

XMPP Cluster

XMPP Cluster

XMPP Cluster

XMPP Cluster

XMPP

Page 20: Nintendo Switch 向け プッシュ通知システム · ElastiCache for Redis. 25 その他 Amazon SQS ELB Route53 Consul クラスタ動作、ネットワーク分断に強い ejabberd

20

Consumer API

Provider API

XMPP Cluster

XMPP Cluster

XMPP Cluster

Provider API

通知送信者

RESTful API

Page 21: Nintendo Switch 向け プッシュ通知システム · ElastiCache for Redis. 25 その他 Amazon SQS ELB Route53 Consul クラスタ動作、ネットワーク分断に強い ejabberd

21

通知送信者

Provider APIConsumer API

XMPP Cluster

XMPP Cluster

XMPP Cluster

XMPP Cluster

Page 22: Nintendo Switch 向け プッシュ通知システム · ElastiCache for Redis. 25 その他 Amazon SQS ELB Route53 Consul クラスタ動作、ネットワーク分断に強い ejabberd

22

XMPP Cluster 採用技術

ejabberd

Erlang で書かれた OSS

クラスタ対応の XMPP サーバ

大規模な利用実績が多い

RDS for MySQL 5.7

高負荷時のレプリ遅延が少ない

ElastiCache for Redis

Page 23: Nintendo Switch 向け プッシュ通知システム · ElastiCache for Redis. 25 その他 Amazon SQS ELB Route53 Consul クラスタ動作、ネットワーク分断に強い ejabberd

23

XMPP Cluster

XMPP Cluster

XMPP Cluster通知送信者

Consumer/Provider

Provider APIConsumer API

Page 24: Nintendo Switch 向け プッシュ通知システム · ElastiCache for Redis. 25 その他 Amazon SQS ELB Route53 Consul クラスタ動作、ネットワーク分断に強い ejabberd

24

Consumer/Provider 採用技術

Ruby on Rails

社内での開発 / 運用の実績から

Amazon Aurora 5.6

RDS for MySQL から乗り換え

柔軟なスケール(レプリカ数やサイズ変更)

ElastiCache for Redis

Page 25: Nintendo Switch 向け プッシュ通知システム · ElastiCache for Redis. 25 その他 Amazon SQS ELB Route53 Consul クラスタ動作、ネットワーク分断に強い ejabberd

25

その他

Amazon SQS

ELB

Route53

Consul

クラスタ動作、ネットワーク分断に強い

ejabberd の Failure Detection

Page 26: Nintendo Switch 向け プッシュ通知システム · ElastiCache for Redis. 25 その他 Amazon SQS ELB Route53 Consul クラスタ動作、ネットワーク分断に強い ejabberd

26

インフラ設計

Page 27: Nintendo Switch 向け プッシュ通知システム · ElastiCache for Redis. 25 その他 Amazon SQS ELB Route53 Consul クラスタ動作、ネットワーク分断に強い ejabberd

27

クラウド選定

AWS を IaaS として利用

社内実績

メンバーの経験/スキル

マネージドサービス (RDS, Aurora, SQS)

配置

シングルリージョン

ネットワーク安定性、リソースの利用効率向上

Multi-AZ

Page 28: Nintendo Switch 向け プッシュ通知システム · ElastiCache for Redis. 25 その他 Amazon SQS ELB Route53 Consul クラスタ動作、ネットワーク分断に強い ejabberd

28

Consul Server Consul Server

XMPP Cluster

Provider APIConsumer API

XMPP ClusterXMPP Cluster XMPP Cluster

・・・

全体像

Page 29: Nintendo Switch 向け プッシュ通知システム · ElastiCache for Redis. 25 その他 Amazon SQS ELB Route53 Consul クラスタ動作、ネットワーク分断に強い ejabberd

29

Consul Server Consul Server

XMPP Cluster

Provider APIConsumer API

XMPP ClusterXMPP Cluster XMPP Cluster

・・・

Consumer/Provider

Page 30: Nintendo Switch 向け プッシュ通知システム · ElastiCache for Redis. 25 その他 Amazon SQS ELB Route53 Consul クラスタ動作、ネットワーク分断に強い ejabberd

30

Consul Server Consul Server

Ejabberd Cluster

Provider APIConsumer API

Ejabberd ClusterEjabberd Cluster Ejabberd Cluster

・・・

XMPPクラスタ

Page 31: Nintendo Switch 向け プッシュ通知システム · ElastiCache for Redis. 25 その他 Amazon SQS ELB Route53 Consul クラスタ動作、ネットワーク分断に強い ejabberd

31

XMPPクラスタ分割

スケーラビリティ

クラスタ数変更でスケール

アプリ層の分割 よりも インフラ層で分割

安定性

クラスタ肥大化の防止

障害の局所化

運用効率

小さくデプロイ(カナリアリリース)

Page 32: Nintendo Switch 向け プッシュ通知システム · ElastiCache for Redis. 25 その他 Amazon SQS ELB Route53 Consul クラスタ動作、ネットワーク分断に強い ejabberd

32

Provider APIConsumer API

XMPP Cluster XMPP Cluster

Consul Server

XMPP Cluster XMPP Cluster

Consul Server

・・・

XMPP+Consul

Page 33: Nintendo Switch 向け プッシュ通知システム · ElastiCache for Redis. 25 その他 Amazon SQS ELB Route53 Consul クラスタ動作、ネットワーク分断に強い ejabberd

33

XMPPのロードバランス

ELB は不採用

Classic Load Balancer

常時接続に使えない

Application Load Balancer

プロトコルがあわない

Network Load Balancer

検証時期とリリース時期があわない

Page 34: Nintendo Switch 向け プッシュ通知システム · ElastiCache for Redis. 25 その他 Amazon SQS ELB Route53 Consul クラスタ動作、ネットワーク分断に強い ejabberd

34

直結+DNSラウンドロビン

Route53 に全ノードの A レコードを登録

Consul が Route53 のレコードを更新

ディスカバリは用意しない

外部向け I/F は増やさない

XMPPのロードバランス

Page 35: Nintendo Switch 向け プッシュ通知システム · ElastiCache for Redis. 25 その他 Amazon SQS ELB Route53 Consul クラスタ動作、ネットワーク分断に強い ejabberd

35

技術詳細

Page 36: Nintendo Switch 向け プッシュ通知システム · ElastiCache for Redis. 25 その他 Amazon SQS ELB Route53 Consul クラスタ動作、ネットワーク分断に強い ejabberd

36

1. クラスタ維持方法

2. デプロイ方法

3. 省メモリ化

4. TCP 切断対策

Page 37: Nintendo Switch 向け プッシュ通知システム · ElastiCache for Redis. 25 その他 Amazon SQS ELB Route53 Consul クラスタ動作、ネットワーク分断に強い ejabberd

37

クラスタ維持

ejabberdを二方向から死活監視

Consul

すぐ反応

Route53 エントリの管理 (TTL=30)

Auto Scaling

慎重に様子見

異常のあるインスタンスの置き換え

Page 38: Nintendo Switch 向け プッシュ通知システム · ElastiCache for Redis. 25 その他 Amazon SQS ELB Route53 Consul クラスタ動作、ネットワーク分断に強い ejabberd

38

Auto Scaling Group

XMPP Server 1

XMPP Server 2

XMPP Server 3

XMPP Cluster

Consul Cluster

XMPP Server 1 IP Address

XMPP Server 2 IP Address

XMPP Server 3 IP Address

Service Domain / A Records

クラスタ維持 [1/6]

Page 39: Nintendo Switch 向け プッシュ通知システム · ElastiCache for Redis. 25 その他 Amazon SQS ELB Route53 Consul クラスタ動作、ネットワーク分断に強い ejabberd

39

Auto Scaling Group

XMPP Server 1

XMPP Server 2

XMPP Server 3

XMPP Cluster

Consul Cluster

XMPP Server 1 IP Address

XMPP Server 2 IP Address

XMPP Server 3 IP Address

Service Domain / A Records

クラスタ維持 [2/6]

Page 40: Nintendo Switch 向け プッシュ通知システム · ElastiCache for Redis. 25 その他 Amazon SQS ELB Route53 Consul クラスタ動作、ネットワーク分断に強い ejabberd

40

Auto Scaling Group

XMPP Server 1

XMPP Server 2

XMPP Server 3

XMPP Cluster

Consul Cluster

XMPP Server 1 IP Address

XMPP Server 2 IP Address

XMPP Server 3 IP Address

Service Domain / A Records

クラスタ維持 [3/6]

Page 41: Nintendo Switch 向け プッシュ通知システム · ElastiCache for Redis. 25 その他 Amazon SQS ELB Route53 Consul クラスタ動作、ネットワーク分断に強い ejabberd

41

Auto Scaling Group

XMPP Server 1

XMPP Server 2

XMPP Server 3

XMPP Cluster

Consul Cluster

XMPP Server 1 IP Address

XMPP Server 2 IP Address

Service Domain / A Records

クラスタ維持 [4/6]

Page 42: Nintendo Switch 向け プッシュ通知システム · ElastiCache for Redis. 25 その他 Amazon SQS ELB Route53 Consul クラスタ動作、ネットワーク分断に強い ejabberd

42

Auto Scaling Group

XMPP Server 1

XMPP Server 2

XMPP Server 3

XMPP Server 4

XMPP Cluster

Consul Cluster

XMPP Server 1 IP Address

XMPP Server 2 IP Address

XMPP Server 4 IP Address

Service Domain / A Records

クラスタ維持 [5/6]

Page 43: Nintendo Switch 向け プッシュ通知システム · ElastiCache for Redis. 25 その他 Amazon SQS ELB Route53 Consul クラスタ動作、ネットワーク分断に強い ejabberd

43

Auto Scaling Group

XMPP Server 1

XMPP Server 2 XMPP Server 4

XMPP Cluster

Consul Cluster

XMPP Server 1 IP Address

XMPP Server 2 IP Address

XMPP Server 4 IP Address

Service Domain / A Records

クラスタ維持 [6/6]

Page 44: Nintendo Switch 向け プッシュ通知システム · ElastiCache for Redis. 25 その他 Amazon SQS ELB Route53 Consul クラスタ動作、ネットワーク分断に強い ejabberd

44

Blue/Green Deploy

ASG 単位でドメイン切り替え

新旧両方を1つのクラスタに

旧ノードからユーザを一定レートで追い出す=ドリップ処理

デプロイ

Page 45: Nintendo Switch 向け プッシュ通知システム · ElastiCache for Redis. 25 その他 Amazon SQS ELB Route53 Consul クラスタ動作、ネットワーク分断に強い ejabberd

45

スムーズな切り替え

接続を少しずつ Blue Green に移動

ドリップ処理

Connections

Time

Login 分散 / 切断時間短

Page 46: Nintendo Switch 向け プッシュ通知システム · ElastiCache for Redis. 25 その他 Amazon SQS ELB Route53 Consul クラスタ動作、ネットワーク分断に強い ejabberd

46

スムーズな切り替え

接続を少しずつ Blue Green に移動

常時接続では接続処理が最も高負荷

再接続タイミングを分散させたい

ドリップ処理

Connections

Time

Connections

Time

Login 分散 / 切断時間短

Login 集中 / 切断時間 短

Page 47: Nintendo Switch 向け プッシュ通知システム · ElastiCache for Redis. 25 その他 Amazon SQS ELB Route53 Consul クラスタ動作、ネットワーク分断に強い ejabberd

47

ドリップ処理

スムーズな切り替え

接続を少しずつ Blue Green に移動

常時接続では接続処理が最も高負荷

再接続タイミングを分散させたい

切断期間は短くしたい

Connections

Time

Connections

Time

Connections

Time

Login 分散 / 切断時間短

Login 集中 / 切断時間 短

Login 分散 / 切断時間 長

Page 48: Nintendo Switch 向け プッシュ通知システム · ElastiCache for Redis. 25 その他 Amazon SQS ELB Route53 Consul クラスタ動作、ネットワーク分断に強い ejabberd

48

ドリップ処理

スムーズな切り替え

接続を少しずつ Blue Green に移動

常時接続では接続処理が最も高負荷

再接続タイミングを分散させたい

切断期間は短くしたい

やっかいな点

デプロイが長時間化 → 今は約2時間

インスタンス費用がその間2倍に

Connections

Time

Connections

Time

Connections

Time

Login 分散 / 切断時間短

Login 集中 / 切断時間 短

Login 分散 / 切断時間 長

Page 49: Nintendo Switch 向け プッシュ通知システム · ElastiCache for Redis. 25 その他 Amazon SQS ELB Route53 Consul クラスタ動作、ネットワーク分断に強い ejabberd

49

Blue/Green デプロイ [1/6]

XMPP ASG 1.NPNS.DOMAIN

XMPP Service.NPNS.DOMAIN

XMPP ASG 1

XMPP Cluster

ALIAS

A records

Page 50: Nintendo Switch 向け プッシュ通知システム · ElastiCache for Redis. 25 その他 Amazon SQS ELB Route53 Consul クラスタ動作、ネットワーク分断に強い ejabberd

50

Blue/Green デプロイ [2/6]

XMPP ASG 1.NPNS.DOMAIN XMPP ASG 2.NPNS.DOMAIN

XMPP Service.NPNS.DOMAIN

XMPP ASG 1

XMPP Cluster

XMPP ASG 2

ALIAS

A records A records

Page 51: Nintendo Switch 向け プッシュ通知システム · ElastiCache for Redis. 25 その他 Amazon SQS ELB Route53 Consul クラスタ動作、ネットワーク分断に強い ejabberd

51

Blue/Green デプロイ [3/6]

XMPP ASG 1.NPNS.DOMAIN XMPP ASG 2.NPNS.DOMAIN

XMPP Service.NPNS.DOMAIN

XMPP ASG 1

XMPP Cluster

XMPP ASG 2

ALIAS

A records A records

Page 52: Nintendo Switch 向け プッシュ通知システム · ElastiCache for Redis. 25 その他 Amazon SQS ELB Route53 Consul クラスタ動作、ネットワーク分断に強い ejabberd

52

Blue/Green デプロイ [4/6]

XMPP ASG 1.NPNS.DOMAIN XMPP ASG 2.NPNS.DOMAIN

XMPP Service.NPNS.DOMAIN

XMPP ASG 1

XMPP Cluster

XMPP ASG 2ドリップ処理

ALIAS

A records A records

Page 53: Nintendo Switch 向け プッシュ通知システム · ElastiCache for Redis. 25 その他 Amazon SQS ELB Route53 Consul クラスタ動作、ネットワーク分断に強い ejabberd

53

Blue/Green デプロイ [5/6]

XMPP ASG 1.NPNS.DOMAIN XMPP ASG 2.NPNS.DOMAIN

XMPP Service.NPNS.DOMAIN

XMPP ASG 1

XMPP Cluster

XMPP ASG 2

ALIAS

A records A records

Page 54: Nintendo Switch 向け プッシュ通知システム · ElastiCache for Redis. 25 その他 Amazon SQS ELB Route53 Consul クラスタ動作、ネットワーク分断に強い ejabberd

54

Blue/Green デプロイ [6/6]

XMPP ASG 2.NPNS.DOMAIN

XMPP Service.NPNS.DOMAIN

XMPP Cluster

XMPP ASG 2

ALIAS

A records

Page 55: Nintendo Switch 向け プッシュ通知システム · ElastiCache for Redis. 25 その他 Amazon SQS ELB Route53 Consul クラスタ動作、ネットワーク分断に強い ejabberd

55

ドリップ処理の自動化

CloudWatch Events Auto Scaling

Run Command EC2 Instance

Lifecycle Hook (terminating)

Page 56: Nintendo Switch 向け プッシュ通知システム · ElastiCache for Redis. 25 その他 Amazon SQS ELB Route53 Consul クラスタ動作、ネットワーク分断に強い ejabberd

56

省メモリ化

インフラ費用を抑えたい

ejabberd を省メモリ化

OpenSSL のメモリ削減&解放

hibernate 前にリソースを解放

r3.large で1台あたり72万接続

ところが

CPU もメモリも空きがあるのに接続数が増えない

16KiB

40KiB

Before After

60 % Down

Page 57: Nintendo Switch 向け プッシュ通知システム · ElastiCache for Redis. 25 その他 Amazon SQS ELB Route53 Consul クラスタ動作、ネットワーク分断に強い ejabberd

57

省メモリ化

Security Group の制限を回避

セッションの上限にあたっていた

Security Group を無効に

限界まで接続可能に

セキュリティ

外部アクセスは Network ACLs で制限

Page 58: Nintendo Switch 向け プッシュ通知システム · ElastiCache for Redis. 25 その他 Amazon SQS ELB Route53 Consul クラスタ動作、ネットワーク分断に強い ejabberd

58

途中経路での異常切断を防ぐ

無通信期間に KeepAlive (L4, L7)

最適間隔を本番環境で実験

TCP 切断対策

Internet Gateway Internet ISPXMPP Server

AWS内 ユーザ回線途中経路

Nintendo Switch

Page 59: Nintendo Switch 向け プッシュ通知システム · ElastiCache for Redis. 25 その他 Amazon SQS ELB Route53 Consul クラスタ動作、ネットワーク分断に強い ejabberd

59

TCP KeepAlive (L4)

TCP ヘッダのみの特殊パケットを定期的に送信

time: ユーザごとに可変

interval x probes: クラスタ間で対照実験

10 x 2 15 x 10

切断を 40% 削減

TCP 切断対策

40 % Down

Page 60: Nintendo Switch 向け プッシュ通知システム · ElastiCache for Redis. 25 その他 Amazon SQS ELB Route53 Consul クラスタ動作、ネットワーク分断に強い ejabberd

60

TCP 切断対策

アプリケーション KeepAlive (L7)

データを入れたパケットを定期的に送信

送信間隔: クラスタ間で対照実験

送信無し 65秒間隔

切断を 50% 削減50 % Down

Page 61: Nintendo Switch 向け プッシュ通知システム · ElastiCache for Redis. 25 その他 Amazon SQS ELB Route53 Consul クラスタ動作、ネットワーク分断に強い ejabberd

61

振り返り

Page 62: Nintendo Switch 向け プッシュ通知システム · ElastiCache for Redis. 25 その他 Amazon SQS ELB Route53 Consul クラスタ動作、ネットワーク分断に強い ejabberd

62

同時接続数[台]

通知送信数[通/秒]

通知送信処理見直し(2)通知送信処理見直し(1)

5月 6月 7月 8月 9月 10月 11月 12月 2018年1月 2月 3月 4月

5月 6月 7月 8月 9月 10月 11月 12月 2018年1月 2月 3月 4月

Page 63: Nintendo Switch 向け プッシュ通知システム · ElastiCache for Redis. 25 その他 Amazon SQS ELB Route53 Consul クラスタ動作、ネットワーク分断に強い ejabberd

63

規模

約700万 同時接続

約2万 通/秒

約200億 通/月

Page 64: Nintendo Switch 向け プッシュ通知システム · ElastiCache for Redis. 25 その他 Amazon SQS ELB Route53 Consul クラスタ動作、ネットワーク分断に強い ejabberd

64

AWS の異常発生した異常

局所的なネットワーク異常

RDS I/O 遅延

EBS 遅延

EC2 インスタンス異常停止

NPNS サービスへの影響

AZ 冗長等により、サービスは正常稼動を維持

Page 65: Nintendo Switch 向け プッシュ通知システム · ElastiCache for Redis. 25 その他 Amazon SQS ELB Route53 Consul クラスタ動作、ネットワーク分断に強い ejabberd

65

Erlang での運用良かった点

安定性

VM、クラスタ、プロセス監視ツリー

メモリ効率

軽量プロセス、hibernate

並列性

プロセス構成にだけは注意

hot code loading

緊急時に使用

Page 66: Nintendo Switch 向け プッシュ通知システム · ElastiCache for Redis. 25 その他 Amazon SQS ELB Route53 Consul クラスタ動作、ネットワーク分断に強い ejabberd

66

ejabberd 改造内容並列性の向上

プロセス構成

gen_server 見直し

Supervisor 見直し

自分でやる or ワーカー生成

DB アクセス最少化

安定性・耐障害性の向上

Mnesia のノード間同期を停止

DB 切断時に XMPP も早期切断

大量切断に耐える

省メモリ化

Hibernate まわり

OpenSSL の使い方

ログ出力の詳細化

ユーザー行動追跡

CRASH ログで汚さない

独自機能

全員に同報通知

デプロイ用の機能

TCP 接続維持

Page 67: Nintendo Switch 向け プッシュ通知システム · ElastiCache for Redis. 25 その他 Amazon SQS ELB Route53 Consul クラスタ動作、ネットワーク分断に強い ejabberd

67

まとめと展望

Page 68: Nintendo Switch 向け プッシュ通知システム · ElastiCache for Redis. 25 その他 Amazon SQS ELB Route53 Consul クラスタ動作、ネットワーク分断に強い ejabberd

68

まとめ

Nintendo Switch 向けプッシュ通知システムを構築

必要要件を達成

スケーラビリティ: XMPP クラスタ分割, Aurora

可用性: Auto Scaling, B/G デプロイ, TCP 切断対策

インフラ費用: 省メモリ化

AWS 起因のサービス停止は無かった

サービス規模は順調に成長

Page 69: Nintendo Switch 向け プッシュ通知システム · ElastiCache for Redis. 25 その他 Amazon SQS ELB Route53 Consul クラスタ動作、ネットワーク分断に強い ejabberd

69

今後の展望

NLB

Cross-AZ 指定ができるようになった今こそ

XMPP クラスタロードバランサに利用

consul を取り外してシンプル化

Fargate

Consumer/Provider に導入予定

Page 70: Nintendo Switch 向け プッシュ通知システム · ElastiCache for Redis. 25 その他 Amazon SQS ELB Route53 Consul クラスタ動作、ネットワーク分断に強い ejabberd

70

We Are Hiring!

Webエンジニア (Rails, SpringBoot, …)

ネットワークインフラエンジニア (Public Cloud, k8s, …)

ネットワークサービスシステムエンジニア

サーバセキュリティエンジニア

...

「任天堂 キャリア採用」で検索

https://www.nintendo.co.jp/jobs/career/

Page 71: Nintendo Switch 向け プッシュ通知システム · ElastiCache for Redis. 25 その他 Amazon SQS ELB Route53 Consul クラスタ動作、ネットワーク分断に強い ejabberd

71

ご静聴ありがとうございました