[developers summit 2015 講演資料] リクルートテクノロジーズ...

206
株式会社リクルートテクノロジーズ ITマネジメント統括部 ITマネジメント1部 スマートデバイスグループ 樋口 勝彦 14,000件/秒の配信を実現した リクルートのモバイルアプリを支える プッシュ通知基盤 ~AWS上での開発・運用の中で見えてきた課題と解~ 2015/2/20

Upload: recruit-technologies

Post on 14-Jul-2015

4.193 views

Category:

Mobile


1 download

TRANSCRIPT

株式会社リクルートテクノロジーズ ITマネジメント統括部

ITマネジメント1部 スマートデバイスグループ

樋口 勝彦

14,000件/秒の配信を実現した リクルートのモバイルアプリを支える プッシュ通知基盤 ~AWS上での開発・運用の中で見えてきた課題と解~

2015/2/20

2

ひぐち かつひこ 樋口 勝彦

株式会社リクルートテクノロジーズ ITマネジメント統括部 ITマネジメント1部 スマートデバイスグループ

自己紹介

3年間SIer 2年間決済系 システム開発

リクルート 2013/5~

Tizen アプリ開発

Pusna開発 (プッシュ通知基盤)

FirefoxOS アプリ開発

幻の

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

R-Tech スマートデバイスGは リクルートグループのネイティブアプリ領域における

開発/ビジネスを牽引する横断組織

プラットフォーマーとの密な リレーション構築・情報収集

アプリ戦略の 実現

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

リクルートテクノロジーズのアプリ開発

R-tech スマートデバイスG

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

話すこと

ここ3年半の モバイル領域の急激な変化と

共に歩んできた あるプッシュ通知基盤システム

の変化/進化について

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

目次

リクルートとプッシュ通知との歩み

第1章 旧システムの限界に直面

第2章 スケーラビリティを求めての再構築

第3章 運用を通して顕在化した課題

第4章 まとめ

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

目次

リクルートとプッシュ通知との歩み

第1章 旧システムの限界に直面

第2章 スケーラビリティを求めての再構築

第3章 運用を通して顕在化した課題

第4章 まとめ

7

Push通知とは?

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

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

Push!

APNs Apple Push Notification Service

スマートデバイスの待ち受け画面に送る通知 (アプリ起動しなくても表示される)

プッシュ通知とは?

Push!

GCM Google Cloud Messaging

アプリチーム

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

メルマガに比べて開封率が高く、リアルタイム性があり 効果的な販促ツールとして認知されている

プッシュ通知の特徴

ユーザのアクティブ率向上に効果的:

• リアルタイム性を考慮した情報推薦

• 休眠ユーザの再起

アプリでの利用例:

新鮮度がある/話題になるニュースをお届け!

登録条件に合致する 新着物件をお知らせ!

自分に 好意を持った人をお知らせ!

10

リクルートのプッシュ通知への 取り組みは2011年6月から

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

11

プッシュ通知対応の工数削減を目的に プッシュ通知基盤を

フィジビリ・サービスとして 各アプリに展開

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

12

プッシュ通知対応の工数削減を目的に プッシュ通知基盤を

フィジビリ・サービスとして 各アプリに展開

Pusna Push Notification Aggregator

プッシュ通知基盤

13

当時のシステム構成

開発言語 Ruby 1.8系

FW Rails 2.3系

DB MySQL 5.4系

APNs

デバイス登録

プッシュ依頼

Pusna

GCM

14

デバイス登録数の遷移

11年6月

プッシュ通知基盤 Pusna フィジビリ・サービス化

時間

登録デバイス数

2011.06

15

デバイス登録数の遷移

11年6月 時間

登録デバイス数

プッシュ通知基盤 Pusna フィジビリ・サービス化

2011.06

16

デバイス登録数の遷移

X,000,000

11年6月 13年5月 13年7月 12年8月 時間

17

デバイス登録数の遷移

X,000,000

11年6月 13年5月 13年7月 12年8月

X00万デバイス越

時間

2012.08

18

デバイス登録数の遷移

X5,000,000

11年6月 13年5月 時間

19

デバイス登録数の遷移

X5,000,000

11年6月 13年5月 時間

樋口 リクルートテクノロジーズ入社

2013.05

20

デバイス登録数の遷移

X5,000,000

11年6月 13年5月

2013.05 樋口 入社

この頃樋口は、

21

デバイス登録数の遷移

X5,000,000

11年6月 13年5月

2013.05 樋口 入社

(幻の)

アプリ開発に。

22

デバイス登録数の遷移

X5,000,000

11年6月 13年5月

2013.05 樋口 入社

(幻の)

アプリ開発に。

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

2ヶ月後

24

デバイス登録数の遷移

X0,000,000

11年6月 13年7月

25

デバイス登録数の遷移

X0,000,000

11年6月 13年7月

樋口 Pusna のチームリーダーに。

2013.07

26

デバイス登録数の遷移

X0,000,000

11年6月 13年7月

樋口 Pusna のチームリーダーに。

2013.07

当時システムは既に 限界を迎えていた

27

デバイス登録数の遷移

X0,000,000

11年6月 13年7月

樋口 Pusna のチームリーダーに。

2013.07

(システム構成図)

デバイス登録

APNs

Pusna

GCM

プッシュ依頼

28

デバイス登録数の遷移

X0,000,000

11年6月 12年8月 13年5月 13年7月

2013.07 樋口 チームリーダー 抜擢

デバイス数 急増

APNs

Pusna

GCM

プッシュ依頼

デバイス登録

29

デバイス登録数の遷移

X0,000,000

11年6月 12年8月 13年5月 13年7月

