90
リクルートテクノロジーズ 宮川 大規模プッシュ通知基盤を実現したアーキテクチャ 〜1000万人に15分でプッシュ通知

システム高速化フォーラム向け プッシュ通知基盤のアーキテクチャ

Embed Size (px)

Citation preview

Page 1: システム高速化フォーラム向け プッシュ通知基盤のアーキテクチャ

リクルートテクノロジーズ 宮川

大規模プッシュ通知基盤を実現したアーキテクチャ〜1000万人に15分でプッシュ通知

Page 2: システム高速化フォーラム向け プッシュ通知基盤のアーキテクチャ

2

宮川 典久

株式会社リクルートテクノロジーズITマネジメント統括部APソリューショングループ

自己紹介

Twitter @m_nori

出身地 東京

趣味 ロードバイクゲーム(最近はMH4G)折り紙

Page 3: システム高速化フォーラム向け プッシュ通知基盤のアーキテクチャ

3(C) Recruit Technologies Co.,Ltd. All rights reserved.

アジェンダ

1. はじめに

2. PUSH通知に対する取り組み

3. 高速化のためのアーキテクチャ

• 全体構成

• 機能間の非同期化

• DynamoDBによるI/Oの高速化

• ノンブロッキングI/Oの活用

• elasticsearchによる条件指定配信

• その他高速化の取り組み

4. まとめ

Page 4: システム高速化フォーラム向け プッシュ通知基盤のアーキテクチャ

1.はじめに

4

Page 5: システム高速化フォーラム向け プッシュ通知基盤のアーキテクチャ

旅行

IT/トレンド

生活/地域情報

グルメ・美容

ライフスタイル領域ライフイベント領域

進学

就職

結婚

転職

住宅購入

車購入

出産/育児

「選択・意思決定」を支援する情報サービスの提供

→「まだ、ここにない、出会い。」の実現へ

リクルートとは

5

Page 6: システム高速化フォーラム向け プッシュ通知基盤のアーキテクチャ

リクルートキャリア

リクルートジョブズ

リクルートスタッフィング

リクルート住まいカンパニー

リクルートライフスタイル

リクルートマーケティングパートナーズ

スタッフサービス・ホールディングス

リクルートアドミニストレーション

リクルートコミュニケーションズ

事業会社

機能会社 インフラ部門

大規模プロジェクト推進部門

UI設計/SEO部門

ビッグデータ機能部門

テクノロジーR&D部門

事業・社内IT推進部門

リクルートホールディングス

リクルートとは、主要7事業会社+3機能会社で構成されるグループ企業群

6

リクルートテクノロジーズとは

Page 7: システム高速化フォーラム向け プッシュ通知基盤のアーキテクチャ

リクルートテクノロジーズの役割

7(C) Recruit Technologies Co.,Ltd. All rights reserved.

開拓

実装、展開運用テクノロジーライフサイクル

≪テクノロジーへの考え方≫

「開拓」「実装・展開」を経た「運用」でリクルートへの利益貢献を行う。

Page 8: システム高速化フォーラム向け プッシュ通知基盤のアーキテクチャ

リクルートテクノロジーズの役割

8(C) Recruit Technologies Co.,Ltd. All rights reserved.

広範囲のビジネスに装着し、効果を最大化させるための改善を行い、事業貢献利益を追究

Rグループのビジネスに短・中期的に実活用の可能性がある技術をリサーチ対象技術における事業化への検証を行い、評価・選定する

開拓(実活用研究)

実際に事業へ適用し、より広範囲に利用するための型化やスキームを構築

実装・展開 運用

実施内容

リクルートテクノロジーズ(短・中期的視野)

利益を目的としない中長期的な視点に立ち、新技術や新手法の研究/発明を行い、論文発表することを目指す

要素基礎技術の研究

社外(中・長期的視野)

技術数の推移イメージ

年間約200の技術をリサーチし、約30の技術を評価・選定

年間数個〜10個の技術を展開

運用フェーズまで移行された技術が蓄積

無数の新技術を研究/発明

Page 9: システム高速化フォーラム向け プッシュ通知基盤のアーキテクチャ

ASGとは

9(C) Recruit Technologies Co.,Ltd. All rights reserved.

リクルート共通インフラ

アプリケーション基盤

各サイト 各サイト 各サイト 各サイト

NETWORKOSH/W

M/W framework 共通コンポーネント

開発・運用

アーキテクト支援

先端技術の適用

Page 10: システム高速化フォーラム向け プッシュ通知基盤のアーキテクチャ

ASGとは

10(C) Recruit Technologies Co.,Ltd. All rights reserved.

技術数の推移イメージ

ATL ASG

開拓(実活用研究) 実装・展開 運用

Page 11: システム高速化フォーラム向け プッシュ通知基盤のアーキテクチャ

2.PUSH通知に対する取り組み

