SlideShare ist ein Scribd-Unternehmen logo
1 von 51
Downloaden Sie, um offline zu lesen
メッセージキュー「Pulsar」の紹介
ヤフー株式会社 システム統括本部
栗原 望
2017/09/27
Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 2
⾃⼰紹介
栗原 望
経歴:
▪ 2012/04 ヤフー株式会社に新卒⼊社
▪ 2012/10 ユーザーの属性情報に関連する社内向けプラットフォームの開発
▪ 2015/07 ヤフオクのBEシステム再構築
▪ 2016/10 Pub-Subメッセージングシステム「Pulsar」の開発
▪ 2017/06~ 「Pulsar」のコミッター
Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 3
Pulsar
■Pulsarとは
Yahoo! Inc. で開発されたPub-Subメッセージングシステム(メッセージキュー)
■使⽤⾔語
▪ サーバー: Java
▪ クライアント: Java / C++ / Python
■年表
▪ 2014秋 Yahoo! Inc. が開発を開始
▪ 2015春 Yahoo! Inc. で利⽤開始
▪ 2016/04 Yahoo! JAPANが開発に参加
▪ 2016/09 OSSとして公開
▪ 2017/01 Yahoo! JAPANで利⽤開始
▪ 2017/06 Apache Incubator Projectへ移管
Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
アジェンダ
4
アジェンダ
1. Pub-Subメッセージングについて
2. Pulsar導⼊の背景
3. Pulsarの特徴
4. 利⽤事例
5. インターフェース
6. アーキテクチャ
7. Kafka / RabbitMQとの違い
8. Yahoo! JAPANの取り組み
9. まとめ
Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 5
Pub-Subメッセージング
Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 6
メッセージキュー / Pub-Subメッセージング
送信側システム
受信側システム 1
受信側システム 2
受信側システム 3
メッセージキュー
1
1
1
6 2345
トピックに送信(Publish)した
メッセージが…
購読(Subscribe)している
全ての相⼿に順番に届く!
トピック
送信側と受信側が疎結合
Producer(Publisher)
Consumer(Subscriber)
▪ メッセージキュー(MQ)
› メッセージ(ログ、通知など)を溜めておくキュー
▪ Pub-Subメッセージング
› トピックと呼ばれる宛先に対してメッセージの送受信が⾏われる⽅式
Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 7
代表的なメッセージキュー
▪ Kafka
› 2011年にLinkedInから公開
› ⼤量のデータを⾼速に処理する事を⽬指し設計
› ストリームデータの処理によく使⽤される
▪ RabbitMQ
› 2007年にRabbit Technologiesから公開
› 通信プロトコルにAMQPを採⽤
› どちらかと⾔えばパフォーマンスよりも信頼性を重視
▪ ActiveMQ
› 2004年から使⽤されている歴史あるプロダクト
› 様々なプロトコルをサポートし、多数の⾔語から利⽤可能なのが強み
Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 8
Pulsar導⼊の背景
Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 9
全社プラットフォームとしてのMQを提供したい
■背景:
▪ ヤフーには100程度のサービスがあり、それぞれに開発/運⽤チームが存在
▪ バックエンドの処理(システム連携、データ解析 etc.)にMQを利⽤したい
しかし各チームそれぞれがMQを持つことになると
▪ 設備・運⽤コストが増え、本来やりたかったサービス開発に集中できない
▪ ナレッジが社内で分散する
→ サービス横断で利⽤可能な、全社プラットフォームとしてのMQを提供したい
■求められる要件:
1. ⾼いパフォーマンス / スケーラビリティ
2. 複数のサービスが同居できる
3. 複数のデータセンター間でのレプリケーション
Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 10
要件1 – ⾼いパフォーマンス / スケーラビリティ
▪ ヤフーでは100程度のサービスを提供しており、それぞれの利⽤者数も膨⼤
▪ 例えばトップページ(PC)の1⽇あたりの利⽤者数は…
› PV(Webページの参照回数):2億以上
› UB(ユニークなWebブラウザ数):3千万以上
▪ それを⽀えるMQも⼤量のメッセージを⾼速に処理できる事が求められる
▪ 利⽤者数増⼤の可能性もあるためスケーラブルである事も必須
Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 11
要件2 - 複数のサービスが同居できる
A⽤MQProducer
サービスA
Consumer B⽤MQProducer
サービスB
Consumer
C⽤MQProducer
サービスC
Consumer Producer
サービスD
ConsumerD⽤MQ
サービスごとに専⽤のMQを⽤意するのはコストが⼤きい
1つのMQに複数のサービスが同居できる(=マルチテナント)ことが求められる
ProducerサービスA Consumer
Producer Consumer
Producer Consumer
Producer Consumer
トピックA
トピックB
トピックC
トピックD
サービスB
サービスC
サービスD
Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 12
要件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するのは
⾮効率的
Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 13
Pulsarの特徴
Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 14
Pulsarは前述の要件を全て満たす
1. ⾼いパフォーマンス / スケーラビリティ
2. 複数のサービスが同居できる
3. 複数のデータセンター間でのレプリケーション
Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 15
特徴1 – ⾼速 / スケーラブル
Producer
⼤量のメッセージを⾼速に送受信可能
▪ Yahoo! Inc. での実績
› トピック数:140万
› メッセージ数:1,000億 [msg/day]
› メッセージの送信に要する時間(平均):5 [ms]
▪ サーバの台数を増やせばその分だけキャパシティを増やせる → スケーラブル
Consumer
Pulsar
Consumer
Pulsar
Producer
Producer
Producer
Producer
Producer
Producer
Consumer
Consumer
Consumer
Consumer
Consumer
スケール
アウト
Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 16
パフォーマンス
0
1
2
3
4
5
6
1,000 10,000 100,000 1,000,000 10,000,000
メッセージ送信にかかる時間
[ms]
1秒あたりの送信メッセージ数 [msg/s]
1秒あたりの送信メッセージ数とそれにかかる時間の関係
10 Bytes
100 Bytes
1 KB
※Yahoo! Inc.での実績
Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 17
特徴2 - マルチテナント
ProducerサービスA Consumer
Producer Consumer
Producer Consumer
Producer Consumer
トピックA
トピックB
トピックC
トピックD
サービスB
サービスC
サービスD
他のサービスのトピックへの
アクセスは認証・認可機構で
ブロック
複数のサービスが1つのPulsarインスタンスを共⽤可能
▪ ヤフーでは全社で共有するインスタンスを専⽤のチームが提供・運⽤
▪ 各サービスはサービス開発に集中できる 各サービスが利⽤可能な
リソースを個別に設定可能
Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 18
特徴3 – ジオレプリケーション
Producer トピック
あるデータセンターのトピックに送信したメッセージを他のDCに複製・配信可能
▪ Producerは⾃分と同じデータセンターのPulsarにメッセージを送ればいい
▪ Consumerは⾃分と同じデータセンターのPulsarからメッセージを受け取れる
Pulsar クラスタ A
Consumer
Consumer
Consumer
データセンターA
トピック Consumer
Consumer
Consumer
データセンターB
ジオレプリケーション
Pulsar クラスタ B
Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 19
利⽤事例
Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 20
利⽤事例 - コンテンツ⼊稿プラットフォーム
▪ ヤフーには外部のコンテンツプロバイダから様々なファイルが⼊稿される
▪ ⼊稿サーバへのファイル転送を検知したら⼊稿ログをPulsarに流す
▪ トピックを購読している各サービスがファイルを取得して処理する
Producer
Consumer
トピック
サービスA
Pulsar
コンテンツの⼊稿ログ
をPulsarに流す
ファイルを取得
Consumer
サービスB
Consumer
サービスC
⼊稿サーバ
コンテンツ
プロバイダ
天気情報、地図情報、
ニュース、etc.
ログサーバ
Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 21
利⽤事例 - Yahoo!メールのBEシステム(予定)
▪ メールの検索インデックスの⽣成/修正といった時間のかかるジョブを⾮同期に
処理するために利⽤
▪ ProducerはPulsarにジョブをキューイング
▪ ConsumerはPulsarからジョブを取り出して順番に処理
Producer
Consumer
Producer
トピック
ジョブを処理する
ハンドラ
メールBEサーバ
メールBEサーバ
Pulsar
リクエスト
ジョブを登録
忙しい時やジョブが
失敗した時は再登録
ジョブを
取り出して処理
Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 22
インターフェース
Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 23
Pulsarのインターフェース
▪ クライアントライブラリはJava, C++, Pythonを提供
▪ 他の⾔語からもWebSocket APIを利⽤可能
▪ Producer/Consumerは次のようなトピックURIを指定してPulsarに接続
▪ さらにConsumerはサブスクリプションの名前を指定する必要がある
▪ ⽤途に応じて3種類のサブスクリプションモード(メッセージの配信⽅式)を選択可能
persistent://property/cluster/namespace/destination
サービス名など
データセンターなど
⽤途など
⽤途の詳細などメッセージを永続化
Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 24
サブスクリプションとは?
Producer
Consumer
Consumer
1
2345
Consumerがトピックの購読を開始した時に作成される購読の管理単位
▪ メッセージのキューはサブスクリプションごとに⽤意される
▪ Consumerとの接続が切れても削除されず、再接続までの間メッセージを溜め続ける
subscription-B
subscription-A
123
45
subscription-Aのキュー
subscription-Bのキュー
トピック
Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 25
サブスクリプションタイプ1 - Exclusive
Producer
Consumer
Consumer
Consumer
1
▪ 1つのサブスクリプションには1つのConsumerだけが接続可能
▪ 既にConsumerが存在するサブスクリプションに接続を試みるとエラーになる
subscription-A
(Exclusive)
subscription-B
(Exclusive)
トピック
1
1
2
2
2
Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 26
サブスクリプションタイプ2 - Shared
Producer Consumer
Consumer
Consumer
subscription
(Shared)
▪ 1つのサブスクリプションに複数のConsumerが接続可能
▪ メッセージは各Consumerにラウンドロビンで配信される
▪ 複数のシステムで処理を分担させたい場合に有⽤
トピック
1 12 23 3
Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 27
サブスクリプションタイプ3 - Failover
Producer Consumer
Consumer
Consumer
▪ 複数のConsumerが接続可能だが、メッセージを受け取るのはその内1つだけ
▪ そのConsumerがダウンすると別のConsumerがメッセージを受け取るようになる
▪ システムの障害に備えたい場合に有⽤
subscription
(Failover)
トピック
1 12 23 3
Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 28
// PulsarのURLを指定してクライアントを作成
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
Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 29
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
Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 30
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のサンプルコード - サブスクリプションタイプの指定
Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 31
アーキテクチャ
Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 32
システム構成図 Broker
‣ クライアントとのメッセージのやり取りを
担当
‣ 状態を持たないため増設が容易
Bookie
‣ BookKeeperのストレージノード
‣ トピックに送信されたメッセージやそれに
関連するデータを保存
ZooKeeper
‣ トピックの管理に必要なメタ情報を保存
‣ Local ZKはクラスタ内に閉じた情報を担当
‣ Global ZKは全てのクラスタで共有すべき
情報を担当
Producer Consumer
Broker 1 Broker 2 Broker 3
Bookie
1
Local
ZooKeeper
Bookie
2
Bookie
3
Pulsar クラスタ
Global
ZooKeeper
Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 33
BookKeeperとは?
▪ オープンソースの分散型ログストレージサービス
▪ データを複製し複数のノード(Bookie)に分散して保存 → 強い耐障害性
▪ ノード数を増やせば容量と速度の向上が可能 → スケーラブル
A
Bookie2 Bookie3
D
C
A
B
D
B
C
Bookie1
データの複製数は⾃由に変更可能
Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 34
BookKeeperのアーキテクチャ
▪ 先⾏書き込みログ
› ⾼速なSSDを使⽤
› ストレージに対する「操作」を先に書き込む
› ストレージへの反映は後からバックグラウンドで
› 途中で電源が落ちても「操作」を再開可能
▪ 永続化ストレージ
› 速度はなくても⼤容量なHDDを使⽤
› 連続するデータをまとめてキャッシュに読み込んでおく
› ⼀般にメッセージキューは連続するデータを扱うため効率がよい
速度と永続性の両⽴を実現
先⾏書き込みログ
(SSD)
永続化ストレージ
(HDD)
Bookie
書き込み
キャッシュ
先⾏読み込み
キャッシュ
Write
Read
Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 35
Kafka / RabbitMQ との⽐較
Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 36
代表的なメッセージキュー(再掲)
▪ Kafka
› 2011年にLinkedInから公開
› ⼤量のデータを⾼速に処理する事を⽬指し設計
› ストリームデータの処理によく使⽤される
▪ RabbitMQ
› 2007年にRabbit Technologiesから公開
› 通信プロトコルにAMQPを採⽤
› どちらかと⾔えばパフォーマンスよりも信頼性を重視
Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 37
プロトコル
Pulsar • 独⾃プロトコル
Kafka • 独⾃プロトコル
RabbitMQ • AMQP-0-9-1
• STOMP
• MQTT
• STOMP-over-WebSocket
• MQTT-over-WebSocket
• RabbitMQはAMQPベース → 柔軟なルーティングが可能だが、複雑
• Pulsar, Kafkaはシンプルさを重視
Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 38
クライアント
Pulsar • Java
• C++
• Python
• WebSocket
Kafka • Java
• And more (third-pirty)
RabbitMQ • Java
• JMS
• .NET/C#
• Erlang
• And more (third-pirty)
• Kafka, RabbitMQはサードパーティ製のクライアントが豊富
• PulsarはWebSocket APIで複数⾔語をカバー
Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 39
他アプリケーションとの連携
Pulsar • Storm
• Spark
• Heron
Kafka • Storm
• Spark
• Flink
• Flume
• And more
RabbitMQ • Storm
• Spark
• Flink
Kafkaは様々なストリーム処理フレームワークと連携可能
Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 40
マルチテナントの実現しやすさ
Pulsar ◯トピックが階層化されているため、ネームスペース単位で設定変更が
可能で、設定変更作業を利⽤者側に委任しやすい
◯Quotas(リソースの割り当て)の設定が可能
Kafka △トピックは階層化されておらず、トピックごとに設定が必要
◯Quotasの設定が可能
RabbitMQ ◯Virtual Hostにより論理的な分離が可能
△Quotasの設定ができない
Pulsarはマルチテナントを実現しやすいよう設計されている
Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 41
トピック構造の違い
log-stream-for-log-a
job-queue-for-job-a
job-queue-for-job-b
service-a
job-
queue
job-a
log-
stream
job-b
log-a
log-b
Property
log-stream-for-log-b
Namespace Destination
Kafka
Pulsar
ACL
ACL
ACL
ACL
ACL
ACL
ACL
トピックごとに
設定が必要
ネームスペースの
設定を継承
Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 42
ストレージ
メッセージ 購読位置
(Offset/Cursor)
メタデータ
Pulsar BookKeeper BookKeeper ZooKeeper
Kafka Broker Broker or ZooKeeper ZooKeeper
RabbitMQ Broker Broker Broker
PulsarはBrokerにデータを保持しない(キャッシュを除く)
Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 43
Brokerの負荷分散
Pulsar ◯負荷に応じて⾃動的にBrokerが担当するトピックが移動
◯Brokerを増設した際、トピックの再割り当ては不要
Kafka △Brokerが担当するパーティションは固定
△Brokerを増設した際、パーティションの再割り当てが必要
RabbitMQ △Brokerが担当するqueueは固定
△Brokerを増設した際、queueの再割り当てが必要
PulsarはBrokerにデータを保持しないため、負荷分散が⾃動的に⾏われる
Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 44
スケーラビリティ
Pulsar ◯トピック数が膨⼤でもパフォーマンスが落ちない(Bookieは⼤量の
メッセージを並⾏に読み書きできる)
◯ボトルネックに応じてスケールアウトできる(Broker or Bookie)
Kafka △トピック数 * パーティション数のディレクトリが作成されるため、
Broker1台あたりの数が膨⼤な場合にパフォーマンスが落ちる
RabbitMQ ◯clustering, mirroring, federation, shovelなどを利⽤した分散構成の
構築が可能
△⽤途に合わせて上記から選択し組み合わせることが必要
△ZooKeeperのようなメタデータストアがないため設定が複雑
Pulsarはボトルネックに応じた柔軟なスケールアウトが可能
Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 45
⽐較まとめ
Good Bad
Pulsar • マルチテナントを実現しやすい
• Brokerがデータを保持しないた
め、スケールアウトしやすい
• トピック数が膨⼤でもパフォー
マンスが落ちない
• コンポーネント数が多い( = 必要な
サーバー台数が多い、デプロイに⼿
間がかかる)
Kafka • 多数のクライアント
• 多数のフレームワークと連携
• トピック数 * パーティション数が膨
⼤なときにパフォーマンスが落ちる
RabbitMQ • 多数のクライアント
• 多様なプロトコル
• AMQPの仕様が複雑
Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 46
Yahoo! JAPANの取り組み
Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 47
Yahoo! JAPANのPulsarに対する取り組み
▪ C++クライアントライブラリのOSS化
▪ Athenz⽤認証プラグインのOSS化
(※Athenzはロールベースの認証認可システムを実現するOSS)
▪ Spark Streamingのカスタムレシーバ作成
▪ ワイルドカードを⽤いた認可機能の追加
▪ ドキュメントの⽇本語化
▪ その他細かいバグ修正や機能追加
Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 48
まとめ
Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
まとめ
49
まとめ
▪ Pulsar
› 分散Pub-Subメッセージングシステム
› ⾼速、スケーラブル、マルチテナント、ジオレプリケーション
› 特に⼤規模なサービスでの利⽤に向く
▪ コード・ドキュメントはhttps://pulsar.incubator.apache.orgにあります
▪ ⽇本語ドキュメント もあります
▪ 質問やフィードバックはメーリングリストへ:
› users@pulsar.incubator.apache.org
› dev@pulsar.incubator.apache.org
Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 50
Pulsarの近況 - 最近マージされた機能
▪ Kafka client Java API wrapper
› KafkaProducer / KafkaConsumerのインターフェイスでPulsarを利⽤するためのラッパー
▪ End-to-Endでの暗号化
› メッセージをproduce時に暗号化 / consume時に復号する機能を追加
▪ non-persistentなトピック
› メッセージを永続化しないことでより⾼速なproduce / consumeを可能にするトピック
▪ produce時の重複排除
› メッセージをproduceする際にBroker側で重複を排除する
メッセージキュー「Pulsar」の紹介 @JJUG_20170927