2013.07 樋口 チームリーダー 抜擢

デバイス数 急増

APNs

Pusna

GCM

プッシュ依頼

デバイス登録

30

デバイス登録数の遷移

X0,000,000

11年6月 12年8月 13年5月 13年7月

2013.07 樋口 チームリーダー 抜擢

デバイス数 急増

APNs

Pusna

GCM

プッシュ依頼

デバイス登録

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

当時のシステムで発生していた問題

問題1:

「配信スピードが遅く、

届けたいタイミングでメッセージが送れない。」

└1000万件の配信に1週間を要した。

問題2:

「高負荷にシステムが耐えられないため、

各アプリが好きな時間にプッシュ依頼できない。」

└各アプリ担当者のプッシュ時間を調整する必要あった。

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

当時のシステムで発生していた問題

問題1:

「配信スピードが遅く、

届けたいタイミングでメッセージが送れない。」

└1000万件の配信に1週間を要した。

問題2:

「高負荷にシステムが耐えられないため、

各アプリが好きな時間にプッシュ依頼できない。」

└各アプリ担当者のプッシュ時間を調整する必要あった。

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

当時のシステムで発生していた問題

問題1:

「配信スピードが遅く、

届けたいタイミングでメッセージが送れない。」

└1000万件の配信に1週間を要した。

問題2:

「高負荷にシステムが耐えられないため、

各アプリが好きな時間にプッシュ依頼できない。」

└各アプリ担当者のプッシュ時間を調整する必要あった。

配信

処理開始

配信

処理終了

問題1 特定時間帯を狙った訴求ができない (例: 昼休み)

昼休み

終了

効果的 効果が期待できない

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

当時のシステムで発生していた問題

問題1:

「配信スピードが遅く、

届けたいタイミングでメッセージが送れない。」

└1000万件の配信に1週間を要した。

問題2:

「高負荷にシステムが耐えられないため、

各アプリが好きな時間にプッシュ依頼できない。」

└各アプリ担当者のプッシュ時間を調整する必要あった。

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

当時のシステムで発生していた問題

問題1:

「配信スピードが遅く、

届けたいタイミングでメッセージが送れない。」

└1000万件の配信に1週間を要した。

問題2:

「高負荷にシステムが耐えられないため、

各アプリが好きな時間にプッシュ依頼できない。」

└各アプリ担当者のプッシュ時間を調整する必要あった。

当時、樋口の仕事

問題2 好きな時間にプッシュ依頼ができない。

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

当時のシステムで発生していた問題

問題1:

「高負荷にシステムが耐えられないため、

各アプリが好きな時間にプッシュ依頼できない。」

各アプリ担当者のプッシュ時間を調整する必要あった。

問題2:

「配信スピードが遅く、

カスタマーに届けたいメッセージが送れない。」

1000万件の配信に1週間を要した。

当時、樋口の仕事

システム担当者

今日のプッシュスケジュール 教えてください

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

当時のシステムで発生していた問題

問題1:

「高負荷にシステムが耐えられないため、

各アプリが好きな時間にプッシュ依頼できない。」

各アプリ担当者のプッシュ時間を調整する必要あった。

問題2:

「配信スピードが遅く、

カスタマーに届けたいメッセージが送れない。」

1000万件の配信に1週間を要した。

当時、樋口の仕事

Aアプリ担当

12時からプッシュする予定です。

システム担当者

今日のプッシュスケジュール 教えてください

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

当時のシステムで発生していた問題

問題1:

「高負荷にシステムが耐えられないため、

各アプリが好きな時間にプッシュ依頼できない。」

各アプリ担当者のプッシュ時間を調整する必要あった。

問題2:

「配信スピードが遅く、

カスタマーに届けたいメッセージが送れない。」

1000万件の配信に1週間を要した。

当時、樋口の仕事

Aアプリ担当

12時からプッシュする予定です。

システム担当者

今日のプッシュスケジュール 教えてください

Bアプリ担当

12時からプッシュする予定です。

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

当時のシステムで発生していた問題

問題1:

「高負荷にシステムが耐えられないため、

各アプリが好きな時間にプッシュ依頼できない。」

各アプリ担当者のプッシュ時間を調整する必要あった。

問題2:

「配信スピードが遅く、

カスタマーに届けたいメッセージが送れない。」

1000万件の配信に1週間を要した。

当時、樋口の仕事

Aアプリ担当

12時からプッシュする予定です。

システム担当者

今日のプッシュスケジュール 教えてください

Bアプリ担当

12時からプッシュする予定です。

Cアプリ担当

12時からプッシュしたいです。

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

当時のシステムで発生していた問題

問題1:

「高負荷にシステムが耐えられないため、

各アプリが好きな時間にプッシュ依頼できない。」

各アプリ担当者のプッシュ時間を調整する必要あった。

問題2:

「配信スピードが遅く、

カスタマーに届けたいメッセージが送れない。」

1000万件の配信に1週間を要した。

当時、樋口の仕事

Aアプリ担当

12時からプッシュする予定です。

Bアプリ担当

12時からプッシュする予定です。

Cアプリ担当

12時からプッシュしたいです。

システム担当者の頭の中

3アプリ同時は無理。。 Aアプリの規模は大きいから時間かかるし、Bはニュースアプリだから後回しできない。

Cは…(略)。 B->A->Cで調整してみよう。

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

当時のシステムで発生していた問題

問題1:

「高負荷にシステムが耐えられないため、

各アプリが好きな時間にプッシュ依頼できない。」

各アプリ担当者のプッシュ時間を調整する必要あった。

問題2:

「配信スピードが遅く、

カスタマーに届けたいメッセージが送れない。」