11

Page 12: システム高速化フォーラム向け プッシュ通知基盤のアーキテクチャ

PUSH通知へとは

12(C) Recruit Technologies Co.,Ltd. All rights reserved.

Push!

Push!

APNsApple Push Notification Service

ユーザがアプリを起動していなくても待ち受け画面に通知を送ることが出来る

GCMGoogle Cloud Messaging

Page 13: システム高速化フォーラム向け プッシュ通知基盤のアーキテクチャ

PUSH通知の効果

13(C) Recruit Technologies Co.,Ltd. All rights reserved.

メリット

• 休眠ユーザの再起

• ユーザのアクティブ率向上

• リアルタイムな情報配信

デメリット

• 実装の工数がかかる

• 過剰なプッシュによるユーザ離れのリスク

ここに対する取り組みとして2011年にPUSH通知基盤を開発

プッシュ通知は開封率が高いため、メルマガに変わる販促ツールとして注目されている

Page 14: システム高速化フォーラム向け プッシュ通知基盤のアーキテクチャ

PUSH通知への取り組み

14(C) Recruit Technologies Co.,Ltd. All rights reserved.

サービス開始

• 2011年

インフラ

• AWS

開発言語

• Ruby

フレームワーク

• Ruby On Rails

DB

• MySQL

APNs

Pusna

Pusna

構成図構成

GCM

Page 15: システム高速化フォーラム向け プッシュ通知基盤のアーキテクチャ

Pusnaの課題

15(C) Recruit Technologies Co.,Ltd. All rights reserved.

0

5000000

10000000

15000000

20000000

25000000

20120209 20120807 20130203 20130802

2012/12ペースUP

100

120

140

160

180

200

220

2011年 2012年 2013年 2014年10月

アプリ数の遷移

Androidアプリ iOSアプリ

デバイス登録数の遷移

アプリ数の増加に伴いプッシュ数も急増。プッシュ通知の重要性上昇に伴い、求められるSLAも高まる。

Page 16: システム高速化フォーラム向け プッシュ通知基盤のアーキテクチャ

Pusnaの課題

16(C) Recruit Technologies Co.,Ltd. All rights reserved.

Pusna

APNs

Pusna

デバイス数増化に対応するスケーラビリティ リアルタイムな情報配信

GCM

Page 17: システム高速化フォーラム向け プッシュ通知基盤のアーキテクチャ

Pusnaの課題

17(C) Recruit Technologies Co.,Ltd. All rights reserved.

アプリの特性に応じてターゲットとなる時間内に送りきれないと効果が激減する

6時 9時 12時 15時 18時 21時 24時

通勤時間 昼休み 帰宅後帰宅直前

情報発信 購買行動の催促仕事後の行動催促

時間内に遅れない場合日を分割する送る運用対処を実施1000万件のPUSHに一週間かかる状況

Page 18: システム高速化フォーラム向け プッシュ通知基盤のアーキテクチャ

Pusnaの課題

18(C) Recruit Technologies Co.,Ltd. All rights reserved.

メリット

• 休眠ユーザの再起

• ユーザのアクティブ率向上

• リアルタイムな情報配信

デメリット

• 実装の工数がかかる

• 過剰なプッシュによるユーザ離れのリスク

普及に伴い求められる要件も増加

Page 19: システム高速化フォーラム向け プッシュ通知基盤のアーキテクチャ

課題に対する打ち手

19(C) Recruit Technologies Co.,Ltd. All rights reserved.

課題・要望

• アクティブ率向上への施策

• 求められる高いSLA

• デバイス数の急増

• リアルタイムな情報配信

打ち手

AWSの有効活用

アーキテクチャの抜本的変更

ビックデータ基盤との連携• 休眠ユーザの再起

PusnaRSとして再構築することを決断

現行課題

新たな要望

Page 20: システム高速化フォーラム向け プッシュ通知基盤のアーキテクチャ

3.高速化を実現したアーキテクチャ

Page 21: システム高速化フォーラム向け プッシュ通知基盤のアーキテクチャ

開発概要

21(C) Recruit Technologies Co.,Ltd. All rights reserved.

開発期間

• 2013年9月~2013年12月

サービス開始

• 2013年12月末

開発体制

• APソリューショングループ:5人

•スマートデバイスグループ:3名

PusnaRS

インフラ

• AWS

開発言語

• Node.js v0.8.26

フレームワーク

• express

DB

• DynamoDB

検索エンジン

• elasticsearch

システム構成開発体制

Page 22: システム高速化フォーラム向け プッシュ通知基盤のアーキテクチャ

全体構成

Page 23: システム高速化フォーラム向け プッシュ通知基盤のアーキテクチャ

全体構成

23(C) Recruit Technologies Co.,Ltd. All rights reserved.

DynamoDB

elasticsearch

クラスタ

デバイス登録リクエスト