Weitere ähnliche Inhalte

Was ist angesagt?

[DB tech showcase Tokyo 2015] B37 :オンプレミスからAWS上のSAP HANAまで高信頼DBシステム構築にHAクラスタリ...
[DB tech showcase Tokyo 2015] B37 :オンプレミスからAWS上のSAP HANAまで高信頼DBシステム構築にHAクラスタリ...[DB tech showcase Tokyo 2015] B37 :オンプレミスからAWS上のSAP HANAまで高信頼DBシステム構築にHAクラスタリ...
[DB tech showcase Tokyo 2015] B37 :オンプレミスからAWS上のSAP HANAまで高信頼DBシステム構築にHAクラスタリ...
Funada Yasunobu
 
at+link サービスセミナー 20111209
at+link サービスセミナー 20111209at+link サービスセミナー 20111209
at+link サービスセミナー 20111209
Hiroshi Bunya
 
KDL主催セミナー 20120215
KDL主催セミナー 20120215KDL主催セミナー 20120215
KDL主催セミナー 20120215
Hiroshi Bunya
 
20130226 Amazon Web Services 勉強会(新宿)
20130226 Amazon Web Services 勉強会(新宿)20130226 Amazon Web Services 勉強会(新宿)
20130226 Amazon Web Services 勉強会(新宿)
真吾 吉田
 