1000万件の配信に1週間を要した。

当時、樋口の仕事

Bアプリ担当

12時からプッシュする予定です。

Cアプリ担当

12時からプッシュしたいです。

システム担当者

>Aさん プッシュ依頼時刻ですが、14時からに 変更できないでしょうか?? >Cさん お昼はシステムが混み合っておりまして、 夕方頃プッシュが可能になる見込みです。 追って、ご案内させてください。 大変申し訳ございません。

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

当時のシステムで発生していた問題

問題1:

「高負荷にシステムが耐えられないため、

各アプリが好きな時間にプッシュ依頼できない。」

各アプリ担当者のプッシュ時間を調整する必要あった。

問題2:

「配信スピードが遅く、

カスタマーに届けたいメッセージが送れない。」

1000万件の配信に1週間を要した。

当時、樋口の仕事

システム担当者

>Aさん プッシュ依頼時刻ですが、14時からに 変更できないでしょうか?? >Cさん お昼はシステムが混み合っておりまして、 夕方頃プッシュが可能になる見込みです。 追って、ご案内させてください。 大変申し訳ございません。

Cアプリ担当

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

当時のシステムで発生していた問題

問題1:

「高負荷にシステムが耐えられないため、

各アプリが好きな時間にプッシュ依頼できない。」

各アプリ担当者のプッシュ時間を調整する必要あった。

問題2:

「配信スピードが遅く、

カスタマーに届けたいメッセージが送れない。」

1000万件の配信に1週間を要した。

当時、樋口の仕事

システム担当者 樋口

>Aさん プッシュ依頼時刻ですが、14時からに 変更できないでしょうか?? >Cさん お昼はシステムが混み合っておりまして、 夕方頃プッシュが可能になる見込みです。 追って、ご案内させてください。 大変申し訳ございません。

Cアプリ担当

システム担当者

本当に申し訳ございません。。

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

当時のシステムで発生していた問題

問題1:

「高負荷にシステムが耐えられないため、

各アプリが好きな時間にプッシュ依頼できない。」

各アプリ担当者のプッシュ時間を調整する必要あった。

問題2:

「配信スピードが遅く、

カスタマーに届けたいメッセージが送れない。」

1000万件の配信に1週間を要した。

当時、樋口の仕事

システム担当者 樋口

>Aさん プッシュ依頼時刻ですが、14時からに 変更できないでしょうか?? >Cさん お昼はシステムが混み合っておりまして、 夕方頃プッシュが可能になる見込みです。 追って、ご案内させてください。 大変申し訳ございません。

Cアプリ担当

システム担当者

本当に申し訳ございません。。

当時、樋口の仕事

プッシュ配信の交通整備人

俺・・・ 何してんだろう

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

当時のシステムで発生していた問題

問題1:

「配信スピードが遅く、

届けたいタイミングでメッセージが送れない。」

└1000万件の配信に1週間を要した。

問題2:

「高負荷にシステムが耐えられないため、

各アプリが好きな時間にプッシュ依頼できない。」

└各アプリ担当者のプッシュ時間を調整する必要あった。

キャパシティ限界を迎えていた

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

目次

リクルートとプッシュ通知との歩み

第1章 旧システムの限界に直面

第2章 スケーラビリティを求めての再構築

第3章 運用を通して顕在化した課題

第4章 まとめ

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

プッシュ配信基盤の再構築

2013年夏 Pusnaの再構築が決定!

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

再構築の背景

Pusnaの再構築が決定! 2013.夏

論点

・外部ASPの利用も考慮に入れ検討。 └各アプリチームの要望に迅速対応できる内製化に。

アプリチームの要望例

・既存システムとの連携 ・レコメンドプッシュ ・セキュリティ観点 (事業会社間でのアクセス制限など)

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

再構築で解決する課題

課題1:

届けたいタイミングでメッセージが送りきれない

└Realtime 課題2:

各アプリ担当が好きな時間にプッシュ依頼できない

└ Scalable

キャパシティ問題の解決が最優先

50

Realtime &

Scalable

再構築のコンセプト

51

Realtime &

Scalable 数千万台デバイスのアクセスに耐える

1000万人に15分以内に配信できる

再構築のコンセプト

52

Pusna Push Notification Aggregator

旧プッシュ通知基盤

53

Pusna Realtime

Scalable

54

Pusna-RS Push Notification Aggregator

Realtime & Scalable

新プッシュ通知基盤

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

Realtime & Scalable 実現のため

基本アイディア Scalable └単純化と分散

Realtime └高速化 └各機能の高速化 └IOの高速化

機能間の 非同期連携

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

Realtime & Scalable 実現のため

基本アイディア

利用ツール

Scalable └単純化と分散

Realtime └高速化 └各機能の高速化 └IOの高速化

DynamoDBによる I/Oの高速化

非同期I/Oの活用 I/Oの最適化

機能間の 非同期連携

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

Realtime & Scalable 実現のため

基本アイディア

利用ツール

Scalable └単純化と分散

Realtime └高速化 └各機能の高速化 └IOの高速化

DynamoDBによる I/Oの高速化

非同期I/Oの活用 I/Oの最適化 APNs

旧Pusna

GCM

デバイス登録

プッシュ依頼

改善ポイント①

機能間の 非同期連携

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

Realtime & Scalable 実現のため

基本アイディア

利用ツール

Scalable └単純化と分散

Realtime └高速化 └各機能の高速化 └IOの高速化

DynamoDBによる I/Oの高速化

非同期I/Oの活用 I/Oの最適化 APNs

旧Pusna

GCM

デバイス登録

プッシュ依頼

改善ポイント①