APNs/GCMサーバ

登録API

データ登録

配信worker

SQS

SQS登録worker

システム管理・操作用Web UI

管理API

データ参照

事業サーバ 配信担当者

Page 24: システム高速化フォーラム向け プッシュ通知基盤のアーキテクチャ

全体構成~デバイス登録

24(C) Recruit Technologies Co.,Ltd. All rights reserved.

DynamoDB

elasticsearch

クラスタ

デバイス登録リクエスト

APNs/GCMサーバ

登録API

データ登録

配信worker

SQS

SQS登録worker

システム管理・操作用Web UI

管理API

データ参照

スマホアプリ内のPusnaRS用SDK経由で登録APIにデバイス情報を送信

事業サーバ 配信担当者

Page 25: システム高速化フォーラム向け プッシュ通知基盤のアーキテクチャ

全体構成~デバイス登録

25(C) Recruit Technologies Co.,Ltd. All rights reserved.

DynamoDB

elasticsearch

クラスタ

デバイス登録リクエスト

APNs/GCMサーバ

登録API

データ登録

配信worker

SQS

SQS登録worker

システム管理・操作用Web UI

管理API

データ参照

デバイス情報をDynamoDBとElasticsearchに登録

事業サーバ 配信担当者

Page 26: システム高速化フォーラム向け プッシュ通知基盤のアーキテクチャ

全体構成~配信

26(C) Recruit Technologies Co.,Ltd. All rights reserved.

DynamoDB

elasticsearch

クラスタ

デバイス登録リクエスト

APNs/GCMサーバ

登録API

データ登録

配信worker

SQS

SQS登録worker

システム管理・操作用Web UI

管理API

配信者又は事業サーバからPUSH配信をリクエスト

事業サーバ 配信担当者

Page 27: システム高速化フォーラム向け プッシュ通知基盤のアーキテクチャ

全体構成~配信

27(C) Recruit Technologies Co.,Ltd. All rights reserved.

DynamoDB

elasticsearch

クラスタ

デバイス登録リクエスト

APNs/GCMサーバ

登録API

データ登録

配信worker

SQS

SQS登録worker

システム管理・操作用Web UI

管理API

配信要求を元に対象デバイスを抽出

事業サーバ 配信担当者

配信タイプに応じてDynamoDB又はelasticsearchからデバイス情報を抽出

Page 28: システム高速化フォーラム向け プッシュ通知基盤のアーキテクチャ

全体構成~配信

28(C) Recruit Technologies Co.,Ltd. All rights reserved.

DynamoDB

Elasticsearch

クラスタ

デバイス登録リクエスト

APNs/GCMサーバ

登録API

データ登録

配信worker

SQS

SQS登録worker

システム管理・操作用Web UI

管理API

抽出したデバイス情報をAPNs又はGCMへ送信

事業サーバ 配信担当者

Page 29: システム高速化フォーラム向け プッシュ通知基盤のアーキテクチャ

Pusna高速化のポイント

29(C) Recruit Technologies Co.,Ltd. All rights reserved.

システム面

運用面

範囲

• I/Oの高速化

• 各機能の高速化

• 運用の最適化

ポイント

• elasticsearchによる条件指定配信- 配信条件の指定を実現することにより、配信作業を高速化

• 無停止リリース- システム停止無しでのリリースによりエンハンスを高速化

• 機能間の非同期化- SQSを活用して非同期化し、各処理を単純化

• DynamoDBによるI/Oの高速化- DynamoDBを活用することでI/Oのスピードを高速化

• ノンブロッキングI/Oの活用- ノンブロッキングI/Oの活用によりI/Oの活用効率を最適化

Page 30: システム高速化フォーラム向け プッシュ通知基盤のアーキテクチャ

機能間の非同期化

Page 31: システム高速化フォーラム向け プッシュ通知基盤のアーキテクチャ

機能間の非同期化

31(C) Recruit Technologies Co.,Ltd. All rights reserved.

DynamoDB

elasticsearch

クラスタ

デバイス登録リクエスト

APNs/GCMサーバ

登録API

データ登録

配信worker

SQS

SQS登録worker

システム管理・操作用Web UI

管理API

データ参照

事業サーバ 配信担当者

Page 32: システム高速化フォーラム向け プッシュ通知基盤のアーキテクチャ

機能間の非同期化

32(C) Recruit Technologies Co.,Ltd. All rights reserved.

登録API 登録Workerデバイス登録キューELB

DynamoDB

elasticsearch

デバイス登録

各機能間の連携をSQSで行うことで、一つ一つの処理を単純化

Page 33: システム高速化フォーラム向け プッシュ通知基盤のアーキテクチャ

機能間の非同期化

33(C) Recruit Technologies Co.,Ltd. All rights reserved.

登録APIの性能登録API

デバイス登録

リクエストの受付

パラメーターチェック