Was ist angesagt? (18)

Cedec2015 ゲームサーバー基盤の新しい選択肢
Cedec2015 ゲームサーバー基盤の新しい選択肢Cedec2015 ゲームサーバー基盤の新しい選択肢
Cedec2015 ゲームサーバー基盤の新しい選択肢
 
[DB tech showcase Tokyo 2015] B37 :オンプレミスからAWS上のSAP HANAまで高信頼DBシステム構築にHAクラスタリ...
[DB tech showcase Tokyo 2015] B37 :オンプレミスからAWS上のSAP HANAまで高信頼DBシステム構築にHAクラスタリ...[DB tech showcase Tokyo 2015] B37 :オンプレミスからAWS上のSAP HANAまで高信頼DBシステム構築にHAクラスタリ...
[DB tech showcase Tokyo 2015] B37 :オンプレミスからAWS上のSAP HANAまで高信頼DBシステム構築にHAクラスタリ...
 
at+link サービスセミナー 20111209
at+link サービスセミナー 20111209at+link サービスセミナー 20111209
at+link サービスセミナー 20111209
 
大ヒットソーシャルアプリの裏側
大ヒットソーシャルアプリの裏側大ヒットソーシャルアプリの裏側
大ヒットソーシャルアプリの裏側
 
AWS Black Belt Techシリーズ Amazon Route53
AWS Black Belt Techシリーズ Amazon Route53AWS Black Belt Techシリーズ Amazon Route53
AWS Black Belt Techシリーズ Amazon Route53
 
