分散処理システムにおけるPulsarの活用事例 @PulsarMeetupJapan_20190905

1.7K Views

September 28, 20

スライド概要

https://japan-pulsar-user-group.connpass.com/event/141000/

profile-image

2023年10月からSpeaker Deckに移行しました。最新情報はこちらをご覧ください。 https://speakerdeck.com/lycorptech_jp

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

(ダウンロード不可)

関連スライド

各ページのテキスト
1.

分散処理システムにおける Pulsarの活用事例 2019年 9月 4日 溝口 伸幸 Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.

2.

自己紹介 GitHub: muumu 仕事: ヤフーのユーザー向け通知プラットフォームの運用開発 活動領域: DevOps、エンジニアリングマネージャ 好きな言語: C++ 最近の興味: ティール組織、コーチング、マインドフルネス 2

3.

概要 Pulsarの Pub/Sub機能 (topicとsubscription) を使った分散処理の事例紹介です Kafkaでも同じことを実現できるのでPulsarだからできた というお話では無いですが、 5000rpsの負荷検証とデイ リー数万の本番運用ができている点でPulsarの現状の信頼 性が伝わればと思います 3

4.

今回お話しする事例 ユーザーが興味のある対象に関する通知 を送るプラットフォーム マッチング処理 ユーザー設定 イベント ・メール ・Push ・ヤフーの新着通知欄 4

5.

オークションアラートの例 ヤフオク! Yahoo! JAPAN ヘルプ マイ・オークション | オプション/設定 | 出品する ヤフオクトップ > オプション > オークションアラート > キーワードアラート キーワードアラート 入力 条件を入力して「登録する」ボタンを押してください。 入力必須条件 アラート名称 ※全角150文字以内 キーワード すべてを含む 少なくとも1つを含む 含めない ※合計で全角80文字以内 戻る 登録する その他の条件 カテゴリ 未選択 カテゴリ選択 キーワードアラート、出品者アラートが途中階層でのカテゴリ選択ができるようになりました。 開始価格 円 ~ 円 即決価格 円 ~ 円 5

6.

オークションアラートの例 ユーザーAの設定 iPad Pro 12.9インチ 1TB ユーザーBの設定 iPad Pro 11インチ ユーザー設定 マッチング処理 ユーザーAへの通知 ・メール ・Push ・ヤフーの新着通知欄 イベント 出品イベント 【新品未使用】 Apple iPad Pro 第3世代 12.9インチ 1TB wi-fi専用 6

7.

その他の用途 ・ 地域毎の防災情報通知 ・ 株価の変動通知 ・ 不動産のお気に入り通知 などなどいろんなサービスのプラットフォームとし て使われています 7

8.

マッチング処理のシステム構成 ユーザー設定の マスターデータ (MySQL) 初期データ生成 ユーザー設定の更新 PULSAR マッチングクエリ マッチング処理サーバ (C++) マッチング結果 APIサーバ (Node.js) 配信システムへ 8

9.

設計のポイント 7千万件のユーザー設定に対してピーク 時1600クエリ/秒のマッチング処理 1. ユーザー設定データのシャーディング 2. スケールアウトできる構成 3. 冗長性の確保 9

10.

シャーディング 7千万件のユーザーデータを分散処理するために ユーザーIDをキーとして100グループに分割 ユーザーID ユーザーIDハッシュ値 でグループ分け 0 1 .... 99 仮想機 (OpenStack) 0 1 4 5 96 97 2 3 6 7 98 99 ✖4 10

11.

ユーザー設定データの受信 PULSAR topic 0 1 2 3 .... 99 ユーザーID ユーザーIDハッシュ値 でグループ分け 0 1 .... 99 topic ユーザーIDハッシュ 0~99 subscription ホスト名 A B Y 仮想機 (OpenStack) 0 1 4 5 96 97 2 3 6 7 98 99 ✖4 11

12.

イベントの受信 PULSAR topic event 0 1 2 3 0~99のsubscription (shared) で それぞれ4台ずつ購読して分散処理 ユーザーID ユーザーIDハッシュ値 でグループ分け 0 1 .... 99 topic 固定 subscription ユーザーIDハッシュ 0~99 A B Y 仮想機 (OpenStack) 0 1 4 5 96 97 2 3 6 7 98 99 ✖4 12

13.

PulsarとKafkaの選択で気にしたこと ・ Kafkaはパーティション単位の順序保証 ができる ・ その代わり特定のコンシューマの処理が遅くなるとボト ルネックになる ・ Pulsarはメッセージをラウンドロビンで 分散できる ・ その代わりラウンドロビンで分散したメッセージは順序 が崩れる ※追記: Ver2.4以降はKey_sharedでこの点は解消! 13

14.

PulsarとKafkaの選択で気にしたこと マッチング結果 PULSAR ラウンドロビン マッチング処理サーバ (C++) 配信サーバ (Java) 14

15.

現状の本番稼働実績 リリース間もないためデイリー数万ほど 旧システムから移行してくるサービスが増えれば 最終的にデイリー2千万かそれ以上に到達予定 ユーザー指定の 通知リクエスト PULSAR ラウンドロビン APIサーバ (Node.js) 配信サーバ (Java) 15

16.

負荷試験 (1分間) 実績 約1600 qps 約5000 rps ユーザー設定の更新 PULSAR PULSAR マッチングクエリ APIサーバ (Node.js) マッチング処理サーバ (C++) 配信サーバ (Java) ※条件によって大きく変化する数値なので あくまで規模感を伝えるための参考値です 16

17.

遭遇した主な課題 1. C++のマルチスレッド環境下のConsumerで 0.15%ほどのメッセージが重複する -> Pulsarメンバに直してもらった https://github.com/apache/pulsar/pull/4750 2. JavaのConsumerでunackedのまま取り残さ れるメッセージが発生する (Brokerとの接続 を切ると解消する) -> Pulsarメンバの協力を得ながら調査中 17

18.

まとめ ・ PulsarのPub/Sub機能は機能的にもパフォーマンス 的にも十分な性能を持っていることを確認できたため本 番での大規模な利用を進行中 ・ コンシューマの処理性能にばらつきがあり得る状況で均 等に負荷分散するのはKafkaよりPulsarの方が向いて いると考えられる ・ MQにありがちな不具合に遭遇したがPulsarチームの 協力を得て解消できている 18