キューへの登録

登録Worker

キューからの受け取り

永続化

キューからの削除

m1.small:60request per second

CPU使用率

Latency

Page 34: システム高速化フォーラム向け プッシュ通知基盤のアーキテクチャ

SQSとは

34(C) Recruit Technologies Co.,Ltd. All rights reserved.

• Amazon Simple Queue Service(SQS)はAWSが提供する分

散キューサービス。

• 高速で信頼性・スケーラビリティに優れ、低コストに使うことが

出来る。

Page 35: システム高速化フォーラム向け プッシュ通知基盤のアーキテクチャ

SQSによるメリット

35(C) Recruit Technologies Co.,Ltd. All rights reserved.

高速化

メリット

•スケーラビリティの確保

•機能分割による機能の単純化

• SNS連携によるシステム拡張性

スケーラビリティ

機能

•リトライ処理の簡易化

観点

Page 36: システム高速化フォーラム向け プッシュ通知基盤のアーキテクチャ

SQSによるメリット~スケーラビリティの確保

36(C) Recruit Technologies Co.,Ltd. All rights reserved.

Auto scaling GroupAuto scaling Group

CloudWatch CloudWatch

デバイス登録キューELB

DynamoDB

elasticsearch

デバイス登録

キューの数によってオートスケール

CPU状況に応じてオートスケール

登録API 登録Worker

Page 37: システム高速化フォーラム向け プッシュ通知基盤のアーキテクチャ

SQSによるメリット~リトライ処理の簡易化

37(C) Recruit Technologies Co.,Ltd. All rights reserved.

デバイス登録キューELB

DynamoDB

elasticsearch

処理成功時にメッセージを削除しているので処理失敗時は時間

を置いてまた処理される

デバイス登録

登録API 登録Worker

Page 38: システム高速化フォーラム向け プッシュ通知基盤のアーキテクチャ

SQSのメリット~システム拡張性

38(C) Recruit Technologies Co.,Ltd. All rights reserved.

Amazon Simple Notification Service(SNS)連携によるシステム拡張性

アプリケーション SNS

SQS

SQS

Eメール

HTTP

SNSを経由してSQSへキュー登録することで後々の拡張性を担保できる

Page 39: システム高速化フォーラム向け プッシュ通知基盤のアーキテクチャ

SQSによるメリット~システム拡張性

39(C) Recruit Technologies Co.,Ltd. All rights reserved.

デバイス登録キューELB

DynamoDB

elasticsearch

デバイス登録

ビックデータ基盤

BD基盤用デバイス登録キュー

後で実施したビックデータ基盤との連携もシステム改修無しで実現

登録API 登録Worker

Page 40: システム高速化フォーラム向け プッシュ通知基盤のアーキテクチャ

DynamoDBによるI/Oの高速化

Page 41: システム高速化フォーラム向け プッシュ通知基盤のアーキテクチャ

DynamoDBの活用

41(C) Recruit Technologies Co.,Ltd. All rights reserved.

DynamoDB

elasticsearch

クラスタ

デバイス登録リクエスト

APNs/GCMサーバ

登録API

データ登録

配信worker

SQS

SQS登録worker

システム管理・操作用Web UI

管理API

データ参照

事業サーバ 配信担当者

Page 42: システム高速化フォーラム向け プッシュ通知基盤のアーキテクチャ

DynamoDBとは

42(C) Recruit Technologies Co.,Ltd. All rights reserved.

• Amazon DynamoDBはAWSにて提供される分散KVS。

• 複数のAZ(データセンター)にわたってレプリケーションされ

ることで高い信頼性が保証されている。

• SSDで動作しておりデータ量の変化に関係なく高速に動作する。

• スキーマレスにデータを扱える。

Page 43: システム高速化フォーラム向け プッシュ通知基盤のアーキテクチャ

DynamoDBのメリット

43(C) Recruit Technologies Co.,Ltd. All rights reserved.

高速化

メリット

•スループットの管理

•全件抽出の性能

機能 •スキーマレス

観点

スケーラビリティ

Page 44: システム高速化フォーラム向け プッシュ通知基盤のアーキテクチャ

DynamoDBのメリット~全件抽出の性能

44(C) Recruit Technologies Co.,Ltd. All rights reserved.

DeviceInfoHotpepper

TokenToDeviceHotpepper

DeviceInfojalan

TokenToDevicejalan

・・・

・・・

DynamoDB

Elasticsearch登録Worker

device/hotpepper

device/jalan ・・・

配信Worker

単件

全件

検索

アプリごとの全件配信速度の向上が最大の狙い

Page 45: システム高速化フォーラム向け プッシュ通知基盤のアーキテクチャ

DynamoDBのメリット~全件抽出の性能

45(C) Recruit Technologies Co.,Ltd. All rights reserved.

セグメント1

セグメント2

セグメント3

