63
メッセージキュー「Pulsar」のご紹介 〜ヤフーの導⼊事例を交えて〜 ヤフー株式会社 システム統括本部 志賀 優毅 2017/10/07

メッセージキュー「Pulsar」の紹介 @OSC_20171007

Embed Size (px)

Citation preview

Page 1: メッセージキュー「Pulsar」の紹介 @OSC_20171007

メッセージキュー「Pulsar」のご紹介〜ヤフーの導⼊事例を交えて〜

ヤフー株式会社 システム統括本部志賀 優毅

2017/10/07

Page 2: メッセージキュー「Pulsar」の紹介 @OSC_20171007

Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 2

⾃⼰紹介

志賀 優毅 (GitHub: yush1ga)

経歴:▪ 2016/04 ヤフー株式会社新卒⼊社▪ 2016/10~ メッセージキュー「Pulsar」の開発▪ 2017/06~ 「Pulsar」のCommitter

登壇歴:▪ 2017/05 GitHub Patchwork▪ 2017/07 OSC 2017 Hokkaido

Page 3: メッセージキュー「Pulsar」の紹介 @OSC_20171007

Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 3

PulsarYahoo! Inc. で開発された新しいPub-Subメッセージングシステム(メッセージキュー)

▪ 2014秋 Yahoo! Inc. が開発を開始▪ 2015春 Yahoo! Inc. で利⽤開始▪ 2016/04 Yahoo! JAPANが開発に参加▪ 2016/09 OSSとして公開▪ 2017/01 Yahoo! JAPANで利⽤開始▪ 2017/06 Apache Incubator Projectへ移管

Page 4: メッセージキュー「Pulsar」の紹介 @OSC_20171007

Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止

アジェンダ

4

アジェンダ1. メッセージキューについて2. Pulsar導⼊の背景3. インターフェースとアーキテクチャ4. Pulsar on Kubernetes5. Kafkaとの⽐較6. Yahoo! JAPANの取り組み

Page 5: メッセージキュー「Pulsar」の紹介 @OSC_20171007

Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 5

メッセージキューについて

Page 6: メッセージキュー「Pulsar」の紹介 @OSC_20171007

Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 6

メッセージキュー(MQ)とは?

送信側システム

受信側システム

12345

メッセージキュー

6

システム間のメッセージのやり取りに使⽤されるソフトウェアの総称▪ メッセージ … 他のシステムへの通知情報、処理して欲しいデータ、ログなど▪ キュー … 先に⼊れたものから順に出てくるデータ構造› メッセージの送信 = キューの最後尾にメッセージを追加する› メッセージの受信 = キューの先頭からメッセージを取り出す

※ 送受信は⾮同期

MQにメッセージを送信すると…

送った通りの順番で相⼿に届く!

Page 7: メッセージキュー「Pulsar」の紹介 @OSC_20171007

Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 7

メッセージキューを使わなかったら…

送信側システム

受信側システム

12

45

3

6

9 8 7 早くメッセージを受け取って! ちょっと今は無理…

フロントエンドサーバ

バックエンドサーバ

エンドユーザ

Page 8: メッセージキュー「Pulsar」の紹介 @OSC_20171007

Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 8

メッセージキューを使えば…

送信側システム

受信側システム

134

メッセージキュー

2

相⼿の状態は知らないけどとりあえずキューに追加!

今は無理だけど⼿が空いたら受け取るよ

フロントエンドサーバ

バックエンドサーバ

エンドユーザ

Page 9: メッセージキュー「Pulsar」の紹介 @OSC_20171007

Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 9

Pub-Subメッセージングとは?

トピックと呼ばれる宛先に対してメッセージの送受信が⾏われる⽅式▪ メッセージの送信側 = Producer / Publisher / 出版者▪ メッセージの受信側 = Consumer / Subscriber / 購読者

トピックProducer

Consumer 1

Consumer 2

Consumer 3あるトピックに対してメッセージを送信すると… メッセージキュー

そのトピックを購読している相⼿にメッセージが届く!