KDL主催セミナー 20120215
KDL主催セミナー 20120215KDL主催セミナー 20120215
KDL主催セミナー 20120215
 
Gmo media.inc 第9回西日本ossの普及を考える会
Gmo media.inc 第9回西日本ossの普及を考える会Gmo media.inc 第9回西日本ossの普及を考える会
Gmo media.inc 第9回西日本ossの普及を考える会
 
Netapp private storage for aws
Netapp private storage for awsNetapp private storage for aws
Netapp private storage for aws
 
SoftLayer Bluemix Summit 2015 はじめてのSoftLayer(サーバー、ストレージ編)
 SoftLayer Bluemix Summit 2015 はじめてのSoftLayer(サーバー、ストレージ編) SoftLayer Bluemix Summit 2015 はじめてのSoftLayer(サーバー、ストレージ編)
SoftLayer Bluemix Summit 2015 はじめてのSoftLayer(サーバー、ストレージ編)
 
SoftLayerクラウド デザインパターン解説
SoftLayerクラウド デザインパターン解説SoftLayerクラウド デザインパターン解説
SoftLayerクラウド デザインパターン解説
 
Softlayerを申込んでみた参考資料 140730
Softlayerを申込んでみた参考資料 140730Softlayerを申込んでみた参考資料 140730
Softlayerを申込んでみた参考資料 140730
 
Cedec2014 世界のゲーム業界で選ばれるIBMの高性能クラウドSoftLayer
Cedec2014 世界のゲーム業界で選ばれるIBMの高性能クラウドSoftLayerCedec2014 世界のゲーム業界で選ばれるIBMの高性能クラウドSoftLayer
Cedec2014 世界のゲーム業界で選ばれるIBMの高性能クラウドSoftLayer
 
20130226 Amazon Web Services 勉強会(新宿)
20130226 Amazon Web Services 勉強会(新宿)20130226 Amazon Web Services 勉強会(新宿)
20130226 Amazon Web Services 勉強会(新宿)
 
AWS Black Belt Online Seminar 2017 Amazon Aurora
AWS Black Belt Online Seminar 2017 Amazon AuroraAWS Black Belt Online Seminar 2017 Amazon Aurora
AWS Black Belt Online Seminar 2017 Amazon Aurora
 
20120423 aws meister-reloaded-fm-son_aws
20120423 aws meister-reloaded-fm-son_aws20120423 aws meister-reloaded-fm-son_aws
20120423 aws meister-reloaded-fm-son_aws
 
WordPressAPI
WordPressAPIWordPressAPI
WordPressAPI
 
いまさら聞けない Amazon EC2
いまさら聞けない Amazon EC2いまさら聞けない Amazon EC2
いまさら聞けない Amazon EC2
 
基礎から徹底解説!SoftLayerの使い方と活用方法
基礎から徹底解説!SoftLayerの使い方と活用方法基礎から徹底解説!SoftLayerの使い方と活用方法
基礎から徹底解説!SoftLayerの使い方と活用方法
 

Andere mochten auch

Andere mochten auch (20)

サンプルで学ぶCassandraアプリケーションの作り方
サンプルで学ぶCassandraアプリケーションの作り方サンプルで学ぶCassandraアプリケーションの作り方
サンプルで学ぶCassandraアプリケーションの作り方
 
サンプルアプリケーションで学ぶApache Cassandraを使ったJavaアプリケーションの作り方
サンプルアプリケーションで学ぶApache Cassandraを使ったJavaアプリケーションの作り方サンプルアプリケーションで学ぶApache Cassandraを使ったJavaアプリケーションの作り方
サンプルアプリケーションで学ぶApache Cassandraを使ったJavaアプリケーションの作り方
 
将来 自分で サービスを持ちたいエンジニアの葛藤
将来 自分で サービスを持ちたいエンジニアの葛藤 将来 自分で サービスを持ちたいエンジニアの葛藤
将来 自分で サービスを持ちたいエンジニアの葛藤
 
VMの歩む道。 Dalvik、ART、そしてJava VM
VMの歩む道。 Dalvik、ART、そしてJava VMVMの歩む道。 Dalvik、ART、そしてJava VM
VMの歩む道。 Dalvik、ART、そしてJava VM
 
Jjugccc2017spring-postgres-ccc_m1
Jjugccc2017spring-postgres-ccc_m1Jjugccc2017spring-postgres-ccc_m1
Jjugccc2017spring-postgres-ccc_m1
 
Java libraries you can't afford to miss
Java libraries you can't afford to missJava libraries you can't afford to miss
Java libraries you can't afford to miss
 
Java8移行は怖くない~エンタープライズ案件でのJava8移行事例~
Java8移行は怖くない~エンタープライズ案件でのJava8移行事例~Java8移行は怖くない~エンタープライズ案件でのJava8移行事例~
Java8移行は怖くない~エンタープライズ案件でのJava8移行事例~
 
Kotlin is charming; The reasons Java engineers should start Kotlin.
Kotlin is charming; The reasons Java engineers should start Kotlin.Kotlin is charming; The reasons Java engineers should start Kotlin.
Kotlin is charming; The reasons Java engineers should start Kotlin.
 