セグメント4

配信Worker

DynamoDBはデータを物理ストレージにパーティションにデータを保存している。並列スキャンにて各セグメントを平行して抽出し、性能を向上が可能。

DeviceInfo

並列スキャン

DeviceInfo

DeviceInfo

DeviceInfo

Page 46: システム高速化フォーラム向け プッシュ通知基盤のアーキテクチャ

DynamoDBのメリット~全件抽出の性能

46(C) Recruit Technologies Co.,Ltd. All rights reserved.

並列数 件/秒 性能比

1 19830.2 1

5 42642.1 2.1

10 43996.6 2.2

リードスループット

• 1,000

1件あたりのデータサイズ

• 200バイト

総データ数

• 100万件

負荷掛け環境

• c1.medum

• node.jsで作ったデモアプリで検証

条件

並列スキャンの性能測定

結果

並列スキャンを行うことで倍以上の性能を出すことが出来る。

ただし、並列数を上げれば性能が上がるわけでもないので、チューニングが必要。

Page 47: システム高速化フォーラム向け プッシュ通知基盤のアーキテクチャ

DynamoDBのメリット~スループットの管理

47(C) Recruit Technologies Co.,Ltd. All rights reserved.

テーブル単位に読み込み性能・書き込み性能を設定可能

Page 48: システム高速化フォーラム向け プッシュ通知基盤のアーキテクチャ

DynamoDBのメリット~スループットの管理

48(C) Recruit Technologies Co.,Ltd. All rights reserved.

DeviceInfoHotpepperRead: 200Write: 100

TokenToDeviceHotpepperRead: 300Write: 100

DeviceInfoappA

Read: 3Write: 1

TokenToDeviceappA

Read: 3Write: 1

DynamoDB

アプリのデバイス数に応じてスループット設定を最適化。

・・・

・・・

Hotpepper appA

Page 49: システム高速化フォーラム向け プッシュ通知基盤のアーキテクチャ

DynamoDBのメリット~スキーマレス

49(C) Recruit Technologies Co.,Ltd. All rights reserved.

DeviceInfoアプリA

付加情報アプリA

ver1.0

年齢 都道府県

アプリA

ver1.1付加情報

年齢 都道府県 性別

アプリのバージョンアップに伴い情報を追加

アプリから送られてくる付加情報をスキーマレスに管理

年齢 都道府県

20 東京

年齢 都道府県 性別

30 神奈川 男

Page 50: システム高速化フォーラム向け プッシュ通知基盤のアーキテクチャ

ノンブロッキングI/Oの活用

Page 51: システム高速化フォーラム向け プッシュ通知基盤のアーキテクチャ

ノンブロッキングI/Oの活用箇所

51(C) Recruit Technologies Co.,Ltd. All rights reserved.

DynamoDB

elasticsearch

クラスタ

デバイス登録リクエスト

APNs/GCMサーバ

登録API

データ登録

配信worker

SQS

SQS登録worker

システム管理・操作用Web UI

管理API

データ参照

事業サーバ 配信担当者

Page 52: システム高速化フォーラム向け プッシュ通知基盤のアーキテクチャ

ノンブロッキングI/Oとは

52(C) Recruit Technologies Co.,Ltd. All rights reserved.

DynamoDB読み込み

配信Wokrer

APNs/GCM送信

DynamoDB読み込み

配信Wokrer

APNs/GCM送信

ノンブロッキングI/OブロッキングI/O

データの送受信の完了を待たずに他の処理を開始する方式

Page 53: システム高速化フォーラム向け プッシュ通知基盤のアーキテクチャ

ノンブロッキングI/Oとは

53(C) Recruit Technologies Co.,Ltd. All rights reserved.

require('fs');

console.log(‘start’);

var data1 = fs.readFileSync(‘hoge.txt’);

console.log(‘file1:’ + data1);

var data2 = fs.readFileSync(‘fuga.txt’);

console.log(‘file2:’ + data2);

console.log(‘end’);

同期IOの場合

start

file1: hoge

file2: fuge

end

Page 54: システム高速化フォーラム向け プッシュ通知基盤のアーキテクチャ

ノンブロッキングI/Oとは

54(C) Recruit Technologies Co.,Ltd. All rights reserved.

require('fs');

console.log(‘start’);

fs.readFile(‘hoge.txt’, function(err, data) {

console.log(‘file1:’ + data);

});

fs.readFile(‘fuga.txt’, function(err, data) {

console.log(‘file2:’ + data);

});

console.log(‘end’);

start

end

file1: hoge

file2: fuga

非同期IOの場合

コールバック関数を渡し、ファイル読み込み完了のイベントが発生したタイミン

グで処理を行う

Page 55: システム高速化フォーラム向け プッシュ通知基盤のアーキテクチャ

ノンブロッキングI/Oのメリット・デメリット