Page 10: メッセージキュー「Pulsar」の紹介 @OSC_20171007

Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 10

Pub-Subメッセージングをしなかったら…

送信側システム1

送信側システム2

送信側システム3

送信側システム4

受信側システム1

受信側システム2

受信側システム3

受信側システム4

1対1の通信なら問題ないが、1対多や多対多になると複雑で⼤変

Page 11: メッセージキュー「Pulsar」の紹介 @OSC_20171007

Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 11

Pub-Subメッセージングをすれば…

送信側システム1

送信側システム2

送信側システム3

送信側システム4

受信側システム1

受信側システム2

受信側システム3

受信側システム4

トピック1

トピック2

トピック3

送信側も受信側もお互いを意識する必要がない → シンプルかつスケーラブルに

メッセージキュー

Page 12: メッセージキュー「Pulsar」の紹介 @OSC_20171007

Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 12

代表的なメッセージキュー

▪ Kafka› 2011年にLinkedInから公開› ⼤量のデータを⾼速に処理する事を⽬指し設計› ストリームデータの処理によく使⽤される

▪ RabbitMQ› 2007年にRabbit Technologiesから公開› 通信プロトコルにAMQPを採⽤› どちらかと⾔えばパフォーマンスよりも信頼性を重視

▪ ActiveMQ› 2004年から使⽤されている歴史あるプロダクト› 様々なプロトコルをサポートし、多数の⾔語から利⽤可能なのが強み

Page 13: メッセージキュー「Pulsar」の紹介 @OSC_20171007

Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 13

Pulsar導⼊の背景

Page 14: メッセージキュー「Pulsar」の紹介 @OSC_20171007

Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 14

全社プラットフォームとしてのMQを提供したい■背景:▪ ヤフーには100程度のサービスがあり、それぞれに開発/運⽤チームが存在▪ バックエンドの処理(システム連携、データ解析 etc.)にMQを利⽤したい

しかし各チームそれぞれがMQを持つことになると▪ 設備・運⽤コストが増え、本来やりたかったサービス開発に集中できない▪ ナレッジが社内で分散する→ サービス横断で利⽤可能な、全社プラットフォームとしてのMQを提供したい

■求められる要件:1. ⾼いパフォーマンス / スケーラビリティ2. 複数のサービスが同居できる3. 複数のデータセンター間でのレプリケーション

Page 15: メッセージキュー「Pulsar」の紹介 @OSC_20171007

Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 15

要件1 – ⾼いパフォーマンス / スケーラビリティ

▪ ヤフーでは100程度のサービスを提供しており、それぞれの利⽤者数も膨⼤▪ 例えばトップページ(PC)の1⽇あたりの利⽤者数は…› PV(Webページの参照回数):2億以上› UB(ユニークなWebブラウザ数):3千万以上

▪ それを⽀えるMQも⼤量のメッセージを⾼速に処理できる事が求められる▪ 利⽤者数増⼤の可能性もあるためスケーラブルである事も必須

Page 16: メッセージキュー「Pulsar」の紹介 @OSC_20171007

Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 16

要件2 - 複数のサービスが同居できる

A⽤MQProducer

サービスAConsumer B⽤MQProducer

サービスBConsumer

C⽤MQProducer

サービスCConsumer Producer

サービスDConsumerD⽤MQ

サービスごとに専⽤のMQを⽤意するのはコストが⼤きい1つのMQに複数のサービスが同居できる(=マルチテナント)ことが求められる

ProducerサービスA Consumer

Producer Consumer

Producer Consumer

Producer Consumer

トピックA

トピックB

トピックC

トピックD

サービスB

サービスC

サービスD

Page 17: メッセージキュー「Pulsar」の紹介 @OSC_20171007

Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 17

要件3 – 複数のデータセンター間でのレプリケーション

データセンターA

Consumer

▪ ヤフーは地理的に離れた複数のデータセンターでサービスを展開▪ 全てのデータセンターで同じメッセージを受けて同じ処理を実⾏したい場合:› 全てのデータセンターにメッセージをPublish? → ⾮効率的、⼿間がかかる› 特定のデータセンターのMQに全てのConsumerが接続? → レイテンシ⼤→ MQ内で(データセンターをまたいで)レプリケーションして欲しい