機能間の 非同期連携

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

Realtime & Scalable 実現のため

基本アイディア

利用ツール

Scalable └単純化と分散

Realtime └高速化 └各機能の高速化 └IOの高速化

DynamoDBによる I/Oの高速化

非同期I/Oの活用 I/Oの最適化 APNs

旧Pusna

GCM

デバイス登録

プッシュ依頼

改善ポイント①

機能分割

機能間の 非同期連携

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

Realtime & Scalable 実現のため

基本アイディア

利用ツール

Scalable └単純化と分散

Realtime └高速化 └各機能の高速化 └IOの高速化

DynamoDBによる I/Oの高速化

非同期I/Oの活用 I/Oの最適化

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

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

分散キューサービス。

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

使うことが出来る。

SQSとは

機能間の 非同期連携

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

Realtime & Scalable 実現のため

基本アイディア

利用ツール

Scalable └単純化と分散

Realtime └高速化 └各機能の高速化 └IOの高速化

DynamoDBによる I/Oの高速化

非同期I/Oの活用 I/Oの最適化

改善ポイント②

APNs

旧Pusna

GCM

機能間の 非同期連携

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

Realtime & Scalable 実現のため

基本アイディア

利用ツール

Scalable └単純化と分散

Realtime └高速化 └各機能の高速化 └IOの高速化

DynamoDBによる I/Oの高速化

非同期I/Oの活用 I/Oの最適化

改善ポイント②

APNs

旧Pusna

GCM

機能間の 非同期連携

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

Realtime & Scalable 実現のため

基本アイディア

利用ツール

Scalable └単純化と分散

Realtime └高速化 └各機能の高速化 └IOの高速化

DynamoDBによる I/Oの高速化

非同期I/Oの活用 I/Oの最適化

改善ポイント②

I/Oの高速化

APNs

旧Pusna

GCM

機能間の 非同期連携

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

Realtime & Scalable 実現のため

基本アイディア

利用ツール

Scalable └単純化と分散

Realtime └高速化 └各機能の高速化 └IOの高速化

DynamoDBによる I/Oの高速化

非同期I/Oの活用 I/Oの最適化

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

DynamoDBとは

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

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

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

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

高速に動作する。

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

機能間の 非同期連携

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

Realtime & Scalable 実現のため

基本アイディア

利用ツール

Scalable └単純化と分散

Realtime └高速化 └各機能の高速化 └IOの高速化

DynamoDBによる I/Oの高速化

非同期I/Oの活用 I/Oの最適化

機能間の 非同期連携

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

Realtime & Scalable 実現のため

基本アイディア

利用ツール

Scalable └単純化と分散

Realtime └高速化 └各機能の高速化 └IOの高速化

DynamoDBによる I/Oの高速化

非同期I/Oの活用 I/Oの最適化

機能間の 非同期連携

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

Realtime & Scalable 実現のため

基本アイディア

利用ツール

Scalable └単純化と分散

Realtime └高速化 └各機能の高速化 └IOの高速化

DynamoDBによる I/Oの高速化

非同期I/Oの活用 I/Oの最適化

「高速化」&「単純化と分割」で Realtime & Scalable を実現

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

積極的に最新技術を採用

AWSの機能をふんだんに利用

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

積極的に最新技術を採用

AWSの機能をふんだんに利用

リクルート内サービスで運用実績のない ソフトウェアも積極採用 ※2013年秋頃当時

72

Pusna-RS Push Notification Aggregator

Realtime & Scalable

アーキテクチャについて

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

DynamoDB

elasticsearch クラスタ

デバイス登録 リクエスト

APNs/GCM サーバ

登録API

データ登録

配信worker

SQS 登録worker

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

管理API

データ参照

事業サーバ 配信担当者

全体構成

SQS

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

DynamoDB

elasticsearch クラスタ

デバイス登録 リクエスト

APNs/GCM サーバ

登録API

データ登録

配信worker

登録worker

管理API

データ参照

事業サーバ 配信担当者

全体構成

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

SQS

SQS

SQSを利用した 機能間の非同期連携

を実現

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

DynamoDB

elasticsearch クラスタ

デバイス登録 リクエスト

APNs/GCM サーバ

登録API

データ登録

配信worker

登録worker

管理API

データ参照

事業サーバ 配信担当者

全体構成

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

SQS

SQS

I/Oの高速化

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

DynamoDB

elasticsearch クラスタ

デバイス登録 リクエスト

APNs/GCM サーバ

登録API

データ登録

配信worker

SQS 登録worker

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

管理API

データ参照

事業サーバ 配信担当者

全体構成

①デバイス登録

SQS

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

DynamoDB

elasticsearch クラスタ

デバイス登録 リクエスト

APNs/GCM サーバ

登録API

データ登録

配信worker

SQS 登録worker

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

管理API

データ参照

事業サーバ 配信担当者

全体構成

SQS

②配信登録

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

DynamoDB

elasticsearch クラスタ

デバイス登録 リクエスト

APNs/GCM サーバ

登録API

データ登録

配信worker

SQS 登録worker

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

管理API

データ参照

事業サーバ 配信担当者

全体構成

SQS

③配信依頼

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

DynamoDB

elasticsearch クラスタ

デバイス登録 リクエスト

APNs/GCM サーバ

登録API

データ登録

配信worker

SQS 登録worker

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

管理API

データ参照

事業サーバ 配信担当者

デバイス登録処理

①デバイス登録

SQS

80

DynamoDB

elasticsearch クラスタ

デバイス登録 リクエスト

APNs/GCM サーバ

登録API

データ登録

配信worker

SQS 登録worker

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

管理API

データ参照