55(C) Recruit Technologies Co.,Ltd. All rights reserved.

メリット

• 同じ時間の処理量が多い

• I/Oの多重化が容易

デメリット

• 分岐や合流を意識する必要があり、処理が複雑化する

• 流量制御を行わないとOutOfMemoryが発生することが有り、制御が困難

Page 56: システム高速化フォーラム向け プッシュ通知基盤のアーキテクチャ

StreamAPIの活用

StreamAPIとは

56(C) Recruit Technologies Co.,Ltd. All rights reserved.

Node.jsのコアライブラリで、データの流れを操作するためのAPI

I/O結果に対する処理を「一括」ではなく「破片単位」で扱う

読み込み可能、書き込み可能、読み書き可能なStreamを定義

Stream間をパイプで繋げていく

Page 57: システム高速化フォーラム向け プッシュ通知基盤のアーキテクチャ

StreamAPIの活用

57(C) Recruit Technologies Co.,Ltd. All rights reserved.

require('fs');

console.log(‘start’);

data = fs.readFile(‘hoge.txt’,

function(err, data) {

console.log(data);

});

console.log(‘end’);

var readableStream =

fs.createReadStream(‘hoge.txt‘,

{bufferSize: 1});

readableStream.on('data',

function(data) {

console.log(data);

});

readableStream.on('end',

function() {

console.log('end');

});

一括ファイル読み込みの場合 StreamAPIの場合

データを破片単位に読み込み、非同期に処理を行う

Page 58: システム高速化フォーラム向け プッシュ通知基盤のアーキテクチャ

StreamAPIの活用

58(C) Recruit Technologies Co.,Ltd. All rights reserved.

readStream

• Readable

transformStream

• Readable/Writable

transformStream

• Readable/Writable

writeStream

• Writable

pipe() pipe() pipe()

各処理をパイプで繋げていくことで非同期I/Oを有効活用する

データ1

データ1

データ1

データ1

データ2

データ2データ3

データ4 データ3 データ2

時間

複数のデータを並行処理

Page 59: システム高速化フォーラム向け プッシュ通知基盤のアーキテクチャ

StreamAPIの活用

59(C) Recruit Technologies Co.,Ltd. All rights reserved.

readStream

• Readable

transformStream

• Readable/Writable

transformStream

• Readable/Writable

writeStream

• Writable

pipe() pipe() pipe()

全ての処理速度が同じならば問題無し

処理速度

100 100 100 100

Page 60: システム高速化フォーラム向け プッシュ通知基盤のアーキテクチャ

StreamAPIの活用

60(C) Recruit Technologies Co.,Ltd. All rights reserved.

readStream

• Readable

transformStream

• Readable/Writable

transformStream

• Readable/Writable

writeStream

• Writable

pipe() pipe() pipe()

後続が遅い場合はあまりをバッファに格納していく

処理速度

100 100 100 50

50

Page 61: システム高速化フォーラム向け プッシュ通知基盤のアーキテクチャ

StreamAPIの活用

61(C) Recruit Technologies Co.,Ltd. All rights reserved.

readStream

• Readable

transformStream

• Readable/Writable

transformStream

• Readable/Writable

writeStream

• Writable

pipe() pipe() pipe()

後続が遅い場合はあまりをバッファに格納していく

処理速度

100 100 100 50

500このままではバッファを溢れてしまう…

Page 62: システム高速化フォーラム向け プッシュ通知基盤のアーキテクチャ

StreamAPIの活用

62(C) Recruit Technologies Co.,Ltd. All rights reserved.

readStream

• Readable

transformStream

• Readable/Writable

transformStream

• Readable/Writable

writeStream

• Writable

pipe() pipe() pipe()

後続処理は待って欲しい要求を出す

処理速度

100 100 100 50

500

pause()

Page 63: システム高速化フォーラム向け プッシュ通知基盤のアーキテクチャ

StreamAPIの活用

63(C) Recruit Technologies Co.,Ltd. All rights reserved.

readStream

• Readable

transformStream

• Readable/Writable

transformStream

• Readable/Writable

writeStream

• Writable

pipe() pipe() pipe()

読み込み処理を停止させる

処理速度

100 100 100 50

500

pause()pause()pause()pause()

Page 64: システム高速化フォーラム向け プッシュ通知基盤のアーキテクチャ

StreamAPIの活用

64(C) Recruit Technologies Co.,Ltd. All rights reserved.

readStream

• Readable

transformStream

• Readable/Writable

transformStream

• Readable/Writable

writeStream

• Writable

pipe() pipe() pipe()

バッファを先に処理する

処理速度

100 100 100 50

500

Page 65: システム高速化フォーラム向け プッシュ通知基盤のアーキテクチャ

StreamAPIの活用

65(C) Recruit Technologies Co.,Ltd. All rights reserved.

readStream

• Readable

transformStream