Producer Consumer

Consumer

MQ

データセンターB

Consumer

Producer Consumer

Consumer

MQ

データセンターC

Consumer

Consumer

Consumer

ネットワークをまたぐことによりレイテンシが増加

各DCでPublishするのは⾮効率

全DCでPublishするのは⾮効率的

Page 18: メッセージキュー「Pulsar」の紹介 @OSC_20171007

Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 18

Pulsarは前述の要件を全て満たす

1. ⾼いパフォーマンス / スケーラビリティ2. 複数のサービスが同居できる3. 複数のデータセンター間でのレプリケーション

Page 19: メッセージキュー「Pulsar」の紹介 @OSC_20171007

Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 19

特徴1 – ⾼速 / スケーラブル

Producer

⼤量のメッセージを⾼速に送受信可能▪ Yahoo! Inc. での実績› トピック数:140万› メッセージ数:1,000億 [msg/day]› メッセージの送信に要する時間(平均):5 [ms]

▪ サーバの台数を増やせばその分だけキャパシティを増やせる → スケーラブル

Consumer

Pulsar

Consumer

Pulsar

ProducerProducerProducerProducerProducerProducer

ConsumerConsumerConsumerConsumerConsumer

スケールアウト

Page 20: メッセージキュー「Pulsar」の紹介 @OSC_20171007

Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 20

特徴2 - マルチテナント

ProducerサービスA Consumer

Producer Consumer

Producer Consumer

Producer Consumer

トピックA

トピックB

トピックC

トピックD

サービスB

サービスC

サービスD

他のサービスのトピックへのアクセスは認証・認可機構で

ブロック

複数のサービスが1つのPulsarインスタンスを共⽤可能▪ ヤフーでは全社で共有するインスタンスを専⽤のチームが提供・運⽤▪ 各サービスはサービス開発に集中できる 各サービスが利⽤可能な

リソースを個別に設定可能

Page 21: メッセージキュー「Pulsar」の紹介 @OSC_20171007

Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 21

特徴3 – ジオレプリケーション

Producer トピック

あるデータセンターのトピックに送信したメッセージを他のDCに複製・配信可能▪ Producerは⾃分と同じデータセンターのPulsarにメッセージを送ればいい▪ Consumerは⾃分と同じデータセンターのPulsarからメッセージを受け取れる

Pulsar クラスタ A

Consumer

Consumer

Consumer

データセンターA

トピック Consumer

Consumer

Consumer

データセンターB

ジオレプリケーションPulsar クラスタ B

Page 22: メッセージキュー「Pulsar」の紹介 @OSC_20171007

Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 22

利⽤事例 - コンテンツ⼊稿プラットフォーム▪ ヤフーには外部のコンテンツプロバイダから様々なファイルが⼊稿される▪ ⼊稿サーバへのファイル転送を検知したら⼊稿ログをPulsarに流す▪ トピックを購読している各サービスがファイルを取得して処理する

Producer

Consumer

トピック

サービスA

Pulsar

コンテンツの⼊稿ログをPulsarに流す

ファイルを取得

Consumer

サービスB

Consumer

サービスC

⼊稿サーバ

コンテンツプロバイダ

天気情報、地図情報、ニュース、etc. ログサーバ

Page 23: メッセージキュー「Pulsar」の紹介 @OSC_20171007

Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 23

利⽤事例 - Yahoo!メールのBEシステム▪ メールの検索インデックスの⽣成/修正といった時間のかかるジョブを⾮同期に

処理するために利⽤▪ ProducerはPulsarにジョブをキューイング▪ ConsumerはPulsarからジョブを取り出して順番に処理

Producer

Consumer

Producer

トピック ジョブを処理するハンドラ

メールBEサーバ

メールBEサーバ

Pulsar

リクエスト

ジョブを登録