事業サーバ 配信担当者

デバイス登録処理

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

SQS

スマホアプリ内の PusnaRS用SDK経由で

登録APIにデバイス情報を送信

①デバイス登録

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

DynamoDB

elasticsearch クラスタ

デバイス登録 リクエスト

APNs/GCM サーバ

登録API

データ登録

配信worker

SQS 登録worker

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

管理API

データ参照

事業サーバ 配信担当者

デバイス登録処理

SQS

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

①デバイス登録

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

DynamoDB

elasticsearch クラスタ

デバイス登録 リクエスト

APNs/GCM サーバ

登録API

データ登録

配信worker

SQS 登録worker

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

管理API

データ参照

事業サーバ 配信担当者

配信登録

SQS

②配信登録

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

DynamoDB

elasticsearch クラスタ

デバイス登録 リクエスト

APNs/GCM サーバ

登録API

データ登録

配信worker

SQS 登録worker

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

管理API

事業サーバ 配信担当者

配信登録

SQS

②配信登録

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

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

DynamoDB

elasticsearch クラスタ

デバイス登録 リクエスト

APNs/GCM サーバ

登録API

データ登録

配信worker

SQS 登録worker

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

管理API

データ参照

事業サーバ 配信担当者

配信依頼処理

SQS

③配信依頼

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

DynamoDB

elasticsearch クラスタ

デバイス登録 リクエスト

APNs/GCM サーバ

登録API

データ登録

配信worker

SQS 登録worker

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

管理API

事業サーバ 配信担当者

配信依頼処理

SQS

③配信依頼

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

配信タイプに応じて DynamoDB または elasticsearchから

デバイス情報を抽出

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

DynamoDB

elasticsearch クラスタ

デバイス登録 リクエスト

APNs/GCM サーバ

登録API

データ登録

配信worker

SQS 登録worker

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

管理API

事業サーバ 配信担当者

配信依頼処理

SQS

③配信依頼

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

87

[PR]詳細については@IT連載記事を参照

http://www.atmarkit.co.jp/ait/articles/1412/18/news022.html

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

88

結果

89

再構築 BEFORE / AFTER

✔ □ Realtime 配信スピード:

(旧) 秒間最大41件 (新) 秒間最大 14,000件

1000万台配信実績:

(旧) 1週間 ※(分割配信) (新) 12分

90

再構築 BEFORE / AFTER

□ Realtime 配信スピード:

(旧) 秒間最大41件 (新) 秒間最大 14,000件

1000万台配信実績:

(旧) 1週間 ※(分割配信) (新) 12分

□ Scalable 登録デバイス数が数千万を超えた現在も

リリースから1年以上、完全無停止で安定稼働中

91

再構築 BEFORE / AFTER

□ Realtime 配信スピード:

(旧) 秒間最大41件 (新) 秒間最大 14,000件

1000万台配信実績:

(旧) 1週間 ※(分割配信) (新) 12分

□ Scalable 登録デバイス数が数千万を超えた現在も

リリースから1年以上、完全無停止で安定稼働中

92

そのシステムがスマートデバイスの 急速な普及により大変な状況に!

そして 平穏な日々を手に入れた

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

目次

リクルートとプッシュ通知との歩み

第1章 旧システムの限界に直面

第2章 スケーラビリティを求めての再構築

第3章 運用を通して顕在化した課題

第4章 まとめ

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

目次

リクルートとプッシュ通知との歩み

第1章 旧システムの限界に直面

第2章 スケーラビリティを求めての再構築

第3章 運用を通して顕在化した課題

第4章 まとめ

95

そのシステムがスマートデバイスの 急速な普及により大変な状況に!

平穏な日々を手に入れた

96

そのシステムがスマートデバイスの 急速な普及により大変な状況に!

平穏な日々を手に入れた

はずだった・・・

97

ある日の定時後。。 完璧に作りきった

Pusna-RS だったが、 本格運用中に発覚した

事例を3つ紹介

この章で話すこと

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

98

事例①

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

99

ある日の定時後 アラートメールを受信

100

ある日の定時後 アラートメールを受信

デバイス登録キュー が詰まっている (閾値1,000)

※ 稀に発生していた

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

101

ある日の定時後 アラートメールを受信

デバイス登録キュー が詰まっている (閾値1,000)

※ 稀に発生していた

説明

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

102

デバイス登録のキュー詰まりについて

登録 API

登録Worker

キューの処理スピード

登録キュー

エンキュー処理 デバイス登録API

リクエスト

デキュー処理 DynamoDBへの

書込み

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

103

デバイス登録のキュー詰まりについて

登録 API

登録Worker

キューの処理スピード

登録キュー

エンキュー処理 デバイス登録API

リクエスト

デキュー処理 DynamoDBへの

書込み

DynamoDBで書込みエラーが発生しないため キュー詰まりは発生しない

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

104

デバイス登録のキュー詰まりについて

キューの処理スピード

> エンキュー処理 デバイス登録API

リクエスト

デキュー処理 DynamoDBへの

書込み

登録API 登録Worker 登録キュー

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

105

デバイス登録のキュー詰まりについて

キューの処理スピード

> エンキュー処理 デバイス登録API

リクエスト

デキュー処理 DynamoDBへの

書込み

スループットエラーが発生

登録API 登録Worker 登録キュー

リトライ処理開始

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

106

デバイス登録のキュー詰まりについて

キューの処理スピード

> エンキュー処理 デバイス登録API

リクエスト

デキュー処理 DynamoDBへの

書込み

登録API 登録Worker 登録キュー

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

107

デバイス登録のキュー詰まりについて

キューの処理スピード

> エンキュー処理 デバイス登録API