U-NEXT学生インターン、過激なJavaの学び方と過激な要求
U-NEXT学生インターン、過激なJavaの学び方と過激な要求U-NEXT学生インターン、過激なJavaの学び方と過激な要求
U-NEXT学生インターン、過激なJavaの学び方と過激な要求
 
Jjug ccc
Jjug cccJjug ccc
Jjug ccc
 
Arachne Unweaved (JP)
Arachne Unweaved (JP)Arachne Unweaved (JP)
Arachne Unweaved (JP)
 
2017spring jjug ccc_f2
2017spring jjug ccc_f22017spring jjug ccc_f2
2017spring jjug ccc_f2
 
Introduction of Project Jigsaw
Introduction of Project JigsawIntroduction of Project Jigsaw
Introduction of Project Jigsaw
 
SpotBugs(FindBugs)による 大規模ERPのコード品質改善
SpotBugs(FindBugs)による 大規模ERPのコード品質改善SpotBugs(FindBugs)による 大規模ERPのコード品質改善
SpotBugs(FindBugs)による 大規模ERPのコード品質改善
 
Polyglot on the JVM with Graal (English)
Polyglot on the JVM with Graal (English)Polyglot on the JVM with Graal (English)
Polyglot on the JVM with Graal (English)
 
Java Clientで入門する Apache Kafka #jjug_ccc #ccc_e2
Java Clientで入門する Apache Kafka #jjug_ccc #ccc_e2Java Clientで入門する Apache Kafka #jjug_ccc #ccc_e2
Java Clientで入門する Apache Kafka #jjug_ccc #ccc_e2
 
新卒2年目から始めるOSSのススメ~明日からできるコミットデビュー~
新卒2年目から始めるOSSのススメ~明日からできるコミットデビュー~新卒2年目から始めるOSSのススメ~明日からできるコミットデビュー~
新卒2年目から始めるOSSのススメ~明日からできるコミットデビュー~
 
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜
 
グラフデータベース入門
グラフデータベース入門グラフデータベース入門
グラフデータベース入門
 
劇的改善 Ci4時間から5分へ〜私がやった10のこと〜
劇的改善 Ci4時間から5分へ〜私がやった10のこと〜劇的改善 Ci4時間から5分へ〜私がやった10のこと〜
劇的改善 Ci4時間から5分へ〜私がやった10のこと〜
 

Ähnlich wie メッセージキュー「Pulsar」の紹介 @JJUG_20170927

成長できるエンタープライズシステムを目指して-OSGiによるモジュール型アーキテクチャの実現-
成長できるエンタープライズシステムを目指して-OSGiによるモジュール型アーキテクチャの実現-成長できるエンタープライズシステムを目指して-OSGiによるモジュール型アーキテクチャの実現-
成長できるエンタープライズシステムを目指して-OSGiによるモジュール型アーキテクチャの実現-
Hiroki Kondo
 

Ähnlich wie メッセージキュー「Pulsar」の紹介 @JJUG_20170927 (20)

ヤフー発のメッセージキュー「Pulsar」のご紹介
ヤフー発のメッセージキュー「Pulsar」のご紹介ヤフー発のメッセージキュー「Pulsar」のご紹介
ヤフー発のメッセージキュー「Pulsar」のご紹介
 
OpenStack Days Tokyo 2014のプレゼンテーション資料(モーフ・ラボ & アセアン・ラボ)
OpenStack Days Tokyo 2014のプレゼンテーション資料(モーフ・ラボ & アセアン・ラボ)OpenStack Days Tokyo 2014のプレゼンテーション資料(モーフ・ラボ & アセアン・ラボ)
OpenStack Days Tokyo 2014のプレゼンテーション資料(モーフ・ラボ & アセアン・ラボ)
 
≪先進企業に学べ!≫ Yahoo! JAPAN × BROCADE Yahoo! JAPAN はなぜ、OpenStack を選んだのか?
≪先進企業に学べ!≫ Yahoo! JAPAN × BROCADE Yahoo! JAPAN はなぜ、OpenStack を選んだのか?≪先進企業に学べ!≫ Yahoo! JAPAN × BROCADE Yahoo! JAPAN はなぜ、OpenStack を選んだのか?
≪先進企業に学べ!≫ Yahoo! JAPAN × BROCADE Yahoo! JAPAN はなぜ、OpenStack を選んだのか?
 
Microsoft MVP から見たクラウド サービスの現状と今後について
Microsoft MVP から見たクラウド サービスの現状と今後についてMicrosoft MVP から見たクラウド サービスの現状と今後について
Microsoft MVP から見たクラウド サービスの現状と今後について
 
OSC Fukuoka SoftLayer
OSC Fukuoka SoftLayer OSC Fukuoka SoftLayer
OSC Fukuoka SoftLayer
 
150212 summit発表用資料 公開用
150212 summit発表用資料 公開用150212 summit発表用資料 公開用
150212 summit発表用資料 公開用
 
Phpconf2010
Phpconf2010Phpconf2010
Phpconf2010
 
Azure Web PubSub Service の選択肢
Azure Web PubSub Service の選択肢Azure Web PubSub Service の選択肢
Azure Web PubSub Service の選択肢
 
2016年冬 IBMクラウド最新動向と概要
2016年冬 IBMクラウド最新動向と概要2016年冬 IBMクラウド最新動向と概要
2016年冬 IBMクラウド最新動向と概要
 
About SoftLayer at OSC Tokyo Spring
About SoftLayer at OSC Tokyo SpringAbout SoftLayer at OSC Tokyo Spring
About SoftLayer at OSC Tokyo Spring
 
クラウド検討の進め方
クラウド検討の進め方クラウド検討の進め方
クラウド検討の進め方
 
Rancher Update 2020/04, Online Meetups, Japan
Rancher Update 2020/04, Online Meetups, JapanRancher Update 2020/04, Online Meetups, Japan
Rancher Update 2020/04, Online Meetups, Japan
 
高速レポート アプリケーション開発
高速レポート アプリケーション開発高速レポート アプリケーション開発
高速レポート アプリケーション開発
 
Hueによる分析業務の改善事例
Hueによる分析業務の改善事例Hueによる分析業務の改善事例
Hueによる分析業務の改善事例
 
成長できるエンタープライズシステムを目指して-OSGiによるモジュール型アーキテクチャの実現-
成長できるエンタープライズシステムを目指して-OSGiによるモジュール型アーキテクチャの実現-成長できるエンタープライズシステムを目指して-OSGiによるモジュール型アーキテクチャの実現-
成長できるエンタープライズシステムを目指して-OSGiによるモジュール型アーキテクチャの実現-
 