• Readable/Writable

transformStream

• Readable/Writable

writeStream

• Writable

pipe() pipe() pipe()

バッファをある程度捌いたら処理を再開させる

処理速度

100 100 100 50

50

resume()resume()resume() resume()

Page 66: システム高速化フォーラム向け プッシュ通知基盤のアーキテクチャ

配信処理の構成

66(C) Recruit Technologies Co.,Ltd. All rights reserved.

DynamoDB

Elasticsearch

APNs

GCM

ConnectionPool

KeepAlive

データ抽出

データ形

式変換

一定件数単位に

送信

処理結果

保存

配信キュー

アプリID:xxx配信タイプ:* 全デバイス* デバイスID指定

* デバイスIDリスト* 検索条件指定

* 検索条件

search

scan

get

Page 67: システム高速化フォーラム向け プッシュ通知基盤のアーキテクチャ

配信処理の構成

67(C) Recruit Technologies Co.,Ltd. All rights reserved.

// データ抽出streamを作成var searchStream = new SearchStream(query);

// データ抽出Streamに各Streamを連結させる

searchStream.pipe(transferStream) //データ変換用stream.pipe(pushStream) //Push配信stream.pipe(resultStream); //結果格納用のstream

配信処理は全てをStreamにて実装

Page 68: システム高速化フォーラム向け プッシュ通知基盤のアーキテクチャ

配信処理の性能

68(C) Recruit Technologies Co.,Ltd. All rights reserved.

総データ数

• 1000万件

リードスループット

• 100

対象デバイス

• iOS

負荷掛け環境

• c1.medum

条件

性能測定

結果

配信時間

12分

秒間配信件数

14000

Page 69: システム高速化フォーラム向け プッシュ通知基盤のアーキテクチャ

配信処理の性能

69(C) Recruit Technologies Co.,Ltd. All rights reserved.

Auto scaling Group

CloudWatch

配信キュー

配信Worker

配信Worker

配信Worker

同時に複数の大量配信要求が来ても対応可能

APNs

GCM

自身の処理状況に応じてキューを取得するか判断する。

Page 70: システム高速化フォーラム向け プッシュ通知基盤のアーキテクチャ

elasticsearchによる条件指定配信

Page 71: システム高速化フォーラム向け プッシュ通知基盤のアーキテクチャ

運用レベルでの課題

71(C) Recruit Technologies Co.,Ltd. All rights reserved.

デバイスリストCSVによる運用

現行Pusnaの配信運用

1 デバイスリストCSVダウンロードを行う

2 デバイスリストCSVを編集

3 配信登録画面よりCSVアップロードし、登録

4 配信バッチにてプッシュ送信

CSV作成のコストは非常に高い。

数百万デバイスのCSVを作成するとシステム全体に大きな負荷がかかる。

デバイスリストCSVの編集に手作業が必要となるため運用コストが高い。

【課題】

• 一部サイトではダウンロードしたデバイスリストCSVにより、マスタデータ管理を行っているサイトもある状況

Page 72: システム高速化フォーラム向け プッシュ通知基盤のアーキテクチャ

運用レベルでの課題

72(C) Recruit Technologies Co.,Ltd. All rights reserved.

現行Pusnaの配信運用

1 デバイスリストCSVダウンロードを行う

2 デバイスリストCSVを編集

3 配信登録画面よりCSVアップロードし、登録

4 配信バッチにてプッシュ送信

デバイスリストCSVによる運用の変更

PusnaRSの配信方法

1 全デバイス配信

2 条件指定配信

3 デバイス指定配信

ビックデータ基盤との連携

Page 73: システム高速化フォーラム向け プッシュ通知基盤のアーキテクチャ

条件指定配信

73(C) Recruit Technologies Co.,Ltd. All rights reserved.

プッシュ配信API

管理用Web UIPush配信条件を指定✔ 対象アプリ:アプリB✔ 起動回数: 10回以上✔ 年齢: 18歳以上

デバイス登録API

B

{“アプリ起動回数”: 120,“好きなジャンル”: “お笑い”,“年齢”:”18”

}

付加情報

Page 74: システム高速化フォーラム向け プッシュ通知基盤のアーキテクチャ

elasticsearchとは

74(C) Recruit Technologies Co.,Ltd. All rights reserved.

• オープンソースの全文検索エンジン

• Apache Luceneベース• リアルタイム• スキーマレス• 分散環境• RESTFul API• 楽観的バージョン制御

Page 75: システム高速化フォーラム向け プッシュ通知基盤のアーキテクチャ

elasticsearchのメリット

75(C) Recruit Technologies Co.,Ltd. All rights reserved.

高速化

メリット

•クラスター構成

•検索結果の全抽出

機能 •スキーマレス

観点

スケーラビリティ

Page 76: システム高速化フォーラム向け プッシュ通知基盤のアーキテクチャ