忙しい時やジョブが失敗した時は再登録

ジョブを取り出して処理

Page 24: メッセージキュー「Pulsar」の紹介 @OSC_20171007

Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 24

インターフェース

Page 25: メッセージキュー「Pulsar」の紹介 @OSC_20171007

Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 25

Pulsarのインターフェース

▪ クライアントライブラリはJava, C++, Pythonを提供▪ 他の⾔語からもWebSocket APIを利⽤可能▪ Producer/Consumerは次のようなトピックURIを指定してPulsarに接続

▪ さらにConsumerはサブスクリプションの名前を指定する必要がある▪ ⽤途に応じて3種類のサブスクリプションモード(メッセージの配信⽅式)を選択可能

persistent://property/cluster/namespace/destinationサービス名など

データセンターなど

⽤途など

⽤途の詳細などメッセージを永続化

Page 26: メッセージキュー「Pulsar」の紹介 @OSC_20171007

Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 26

サブスクリプションとは?

Producer

Consumer

Consumer

1

2345

Consumerがトピックの購読を開始した時に作成される購読の管理単位▪ メッセージのキューはサブスクリプションごとに⽤意される▪ Consumerとの接続が切れても削除されず、再接続までの間メッセージを溜め続ける

subscription-B

subscription-A

123

45

subscription-Aのキュー

subscription-Bのキュー

トピック

Page 27: メッセージキュー「Pulsar」の紹介 @OSC_20171007

Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 27

サブスクリプションタイプ1 - Exclusive

Producer

Consumer

Consumer

Consumer

12345

12345

▪ 1つのサブスクリプションには1つのConsumerだけが接続可能▪ 既にConsumerが存在するサブスクリプションに接続を試みるとエラーになる

subscription-A(Exclusive)

subscription-B(Exclusive)

12345

トピック

Page 28: メッセージキュー「Pulsar」の紹介 @OSC_20171007

Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 28

サブスクリプションタイプ2 - Shared

Producer12345

Consumer

Consumer

Consumer

25

3

41

subscription(Shared)

▪ 1つのサブスクリプションに複数のConsumerが接続可能▪ メッセージは各Consumerにラウンドロビンで配信される▪ 複数のシステムで処理を分担させたい場合に有⽤

トピック

Page 29: メッセージキュー「Pulsar」の紹介 @OSC_20171007

Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 29

サブスクリプションタイプ3 - Failover

Producer12345

Consumer

Consumer

Consumer

345

▪ 複数のConsumerが接続可能だが、メッセージを受け取るのはその内1つだけ▪ そのConsumerがダウンすると別のConsumerがメッセージを受け取るようになる▪ システムの障害に備えたい場合に有⽤

subscription(Failover)

トピック2

1

1と2の受け取り後にダウン

Page 30: メッセージキュー「Pulsar」の紹介 @OSC_20171007

Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 30

// PulsarのURIを指定してクライアントを作成PulsarClient client = PulsarClient.create(

"pulsar://broker.usw.example.com:6650");

// トピックを指定してProducerを作成Producer producer = client.createProducer(

"persistent://my-property/us-west/my-namespace/my-topic");

// メッセージを送信producer.send("my-message".getBytes());

Javaのサンプルコード - Producer

Page 31: メッセージキュー「Pulsar」の紹介 @OSC_20171007

Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 31

PulsarClient client = PulsarClient.create("pulsar://broker.usw.example.com:6650");

// トピックとサブスクリプションを指定してConsumerを作成Consumer consumer = client.subscribe(

"persistent://my-property/us-west/my-namespace/my-topic","my-subscription-name");

// メッセージを受信して画面に表示Message msg = consumer.receive();System.out.println(new String(msg.getData()));

// メッセージに対するACKを返信(キューからメッセージを削除)consumer.acknowledge(msg);

Javaのサンプルコード - Consumer

Page 32: メッセージキュー「Pulsar」の紹介 @OSC_20171007

Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 32

PulsarClient client = PulsarClient.create("pulsar://broker.usw.example.com:6650");