リクエスト

デキュー処理 DynamoDBへの

書込み

DynamoDBで書込みエラーが発生し 処理が止まるため、キューが詰まりが発生する。

登録API 登録Worker 登録キュー

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

登録キュー 登録Worker

108

デバイス登録のキュー詰まりについて

登録API

キュー詰まり対策

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

スループットエラー発生中

登録キュー 登録Worker

109

デバイス登録のキュー詰まりについて

登録API

該当アプリのDynamoDB スループット値(Write)を上げる

キュー詰まり対策

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

スループットエラー発生中

登録キュー 登録Worker

110

デバイス登録のキュー詰まりについて

登録API

該当アプリのDynamoDB スループット値(Write)を上げる

キュー詰まり対策

アプリC

アプリB

アプリA

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

登録キュー 登録Worker

111

デバイス登録のキュー詰まりについて

登録API

該当アプリのDynamoDB スループット値(Write)を上げる

キュー詰まり対策

アプリC

アプリB

アプリA

スループット値を上げる

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

登録キュー 登録Worker

112

デバイス登録のキュー詰まりについて

登録API

該当アプリのDynamoDB スループット値(Write)を上げる

キュー詰まり対策

アプリC

アプリB

アプリA

スループットエラー発生中 スループットエラー緩和される

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

登録キュー 登録Worker

113

デバイス登録のキュー詰まりについて

登録API

該当アプリのDynamoDB スループット値(Write)を上げる

キュー詰まり対策

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

登録キュー 登録Worker

114

デバイス登録のキュー詰まりについて

登録API

該当アプリのDynamoDB スループット値(Write)を上げる

キュー詰まり対策

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

詰まり解消

115

ある日の定時後 アラートメールを受信

デバイス登録キュー が詰まっている (閾値1,000)

[再掲]

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

116

ある日の定時後 アラートメールを受信

デバイス登録キュー が詰まっている (閾値1,000)

[再掲] (型化されている運用通り) 該当アプリのDynamoDB

スループット値(write)を上げた。

対応

117

ある日の定時後 アラートメールを受信

デバイス登録キュー が詰まっている (閾値1,000)

[再掲] (型化されている運用通り) 該当アプリのDynamoDB

スループット値(write)を上げた。

想定

対応

118

ある日の定時後 アラートメールを受信

デバイス登録キュー が詰まっている (閾値1,000)

[再掲] (型化されている運用通り) 該当アプリのDynamoDB

スループット値(write)を上げた。

閾値

t

キューの深さ

Writeスループット向上 想定

対応

119

ある日の定時後 アラートメールを受信

デバイス登録キュー が詰まっている (閾値1,000)

[再掲] (型化されている運用通り) 該当アプリのDynamoDB

スループット値(write)を上げた。

実際

対応

120

ある日の定時後 アラートメールを受信

デバイス登録キュー が詰まっている (閾値1,000)

[再掲] (型化されている運用通り) 該当アプリのDynamoDB

スループット値(write)を上げた。

実際

対応

閾値 (1,000)

t

キューの深さ

Writeスループット向上

121

ある日の定時後 アラートメールを受信

デバイス登録キュー が詰まっている (閾値1,000)

[再掲] (型化されている運用通り) 該当アプリのDynamoDB

スループット値(write)を上げた。

実際

対応 キューの深さ

140万件まで膨れ上がる

(゚∀゚;)ヤ・・・ャバ.

閾値 (1,000)

t

キューの深さ

Writeスループット向上

122

該当アプリ以外の処理も 遅延することに

デバイス登録処理遅れています

123

起きていた現象

スマホアプリの実装ミス デバイス登録完了のコールバックで 再度デバイス登録をする実装に。

原因

登録API 登録Worker 登録キュー

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

リクエスト

124

起きていた現象

レスポンス

スマホアプリの実装ミス デバイス登録完了のコールバックで 再度デバイス登録をする実装に。

原因

デバイス登録の無限ループ が起きていた

登録API 登録Worker 登録キュー

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

125

起きていた現象

スマホアプリの実装ミス デバイス登録完了のコールバックで 再度デバイス登録をする実装に。

原因

登録API 登録Worker 登録キュー

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

徐々にループする端末も増える

126

起きていた現象

登録API

スマホアプリの実装ミス デバイス登録完了のコールバックで 再度デバイス登録をする実装に。

原因

スループットエラーが発生

登録キュー 登録Worker

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

127

起きていた現象

登録API

スマホアプリの実装ミス デバイス登録完了のコールバックで 再度デバイス登録をする実装に。

原因

スループットエラーが発生

ループ端末も増え続ける

登録キュー 登録Worker

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

128

起きていた現象

登録API

スマホアプリの実装ミス デバイス登録完了のコールバックで 再度デバイス登録をする実装に。

原因

スループットエラーが発生

キュー詰まり発生 ループ端末も増え続ける

登録キュー 登録Worker

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

129

起きていた現象

登録API 登録キュー 登録Worker

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

誤った打ち手1

130

起きていた現象

登録API 登録キュー 登録Worker

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

DynamoDBスループット値を上げる

誤った打ち手1

131

起きていた現象

登録API 登録キュー 登録Worker

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

スループット値を上げる

DynamoDBスループット値を上げる

誤った打ち手1

132

起きていた現象

登録API 登録キュー 登録Worker

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

デバイス登録リクエストのループは継続するため キュー詰まりは解消しない

DynamoDBスループット値を上げる

誤った打ち手1

133

起きていた現象

登録API 登録キュー 登録Worker

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

134

起きていた現象

登録API 登録キュー 登録Worker

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

ループ端末も増え続ける