メッセージングプラットフォーム Zimbra の紹介とその活用術 - JJUG ナイトセミナー2013/3
メッセージングプラットフォーム Zimbra の紹介とその活用術 - JJUG ナイトセミナー2013/3メッセージングプラットフォーム Zimbra の紹介とその活用術 - JJUG ナイトセミナー2013/3
メッセージングプラットフォーム Zimbra の紹介とその活用術 - JJUG ナイトセミナー2013/3
 
CFの便利機能を他の環境でも。Open Service Broker
CFの便利機能を他の環境でも。Open Service BrokerCFの便利機能を他の環境でも。Open Service Broker
CFの便利機能を他の環境でも。Open Service Broker
 
We Should Know About in this SocialNetwork Era 2011_1112
We Should Know About in this SocialNetwork Era 2011_1112We Should Know About in this SocialNetwork Era 2011_1112
We Should Know About in this SocialNetwork Era 2011_1112
 
Developer summit continuous deliveryとjenkins
Developer summit   continuous deliveryとjenkinsDeveloper summit   continuous deliveryとjenkins
Developer summit continuous deliveryとjenkins
 
JAWS-UG山形 AWSのきほん 2016/11/12
JAWS-UG山形 AWSのきほん 2016/11/12 JAWS-UG山形 AWSのきほん 2016/11/12
JAWS-UG山形 AWSのきほん 2016/11/12
 

Kürzlich hochgeladen

Kürzlich hochgeladen (11)