// Consumerの設定にサブスクリプションタイプを追加ConsumerConfiguration conf = new ConsumerConfiguration();conf.setSubscriptionType(SubscriptionType.Shared);

Consumer consumer = client.subscribe("persistent://my-property/us-west/my-namespace/my-topic","my-subscription-name", conf);

Javaのサンプルコード - サブスクリプションタイプの指定

Page 33: メッセージキュー「Pulsar」の紹介 @OSC_20171007

Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 33

アーキテクチャ

Page 34: メッセージキュー「Pulsar」の紹介 @OSC_20171007

Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 34

システム構成図 Broker‣ クライアントとのメッセージのやり取

りを担当‣ 状態を持たないため増設が容易

Bookie‣ BookKeeperのストレージノード‣ トピックに送信されたメッセージやそ

れに関連するデータを保存

ZooKeeper‣ トピックの管理に必要なメタ情報を保

存‣ Local ZKはクラスタ内に閉じた情報を

担当‣ Global ZKは全てのクラスタで共有すべ

き情報を担当

Producer Consumer

Broker 1 Broker 2 Broker 3

Bookie1

LocalZooKeeper

Bookie2

Bookie3

Pulsar クラスタ

GlobalZooKeeper

Page 35: メッセージキュー「Pulsar」の紹介 @OSC_20171007

Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 35

BookKeeperとは?▪ オープンソースの分散型ログストレージサービス▪ データを複製し複数のノード(Bookie)に分散して保存 → 強い耐障害性▪ ノード数を増やせば容量と速度の向上が可能 → スケーラブル

A

Bookie2 Bookie3

D

C

A

B

D

B

C

Bookie1

データの複製数は⾃由に変更可能

Page 36: メッセージキュー「Pulsar」の紹介 @OSC_20171007

Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 36

BookKeeperのアーキテクチャ▪ 先⾏書き込みログ› ストレージに対する「操作」を先に書き込む› ストレージへの反映は後からバックグラウンドで› 途中で電源が落ちても「操作」を再開可能› 容量より速度を重視したいので⾼速なSSDを使⽤

▪ 永続化ストレージ› 連続するデータをまとめてキャッシュに読み込んでおく› ⼀般にメッセージキューは連続するデータを扱うため効率がよい› 速度より容量を重視したいので⼤容量なHDDを使⽤

速度と永続性の両⽴を実現

先⾏書き込みログ(SSD)

永続化ストレージ(HDD)

Bookie

書き込みキャッシュ

先⾏読み込みキャッシュ

Write

Read

Page 37: メッセージキュー「Pulsar」の紹介 @OSC_20171007

Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 37

Pulsar on Kubernetes

Page 38: メッセージキュー「Pulsar」の紹介 @OSC_20171007

Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 38

Kubernetesとは▪ Dockerのオーケストレーションツール▪ Dockerとは› コンテナ型仮想化技術

コンテナ

App

ホストOS

ハードウェア

コンテナ

App

Page 39: メッセージキュー「Pulsar」の紹介 @OSC_20171007

Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 39

Dockerの問題点の例

コンテナ

App

コンテナ

App

Private IP

ホスト1

コンテナ

App

コンテナ

App😇❓

ホスト2

Private IP

Page 40: メッセージキュー「Pulsar」の紹介 @OSC_20171007

Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 40

Kubernetesを使うと

コンテナ

App

コンテナ

App

Cluster IP

Kubernetesクラスタ (複数台のホストから構成)

コンテナ

App

コンテナ

App

Cluster IPCluster IP

あたかも1台の実⾏環境であるかのように利⽤可能

Page 41: メッセージキュー「Pulsar」の紹介 @OSC_20171007

Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 41

Pulsar on Kubernetes▪ Pulsarは› Google Container Engine (GKE)› AWS› 独⾃

のKubernetesクラスタに簡単にデプロイ可能▪ GKEでのデプロイ⼿順を紹介▪ 詳細な⼿順はこちら

https://pulsar.incubator.apache.org/docs/latest/deployment/Kubernetes