135

起きていた現象

登録API 登録キュー 登録Worker

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

ループ端末も増え続ける

負荷が高まる

136

起きていた現象

登録API 登録キュー 登録Worker

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

誤った打ち手2

137

起きていた現象

登録API 登録キュー 登録Worker

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

登録APIサーバーのスケールアウト(2台->10台)

誤った打ち手2

138

起きていた現象

登録API 登録キュー 登録Worker

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

登録APIサーバーのスケールアウト(2台->10台)

誤った打ち手2

139

起きていた現象

登録API 登録キュー 登録Worker

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

登録APIサーバーのスケールアウト(2台->10台)

誤った打ち手2

さらに無限ループが加速

140

起きていた現象

登録キュー (詰まり中)

登録APIサーバーのスケールアウト(2台->10台)

誤った打ち手2

さらに無限ループが加速

141

起きていた現象

登録キュー (詰まり中)

登録APIサーバーのスケールアウト(2台->10台)

誤った打ち手2

さらに無限ループが加速

無限ループの影響で 他アプリのデバイス登録の遅延が発生した

142

単体のスマホアプリのミスによる影響が 他アプリにも生じてしまうアーキテクチャであること

着目した問題点

スマホアプリの修正版を緊急リリース

暫定対応

デバイス登録キューをアプリ毎に分割

打ち手

事象「無限デバイス登録」のまとめ

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

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

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

DynamoDB

elasticsearch

デバイス登録

アプリA

アプリA

アプリB

アプリB

アプリC

全てのアプリのデバイス登録処理を 一つのキュー(SQS)で管理

BEFORE

アプリAから大量のアクセスで アプリB,Cの登録処理が遅延しまった

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

登録API 登録Worker

アプリA登録キュー

ELB

DynamoDB

elasticsearch

デバイス登録

アプリA

アプリA

アプリB

アプリB

アプリC

一つのキューから大量に取得しないように取得数を制御している

アプリB登録キュー

アプリC登録キュー

アプリ毎にキュー(SQS)を分割することで 遅延リスクを最小限に

AFTER

145

事例からの学び

プラットフォームとして

単体アプリの影響が 全体におよぶ構成にしてはならない

146

事例②

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

147

ある日の午後 あるサービス担当者からの訴え

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

148

ある日の午後 あるサービス担当者からの訴え

プッシュ後 サービス側のサーバに

アクセス集中して 耐えられません!何とかして!

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

149

起きていた現象

APNs/GCM Pusna-RS

プッシュ依頼

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

150

起きていた現象

APNs/GCM Pusna-RS

配信

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

151

起きていた現象

APNs/GCM Pusna-RS

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

152

起きていた現象

APNs/GCM Pusna-RS

デバイス登録 リクエスト

153

起きていた現象

APNs/GCM

デバイス登録 リクエスト

プッシュ後 アプリ起動時に発生する

デバイス登録の一斉リクエスト 問題なく捌けていた

Pusna-RS

154

起きていた現象

APNs/GCM Pusna-RS

デバイス登録 リクエスト

一方で サービス側のサーバは

悲鳴を挙げていた

しかし

サービス

155

起きていた現象

APNs/GCM Pusna-RS

サービス (C) Recruit Technologies Co.,Ltd. All rights reserved.

156

起きていた現象

APNs/GCM Pusna-RS

サービスに対する リクエスト

サービス (C) Recruit Technologies Co.,Ltd. All rights reserved.

157

起きていた現象

APNs/GCM Pusna-RS

サービスに対する リクエスト

サービス (C) Recruit Technologies Co.,Ltd. All rights reserved.

158

起きていた現象

APNs/GCM Pusna-RS

サービスに対する リクエスト

サービス

例えば、500万デバイスに プッシュする場合

7分弱※1の間に

アプリのアクティブユーザが

50万※2増えることになる

※1 配信スピード: 秒間14,000件 換算 ※2 プッシュ通知の開封率: 10% 換算

スピード 違反

スピード 違反 ではなく

考慮不足

161

対応

配信Worker 配信キュー APNs/GCM

READ

配信ごとに大まかな 秒間配信数を指定できるように修正

打ち手

修正内容

プログラム内でデータソースへのScan間隔を制御 することで配信速度をコントロール

一定間隔を置いて アクセス

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

データソース

162

事例からの学び

サービス全体のユースケースを 考慮したアーキテクチャにすべき

163

事例③

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

164

今取り組んでいる話

当初想定していた2倍のスピードで 登録デバイス数が

想定のX千万に到達!

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

165

想定Doc数 5,000万

シャード 4

レプリカ数 3

ノード数 6

Elasticsearchの構成

クラスター情報

想定Doc数を超え 1シャード当たり 1000万を超える

データ量

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

166

想定Doc数 5,000万

シャード 4

レプリカ数 3

ノード数 6

Elasticsearchの構成

クラスター情報

想定Doc数を超え 1シャード当たり 1000万を超える

データ量

当然、1回1回の検索時間 も長くなり、負荷が高まる

167

想定Doc数 5,000万

シャード 4

レプリカ数 3

ノード数 6

Elasticsearchの構成

クラスター情報

想定Doc数を超え 1シャード当たり 1000万を超える

データ量

セグメンテーションプッシュの

利用頻度も上がり、

高負荷な状態は慢性化していた

さらに

168

想定Doc数 5,000万

シャード 4

レプリカ数 3

ノード数 6

Elasticsearchの構成

クラスター情報

想定Doc数を超え 1シャード当たり 1000万を超える

データ量

OutOfMemoryが発生!

そんな時

169

想定Doc数 5,000万

シャード 4

レプリカ数 3