業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 

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

  • 2. Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 2 ⾃⼰紹介 栗原 望 経歴: ▪ 2012/04 ヤフー株式会社に新卒⼊社 ▪ 2012/10 ユーザーの属性情報に関連する社内向けプラットフォームの開発 ▪ 2015/07 ヤフオクのBEシステム再構築 ▪ 2016/10 Pub-Subメッセージングシステム「Pulsar」の開発 ▪ 2017/06~ 「Pulsar」のコミッター
  • 3. Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 3 Pulsar ■Pulsarとは Yahoo! Inc. で開発されたPub-Subメッセージングシステム(メッセージキュー) ■使⽤⾔語 ▪ サーバー: Java ▪ クライアント: Java / C++ / Python ■年表 ▪ 2014秋 Yahoo! Inc. が開発を開始 ▪ 2015春 Yahoo! Inc. で利⽤開始 ▪ 2016/04 Yahoo! JAPANが開発に参加 ▪ 2016/09 OSSとして公開 ▪ 2017/01 Yahoo! JAPANで利⽤開始 ▪ 2017/06 Apache Incubator Projectへ移管
  • 4. Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 アジェンダ 4 アジェンダ 1. Pub-Subメッセージングについて 2. Pulsar導⼊の背景 3. Pulsarの特徴 4. 利⽤事例 5. インターフェース 6. アーキテクチャ 7. Kafka / RabbitMQとの違い 8. Yahoo! JAPANの取り組み 9. まとめ
  • 5. Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 5 Pub-Subメッセージング
  • 6. Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 6 メッセージキュー / Pub-Subメッセージング 送信側システム 受信側システム 1 受信側システム 2 受信側システム 3 メッセージキュー 1 1 1 6 2345 トピックに送信(Publish)した メッセージが… 購読(Subscribe)している 全ての相⼿に順番に届く! トピック 送信側と受信側が疎結合 Producer(Publisher) Consumer(Subscriber) ▪ メッセージキュー(MQ) › メッセージ(ログ、通知など)を溜めておくキュー ▪ Pub-Subメッセージング › トピックと呼ばれる宛先に対してメッセージの送受信が⾏われる⽅式
  • 7. Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 7 代表的なメッセージキュー ▪ Kafka › 2011年にLinkedInから公開 › ⼤量のデータを⾼速に処理する事を⽬指し設計 › ストリームデータの処理によく使⽤される ▪ RabbitMQ › 2007年にRabbit Technologiesから公開 › 通信プロトコルにAMQPを採⽤ › どちらかと⾔えばパフォーマンスよりも信頼性を重視 ▪ ActiveMQ › 2004年から使⽤されている歴史あるプロダクト › 様々なプロトコルをサポートし、多数の⾔語から利⽤可能なのが強み
  • 8. Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 8 Pulsar導⼊の背景
  • 9. Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 9 全社プラットフォームとしてのMQを提供したい ■背景: ▪ ヤフーには100程度のサービスがあり、それぞれに開発/運⽤チームが存在 ▪ バックエンドの処理(システム連携、データ解析 etc.)にMQを利⽤したい しかし各チームそれぞれがMQを持つことになると ▪ 設備・運⽤コストが増え、本来やりたかったサービス開発に集中できない ▪ ナレッジが社内で分散する → サービス横断で利⽤可能な、全社プラットフォームとしてのMQを提供したい ■求められる要件: 1. ⾼いパフォーマンス / スケーラビリティ 2. 複数のサービスが同居できる 3. 複数のデータセンター間でのレプリケーション
  • 10. Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 10 要件1 – ⾼いパフォーマンス / スケーラビリティ ▪ ヤフーでは100程度のサービスを提供しており、それぞれの利⽤者数も膨⼤ ▪ 例えばトップページ(PC)の1⽇あたりの利⽤者数は… › PV(Webページの参照回数):2億以上 › UB(ユニークなWebブラウザ数):3千万以上 ▪ それを⽀えるMQも⼤量のメッセージを⾼速に処理できる事が求められる ▪ 利⽤者数増⼤の可能性もあるためスケーラブルである事も必須
  • 11. Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 11 要件2 - 複数のサービスが同居できる A⽤MQProducer サービスA Consumer B⽤MQProducer サービスB Consumer C⽤MQProducer サービスC Consumer Producer サービスD ConsumerD⽤MQ サービスごとに専⽤のMQを⽤意するのはコストが⼤きい 1つのMQに複数のサービスが同居できる(=マルチテナント)ことが求められる ProducerサービスA Consumer Producer Consumer Producer Consumer Producer Consumer トピックA トピックB トピックC トピックD サービスB サービスC サービスD
  • 12. Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 12 要件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するのは ⾮効率的
  • 13. Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 13 Pulsarの特徴
  • 14. Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 14 Pulsarは前述の要件を全て満たす 1. ⾼いパフォーマンス / スケーラビリティ 2. 複数のサービスが同居できる 3. 複数のデータセンター間でのレプリケーション
  • 15. Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 15 特徴1 – ⾼速 / スケーラブル Producer ⼤量のメッセージを⾼速に送受信可能 ▪ Yahoo! Inc. での実績 › トピック数:140万 › メッセージ数:1,000億 [msg/day] › メッセージの送信に要する時間(平均):5 [ms] ▪ サーバの台数を増やせばその分だけキャパシティを増やせる → スケーラブル Consumer Pulsar Consumer Pulsar Producer Producer Producer Producer Producer Producer Consumer Consumer Consumer Consumer Consumer スケール アウト
  • 16. Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 16 パフォーマンス 0 1 2 3 4 5 6 1,000 10,000 100,000 1,000,000 10,000,000 メッセージ送信にかかる時間 [ms] 1秒あたりの送信メッセージ数 [msg/s] 1秒あたりの送信メッセージ数とそれにかかる時間の関係 10 Bytes 100 Bytes 1 KB ※Yahoo! Inc.での実績
  • 17. Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 17 特徴2 - マルチテナント ProducerサービスA Consumer Producer Consumer Producer Consumer Producer Consumer トピックA トピックB トピックC トピックD サービスB サービスC サービスD 他のサービスのトピックへの アクセスは認証・認可機構で ブロック 複数のサービスが1つのPulsarインスタンスを共⽤可能 ▪ ヤフーでは全社で共有するインスタンスを専⽤のチームが提供・運⽤ ▪ 各サービスはサービス開発に集中できる 各サービスが利⽤可能な リソースを個別に設定可能
  • 18. Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 18 特徴3 – ジオレプリケーション Producer トピック あるデータセンターのトピックに送信したメッセージを他のDCに複製・配信可能 ▪ Producerは⾃分と同じデータセンターのPulsarにメッセージを送ればいい ▪ Consumerは⾃分と同じデータセンターのPulsarからメッセージを受け取れる Pulsar クラスタ A Consumer Consumer Consumer データセンターA トピック Consumer Consumer Consumer データセンターB ジオレプリケーション Pulsar クラスタ B
  • 19. Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 19 利⽤事例
  • 20. Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 20 利⽤事例 - コンテンツ⼊稿プラットフォーム ▪ ヤフーには外部のコンテンツプロバイダから様々なファイルが⼊稿される ▪ ⼊稿サーバへのファイル転送を検知したら⼊稿ログをPulsarに流す ▪ トピックを購読している各サービスがファイルを取得して処理する Producer Consumer トピック サービスA Pulsar コンテンツの⼊稿ログ をPulsarに流す ファイルを取得 Consumer サービスB Consumer サービスC ⼊稿サーバ コンテンツ プロバイダ 天気情報、地図情報、 ニュース、etc. ログサーバ
  • 21. Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 21 利⽤事例 - Yahoo!メールのBEシステム(予定) ▪ メールの検索インデックスの⽣成/修正といった時間のかかるジョブを⾮同期に 処理するために利⽤ ▪ ProducerはPulsarにジョブをキューイング ▪ ConsumerはPulsarからジョブを取り出して順番に処理 Producer Consumer Producer トピック ジョブを処理する ハンドラ メールBEサーバ メールBEサーバ Pulsar リクエスト ジョブを登録 忙しい時やジョブが 失敗した時は再登録 ジョブを 取り出して処理
  • 22. Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 22 インターフェース
  • 23. Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 23 Pulsarのインターフェース ▪ クライアントライブラリはJava, C++, Pythonを提供 ▪ 他の⾔語からもWebSocket APIを利⽤可能 ▪ Producer/Consumerは次のようなトピックURIを指定してPulsarに接続 ▪ さらにConsumerはサブスクリプションの名前を指定する必要がある ▪ ⽤途に応じて3種類のサブスクリプションモード(メッセージの配信⽅式)を選択可能 persistent://property/cluster/namespace/destination サービス名など データセンターなど ⽤途など ⽤途の詳細などメッセージを永続化
  • 24. Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 24 サブスクリプションとは? Producer Consumer Consumer 1 2345 Consumerがトピックの購読を開始した時に作成される購読の管理単位 ▪ メッセージのキューはサブスクリプションごとに⽤意される ▪ Consumerとの接続が切れても削除されず、再接続までの間メッセージを溜め続ける subscription-B subscription-A 123 45 subscription-Aのキュー subscription-Bのキュー トピック
  • 25. Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 25 サブスクリプションタイプ1 - Exclusive Producer Consumer Consumer Consumer 1 ▪ 1つのサブスクリプションには1つのConsumerだけが接続可能 ▪ 既にConsumerが存在するサブスクリプションに接続を試みるとエラーになる subscription-A (Exclusive) subscription-B (Exclusive) トピック 1 1 2 2 2
  • 26. Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 26 サブスクリプションタイプ2 - Shared Producer Consumer Consumer Consumer subscription (Shared) ▪ 1つのサブスクリプションに複数のConsumerが接続可能 ▪ メッセージは各Consumerにラウンドロビンで配信される ▪ 複数のシステムで処理を分担させたい場合に有⽤ トピック 1 12 23 3
  • 27. Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 27 サブスクリプションタイプ3 - Failover Producer Consumer Consumer Consumer ▪ 複数のConsumerが接続可能だが、メッセージを受け取るのはその内1つだけ ▪ そのConsumerがダウンすると別のConsumerがメッセージを受け取るようになる ▪ システムの障害に備えたい場合に有⽤ subscription (Failover) トピック 1 12 23 3
  • 28. Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 28 // PulsarのURLを指定してクライアントを作成 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
  • 29. Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 29 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
  • 30. Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 30 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のサンプルコード - サブスクリプションタイプの指定
  • 31. Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 31 アーキテクチャ
  • 32. Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 32 システム構成図 Broker ‣ クライアントとのメッセージのやり取りを 担当 ‣ 状態を持たないため増設が容易 Bookie ‣ BookKeeperのストレージノード ‣ トピックに送信されたメッセージやそれに 関連するデータを保存 ZooKeeper ‣ トピックの管理に必要なメタ情報を保存 ‣ Local ZKはクラスタ内に閉じた情報を担当 ‣ Global ZKは全てのクラスタで共有すべき 情報を担当 Producer Consumer Broker 1 Broker 2 Broker 3 Bookie 1 Local ZooKeeper Bookie 2 Bookie 3 Pulsar クラスタ Global ZooKeeper
  • 33. Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 33 BookKeeperとは? ▪ オープンソースの分散型ログストレージサービス ▪ データを複製し複数のノード(Bookie)に分散して保存 → 強い耐障害性 ▪ ノード数を増やせば容量と速度の向上が可能 → スケーラブル A Bookie2 Bookie3 D C A B D B C Bookie1 データの複製数は⾃由に変更可能
  • 34. Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 34 BookKeeperのアーキテクチャ ▪ 先⾏書き込みログ › ⾼速なSSDを使⽤ › ストレージに対する「操作」を先に書き込む › ストレージへの反映は後からバックグラウンドで › 途中で電源が落ちても「操作」を再開可能 ▪ 永続化ストレージ › 速度はなくても⼤容量なHDDを使⽤ › 連続するデータをまとめてキャッシュに読み込んでおく › ⼀般にメッセージキューは連続するデータを扱うため効率がよい 速度と永続性の両⽴を実現 先⾏書き込みログ (SSD) 永続化ストレージ (HDD) Bookie 書き込み キャッシュ 先⾏読み込み キャッシュ Write Read
  • 35. Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 35 Kafka / RabbitMQ との⽐較
  • 36. Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 36 代表的なメッセージキュー(再掲) ▪ Kafka › 2011年にLinkedInから公開 › ⼤量のデータを⾼速に処理する事を⽬指し設計 › ストリームデータの処理によく使⽤される ▪ RabbitMQ › 2007年にRabbit Technologiesから公開 › 通信プロトコルにAMQPを採⽤ › どちらかと⾔えばパフォーマンスよりも信頼性を重視
  • 37. Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 37 プロトコル Pulsar • 独⾃プロトコル Kafka • 独⾃プロトコル RabbitMQ • AMQP-0-9-1 • STOMP • MQTT • STOMP-over-WebSocket • MQTT-over-WebSocket • RabbitMQはAMQPベース → 柔軟なルーティングが可能だが、複雑 • Pulsar, Kafkaはシンプルさを重視
  • 38. Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 38 クライアント Pulsar • Java • C++ • Python • WebSocket Kafka • Java • And more (third-pirty) RabbitMQ • Java • JMS • .NET/C# • Erlang • And more (third-pirty) • Kafka, RabbitMQはサードパーティ製のクライアントが豊富 • PulsarはWebSocket APIで複数⾔語をカバー
  • 39. Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 39 他アプリケーションとの連携 Pulsar • Storm • Spark • Heron Kafka • Storm • Spark • Flink • Flume • And more RabbitMQ • Storm • Spark • Flink Kafkaは様々なストリーム処理フレームワークと連携可能
  • 40. Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 40 マルチテナントの実現しやすさ Pulsar ◯トピックが階層化されているため、ネームスペース単位で設定変更が 可能で、設定変更作業を利⽤者側に委任しやすい ◯Quotas(リソースの割り当て)の設定が可能 Kafka △トピックは階層化されておらず、トピックごとに設定が必要 ◯Quotasの設定が可能 RabbitMQ ◯Virtual Hostにより論理的な分離が可能 △Quotasの設定ができない Pulsarはマルチテナントを実現しやすいよう設計されている
  • 41. Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 41 トピック構造の違い log-stream-for-log-a job-queue-for-job-a job-queue-for-job-b service-a job- queue job-a log- stream job-b log-a log-b Property log-stream-for-log-b Namespace Destination Kafka Pulsar ACL ACL ACL ACL ACL ACL ACL トピックごとに 設定が必要 ネームスペースの 設定を継承
  • 42. Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 42 ストレージ メッセージ 購読位置 (Offset/Cursor) メタデータ Pulsar BookKeeper BookKeeper ZooKeeper Kafka Broker Broker or ZooKeeper ZooKeeper RabbitMQ Broker Broker Broker PulsarはBrokerにデータを保持しない(キャッシュを除く)
  • 43. Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 43 Brokerの負荷分散 Pulsar ◯負荷に応じて⾃動的にBrokerが担当するトピックが移動 ◯Brokerを増設した際、トピックの再割り当ては不要 Kafka △Brokerが担当するパーティションは固定 △Brokerを増設した際、パーティションの再割り当てが必要 RabbitMQ △Brokerが担当するqueueは固定 △Brokerを増設した際、queueの再割り当てが必要 PulsarはBrokerにデータを保持しないため、負荷分散が⾃動的に⾏われる
  • 44. Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 44 スケーラビリティ Pulsar ◯トピック数が膨⼤でもパフォーマンスが落ちない(Bookieは⼤量の メッセージを並⾏に読み書きできる) ◯ボトルネックに応じてスケールアウトできる(Broker or Bookie) Kafka △トピック数 * パーティション数のディレクトリが作成されるため、 Broker1台あたりの数が膨⼤な場合にパフォーマンスが落ちる RabbitMQ ◯clustering, mirroring, federation, shovelなどを利⽤した分散構成の 構築が可能 △⽤途に合わせて上記から選択し組み合わせることが必要 △ZooKeeperのようなメタデータストアがないため設定が複雑 Pulsarはボトルネックに応じた柔軟なスケールアウトが可能
  • 45. Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 45 ⽐較まとめ Good Bad Pulsar • マルチテナントを実現しやすい • Brokerがデータを保持しないた め、スケールアウトしやすい • トピック数が膨⼤でもパフォー マンスが落ちない • コンポーネント数が多い( = 必要な サーバー台数が多い、デプロイに⼿ 間がかかる) Kafka • 多数のクライアント • 多数のフレームワークと連携 • トピック数 * パーティション数が膨 ⼤なときにパフォーマンスが落ちる RabbitMQ • 多数のクライアント • 多様なプロトコル • AMQPの仕様が複雑
  • 46. Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 46 Yahoo! JAPANの取り組み
  • 47. Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 47 Yahoo! JAPANのPulsarに対する取り組み ▪ C++クライアントライブラリのOSS化 ▪ Athenz⽤認証プラグインのOSS化 (※Athenzはロールベースの認証認可システムを実現するOSS) ▪ Spark Streamingのカスタムレシーバ作成 ▪ ワイルドカードを⽤いた認可機能の追加 ▪ ドキュメントの⽇本語化 ▪ その他細かいバグ修正や機能追加
  • 48. Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 48 まとめ
  • 49. Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 まとめ 49 まとめ ▪ Pulsar › 分散Pub-Subメッセージングシステム › ⾼速、スケーラブル、マルチテナント、ジオレプリケーション › 特に⼤規模なサービスでの利⽤に向く ▪ コード・ドキュメントはhttps://pulsar.incubator.apache.orgにあります ▪ ⽇本語ドキュメント もあります ▪ 質問やフィードバックはメーリングリストへ: › users@pulsar.incubator.apache.org › dev@pulsar.incubator.apache.org
  • 50. Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 50 Pulsarの近況 - 最近マージされた機能 ▪ Kafka client Java API wrapper › KafkaProducer / KafkaConsumerのインターフェイスでPulsarを利⽤するためのラッパー ▪ End-to-Endでの暗号化 › メッセージをproduce時に暗号化 / consume時に復号する機能を追加 ▪ non-persistentなトピック › メッセージを永続化しないことでより⾼速なproduce / consumeを可能にするトピック ▪ produce時の重複排除 › メッセージをproduceする際にBroker側で重複を排除する