Page 42: メッセージキュー「Pulsar」の紹介 @OSC_20171007

Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 42

Google Cloud Platformの準備▪ 事前準備として以下が必要› cloud.google.comにサインアップできるGoogle Cloud Platformアカウント› 既存のCloud Platformプロジェクト

› Google Cloud SDK (特にgcloudとkubectlツール)

無料トライアルアカウントでも可

Page 43: メッセージキュー「Pulsar」の紹介 @OSC_20171007

Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 43

Google Cloud Platformの準備

Page 44: メッセージキュー「Pulsar」の紹介 @OSC_20171007

Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 44

新しいKubernetesクラスタの作成

$ gcloud container clusters create pulsar-gke-cluster # クラスタ名--zone=us-central1-a # リージョンとゾーン--machine-type=n1-standard-4 # マシンの種類--num-nodes=2 # ノード数--local-ssd-count=2 # ローカルSSDの数

※無料トライアルアカウント⽤にドキュメントよりスペックを下げています

Page 45: メッセージキュー「Pulsar」の紹介 @OSC_20171007

Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 45

Kubernetesダッシュボードの表⽰

$ gcloud container clusters get-credentials pulsar-gke-cluster --zone=us-central1-a --project=<project-id>$ kubectl proxy

上記のコマンド⼊⼒後http://localhost:8001/uiにブラウザからアクセス可

Page 46: メッセージキュー「Pulsar」の紹介 @OSC_20171007

Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 46

Pulsarのデプロイ – ZooKeeperのデプロイ# yaml定義のあるディレクトリに移動$ cd /path/to/incubator-pulsar/kubernetes/google-container-engine# デプロイ$ kubectl apply -f zookeeper.yaml# クラスタメタデータの初期化$ kubectl exec -it zk-0 -- bin/pulsar initialize-cluster-metadata --cluster us-central --zookeeper zookeeper --global-zookeeper zookeeper --web-service-url http://broker.default.svc.cluster.local:8080/ --broker-service-url pulsar://broker.default.svc.cluster.local:6650/

Page 47: メッセージキュー「Pulsar」の紹介 @OSC_20171007

Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 47

Pulsarのデプロイ – 残りのコンポーネントのデプロイ

# bookie, broker, 監視ツールのデプロイ$ kubectl apply -f bookie.yaml$ kubectl apply -f broker.yaml$ kubectl apply -f monitoring.yaml

以上でデプロイは完了

Page 48: メッセージキュー「Pulsar」の紹介 @OSC_20171007

Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 48

デプロイ完了後のKubernetesダッシュボード

Page 49: メッセージキュー「Pulsar」の紹介 @OSC_20171007

Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 49

Grafana

Page 50: メッセージキュー「Pulsar」の紹介 @OSC_20171007

Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 50

Pulsarダッシュボード

Page 51: メッセージキュー「Pulsar」の紹介 @OSC_20171007

Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止

▪ 以下のコマンドから管理ツールを実⾏するためのコンソールにアクセス可能

▪ コンソールからパフォーマンステストも実⾏可能

51

管理ツール

$ kubectl exec pulsar-admin -it -- bash

$ bin/pulsar-perf produce persistent://prop/us-central/ns/my-topic --rate 150000# 実行結果2017-09-28 05:35:30,398 - INFO -[main:PerformanceProducer@341] - Throughput produced: 149979.1 msg/s --- 1171.7 Mbit/s --- Latency: mean: 46.952 ms (後略)

Page 52: メッセージキュー「Pulsar」の紹介 @OSC_20171007

Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止

▪ 以下のコマンドから管理ツールを実⾏するためのコンソールにアクセス可能

▪ コンソールからパフォーマンステストも実⾏可能

52

管理ツール

$ kubectl exec pulsar-admin -it -- bash

$ bin/pulsar-perf produce persistent://prop/us-central/ns/my-topic --rate 150000# 実行結果2017-09-28 05:35:30,398 - INFO -[main:PerformanceProducer@341] - Throughput produced: 149979.1 msg/s --- 1171.7 Mbit/s --- Latency: mean: 46.952 ms (後略)