その他の取り組み

Page 77: システム高速化フォーラム向け プッシュ通知基盤のアーキテクチャ

無停止リリース

Page 78: システム高速化フォーラム向け プッシュ通知基盤のアーキテクチャ

無停止リリース

78(C) Recruit Technologies Co.,Ltd. All rights reserved.

インスタンス削除

運用者

Auto scaling Group

Elastic

Beanstalk

インスタンス作成Gitサーバ

Auto scaling Group

Elastic

Beanstalk

インスタンス名変更

リリーススクリプト

uploadGitリポジトリから最新のソースを取得し、Beanstalk環境を再作成する。

release動作中のBeanstalkと新規に作成したBeanstalkのインスタンス名を変更して、接続先を切り替える。

destroy旧環境を削除する。

Page 79: システム高速化フォーラム向け プッシュ通知基盤のアーキテクチャ

リアルタイムでのログ可視化

Page 80: システム高速化フォーラム向け プッシュ通知基盤のアーキテクチャ

リアルタイムでのログ可視化

80(C) Recruit Technologies Co.,Ltd. All rights reserved.

td-agent

Access.log

Node.log

td-agent

Access.log

Node.log

td-agent

Access.log

Node.log

pub-que

reg-que

reg-api

Elasticsearchfluentd server

管理サーバ

Kibana

Kibana

Amazon S3

log

Page 81: システム高速化フォーラム向け プッシュ通知基盤のアーキテクチャ

シングルページアプリケーションの高速化

Page 82: システム高速化フォーラム向け プッシュ通知基盤のアーキテクチャ

シングルページアプリケーションの高速化

82(C) Recruit Technologies Co.,Ltd. All rights reserved.

DynamoDB

elasticsearch

クラスタ

デバイス登録リクエスト

APNs/GCMサーバ

登録API

データ登録

配信worker

SQS

SQS登録worker

システム管理・操作用Web UI

管理API

データ参照

事業サーバ 配信担当者

Page 83: システム高速化フォーラム向け プッシュ通知基盤のアーキテクチャ

シングルページアプリケーションの高速化

83(C) Recruit Technologies Co.,Ltd. All rights reserved.

HTML

ブラウザ

APIサーバ

Webサーバ

JavaScript

仕組み上どうしても初回の画面表示が遅くなる

Page 84: システム高速化フォーラム向け プッシュ通知基盤のアーキテクチャ

シングルページアプリケーションの高速化

84(C) Recruit Technologies Co.,Ltd. All rights reserved.

• Backbone.jsをクライアントだけでなくサーバサイドでも動かす

ライブラリ

• 初回のレンダリングをサーバサイドで行うことで高速なレスポン

スを返すことが出来る

Page 85: システム高速化フォーラム向け プッシュ通知基盤のアーキテクチャ

シングルページアプリケーションの高速化

85(C) Recruit Technologies Co.,Ltd. All rights reserved.

mng-view mng-api

SyncHTML

mng-view mng-api

Sync

HTML

ブラウザ

ブラウザ

初回アクセス時

2回目以降

ApiProxy

Page 86: システム高速化フォーラム向け プッシュ通知基盤のアーキテクチャ

4.まとめ

Page 87: システム高速化フォーラム向け プッシュ通知基盤のアーキテクチャ

まとめ

87(C) Recruit Technologies Co.,Ltd. All rights reserved.

Push通知への要望

5000万デバイス以上に耐えられるスケーラビリティ

ノンストップでのリリース

1000万件を15分で一括配信

ビックデータを活用したターゲティングを実現

PusnaRS

Pusn

a

での課題

新たな価値

デバイス数の急増

高水準のSLA

リアルタイムな情報配信

アクティブ率向上への施策

休眠ユーザの再起

PUSH通知基盤としての価値

Page 88: システム高速化フォーラム向け プッシュ通知基盤のアーキテクチャ

まとめ

88(C) Recruit Technologies Co.,Ltd. All rights reserved.

システム面

運用面

処理の高速化

I/Oの高速化

要件の再確認

運用の高速化

使えそうな技術

• elasticsearch等の検索エンジン

• SQS等による非同期連携

• DynamoDB等のKVS

• ノンブロッキングI/O

• Hadoop等のビックデータ技術

• Rendr等のSPA高速化

• 無停止リリース

• リアルタイム・ログ可視化

観点

システムの高速化のポイント

Page 89: システム高速化フォーラム向け プッシュ通知基盤のアーキテクチャ

まとめ

リクルートテクノロジーズではPusnaRS以外も様々な先端技術にてリクルートのビジネスに貢献しています!

89(C) Recruit Technologies Co.,Ltd. All rights reserved.

Page 90: システム高速化フォーラム向け プッシュ通知基盤のアーキテクチャ

90(C) Recruit Technologies Co.,Ltd. All rights reserved.