ノード数 6

Elasticsearchの構成

クラスター情報

想定Doc数を超え 1シャード当たり 1000万を超える

データ量

OutOfMemoryが発生!

一部のプッシュが遅延した。

そんな時

170

打ち手

1シャード当たりのドキュメント数が多く検索負荷が高い

問題

事象「Elasticsearch高負荷」のまとめ

シャード

想定Doc数

Doc数/シャード

4

5,000万

1,250万

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

171

シャード数を増やした構成に再構築する

打ち手

1シャード当たりのドキュメント数が多く検索負荷が高い

問題

事象「Elasticsearch高負荷」のまとめ

シャード

想定Doc数

Doc数/シャード

4

5,000万

1,250万

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

172

シャード数を増やした構成に再構築する

打ち手

1シャード当たりのドキュメント数が多く検索負荷が高い

問題

事象「Elasticsearch高負荷」のまとめ

シャード 10↑

- 想定Doc数

変更後すぐ

500万↓ Doc数/シャード

4

5,000万

1,250万

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

173

シャード数を増やした構成に再構築する

打ち手

1シャード当たりのドキュメント数が多く検索負荷が高い

問題

事象「Elasticsearch高負荷」のまとめ

シャード 10↑

- 想定Doc数

変更後すぐ

500万↓ Doc数/シャード

未来

10

1億

1,000万

4

5,000万

1,250万

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

174

想定Doc数 5,000万

シャード 4

レプリカ数 3

ノード数 6

Elasticsearchの構成

クラスター情報

想定Doc数を超え 1シャード当たり 1000万を超える

データ量

シャード数の変更は

オンラインではできない。

しかし

175

想定Doc数 5,000万

シャード 4

レプリカ数 3

ノード数 6

Elasticsearchの構成

クラスター情報

想定Doc数を超え 1シャード当たり 1000万を超える

データ量

シャード数の変更は

オンラインではできない。

しかし

176

オンラインでのESシャード数変更

デバイス登録ワーカーを止め、更新処理を遅らせている間にESクラスターを再構成

登録 API

登録キュー

登録Worker

旧ES

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

177

オンラインでのESシャード数変更

デバイス登録ワーカーを止め、更新処理を遅らせている間にESクラスターを再構成

登録 API

登録キュー

登録Worker

旧ES

新ES

新しいESクラスターを用意

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

178

オンラインでのESシャード数変更

デバイス登録ワーカーを止め、更新処理を遅らせている間にESクラスターを再構成

登録 API

登録キュー

登録Worker

旧ES

新ES

登録Workerを停止

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

179

オンラインでのESシャード数変更

デバイス登録ワーカーを止め、更新処理を遅らせている間にESクラスターを再構成

登録 API

登録キュー

登録Worker

旧ES

新ES

データ移行開始

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

180

オンラインでのESシャード数変更

デバイス登録ワーカーを止め、更新処理を遅らせている間にESクラスターを再構成

登録 API

登録キュー

登録Worker

旧ES

新ES

データ移行開始 データ移行完了!

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

181

オンラインでのESシャード数変更

デバイス登録ワーカーを止め、更新処理を遅らせている間にESクラスターを再構成

登録 API

登録キュー

登録Worker

旧ES

新ES

登録Workerを再起動

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

182

事例からの学び

継続的にシステムをモニタリングし 再度未来を見立て

常にアーキテクチャを 最適な状態に変化させていくべき

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

目次

リクルートとプッシュ通知との歩み

第1章 旧システムの限界に直面

第2章 スケーラビリティを求めての再構築

第3章 運用を通して顕在化した課題

第4章 まとめ

184

エンジニアは

新技術に挑戦すべき

伝えたいこと

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

185

楽しい

186

可能性

187

新技術に挑戦すべき理由

リスク

188

新技術に挑戦すべき理由

見えない

189

新技術に挑戦すべき理由

リスク を見立てる

190

新技術に挑戦すべき理由

前進

191

新技術に挑戦すべき理由

行き 止まり

192

行き 止まり リリース

193

新技術に挑戦すべき理由

運用

194

新技術に挑戦すべき理由

想定外

195

新技術に挑戦すべき理由

リスク 顕在化

196

新技術に挑戦すべき理由

リスクと向き合う

197

新技術に挑戦すべき理由

向き合う

198

新技術に挑戦すべき理由

向き合い 続ける

199

新技術に挑戦すべき理由

チーム が強くなる

200

新技術に挑戦すべき理由

貢献

201

伝えたいこと(再掲)

エンジニアは 新技術に挑戦すべき

伝えたいこと

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

機能間の 非同期連携

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

Pusna-RS アーキテクチャのポイント

基本アイディア

利用ツール

Scalable └単純化と分散

Realtime └高速化 └各機能の高速化 └IOの高速化

DynamoDBによる I/Oの高速化

非同期I/Oの活用 I/Oの最適化

機能間の 非同期連携

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

Pusna-RS アーキテクチャのポイント

基本アイディア

利用ツール

Scalable └単純化と分散

Realtime └高速化 └各機能の高速化 └IOの高速化

DynamoDBによる I/Oの高速化

非同期I/Oの活用 I/Oの最適化

DynamoDB

elasticsearch クラスタ

デバイス登録 リクエスト

APNs/GCM サーバ

登録API

データ登録

配信worker

登録worker

管理API

データ参照

事業サーバ 配信担当者

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

SQS

SQS

SQSを利用した 機能間の非同期連携

を実現

I/Oの高速化

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

205

リクルートテクノロジーズでは 新技術に挑戦したくてウズウズしてる

一緒に働く仲間を募集中です!!

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

206

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

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