毎秒15万メッセージ!レイテンシ50ms!

Page 53: メッセージキュー「Pulsar」の紹介 @OSC_20171007

Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 53

Kafkaとの⽐較

Page 54: メッセージキュー「Pulsar」の紹介 @OSC_20171007

Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 54

Kafkaとは▪ スケーラブルな分散Pub-Subメッセージングシステム▪ 2011年にLinkedInから公開▪ ⼤量のデータを⾼速処理する事を⽬指し設計▪ ストリームデータの処理によく使⽤される

Pulsarと被る部分が多いPulsarのアドバンテージとは?

Page 55: メッセージキュー「Pulsar」の紹介 @OSC_20171007

Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 55

マルチテナントの実現しやすさ

Pulsar ◯トピックが階層化されているため、ネームスペース単位で設定変更が可能で、設定変更作業を利⽤者側に委任しやすい

Kafka △トピックは階層化されておらず、トピックごとに設定が必要

Pulsarはマルチテナントを実現しやすいよう設計されている

Page 56: メッセージキュー「Pulsar」の紹介 @OSC_20171007

Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 56

トピック構造の違い

log-stream-for-log-a

job-queue-for-job-a

job-queue-for-job-b

service-a

job-queue

job-a

log-stream

job-blog-alog-b

Property

log-stream-for-log-b

Namespace Destination

Kafka

Pulsar

ACL

ACL

ACL

ACL

ACL

ACL

ACL

トピックごとに設定が必要

ネームスペースの設定を継承

Page 57: メッセージキュー「Pulsar」の紹介 @OSC_20171007

Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 57

Brokerの負荷分散

Pulsar ◯負荷に応じて⾃動的にBrokerが担当するトピックが移動◯Brokerを増設した際、トピックの再割り当ては不要

Kafka △Brokerが担当するパーティションは固定△Brokerを増設した際、パーティションの再割り当てが必要

PulsarはBrokerにデータを保持しないため、負荷分散が⾃動的に⾏われる

Page 58: メッセージキュー「Pulsar」の紹介 @OSC_20171007

Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 58

Yahoo! JAPANの取り組み

Page 59: メッセージキュー「Pulsar」の紹介 @OSC_20171007

Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 59

Yahoo! JAPANのPulsarに対する取り組み

▪ C++クライアントライブラリのOSS化▪ Athenz⽤認証プラグインのOSS化(※Athenzはロールベースの認証認可システムを実現するOSS)

▪ Spark Streamingのカスタムレシーバ作成▪ ワイルドカードを⽤いた認可機能の追加▪ ドキュメントの⽇本語化▪ その他細かいバグ修正や機能追加

Page 60: メッセージキュー「Pulsar」の紹介 @OSC_20171007

Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 60

まとめ

Page 61: メッセージキュー「Pulsar」の紹介 @OSC_20171007

Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止

まとめ

61

まとめ

▪ Pulsar› 分散Pub-Subメッセージングシステム› ⾼速、スケーラブル、マルチテナント、ジオレプリケーション› 特に⼤規模なサービスでの利⽤に向く

▪ コード・ドキュメントはhttps://pulsar.incubator.apache.orgにあります▪ ⽇本語ドキュメント もあります▪ 質問やフィードバックはメーリングリストへ:› [email protected][email protected]

Page 62: メッセージキュー「Pulsar」の紹介 @OSC_20171007

Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 62

Pulsarの近況 - 最近マージされた機能

▪ Kafka client Java API wrapper› KafkaProducer / KafkaConsumerのインターフェイスでPulsarを利⽤するためのラッパー

▪ End-to-Endでの暗号化› メッセージをproduce時に暗号化 / consume時に復号する機能を追加

▪ non-persistentなトピック› メッセージを永続化しないことでより⾼速なproduce / consumeを可能にするトピック

▪ produce時の重複排除› メッセージをproduceする際にBroker側で重複を排除する

Page 63: メッセージキュー「Pulsar」の紹介 @OSC_20171007