分散型発電のメッセージキューのApacheパルサー

パルサーについて

Apacheのパルサーは、もともと2016年にヤフー、オープンソースで開発されたエンタープライズクラスの分散型メッセージングシステム、である、Apacheのインキュベーター財団中です。Plusar Yahooは、主にメール、財務、スポーツ、Flickrの、サービング、三年以上運用環境で使用されてきた双子の広告プラットフォーム、シェルパとYahooのKVストレージを。
パルサーは、主に以下の特徴の、メッセージキューの次の世代と呼ばれることができました。

  • 線膨張。それは、絹のような数百のノードに拡張可能(ノード間でデータをコピーするために必要なシステムリソースの多くを取るカフカの拡大ではなく、完全にPlusar)することができます

  • ハイスループット。Yahooは、本番環境での秒あたりのメッセージ数百万の試練に耐えました

  • 低レイテンシー。依然として低レイテンシを維持することができるメッセージの膨大な量の(<5ミリ秒)

  • 永続化メカニズム。Apacheの簿記係の上に構築されたPlusar永続化メカニズムは、IOは書き込みや読み出しの前に絶縁を提供します

  • ベースの場所をコピーします。Plusarは、主要機能のサポートとして利用できる多地域/エリアをコピーします。ユーザーは、単に利用可能な領域を設定し、メッセージが他の利用可能なエリアの安定したストリームにコピーされます。ネットワークパーティションの使用可能な領域の一つまたはハングすると、plusar再試行の後に続けます。

  • 展開の多様化。どちらも、ベアメタル上で実行されますが、ローカルの開発者は全体のみコマンドライン環境を起動する必要がありながらも、現在の例ドッカー、K8Sコンテナスキームと異なるクラウドベンダーのいくつかをサポートすることができます。

  • トピックは、消費パターンの多様性をサポートしています、排他的、共有、フェイルオーバー

アーキテクチャの概要

上面、複数のクラスタからなるPlusarユニットから、各ユニット内のクラスタは前のデータをコピーし、plusar一般的に以下の成分を有していてもよいです。

  • ブローカー:消費者に送信され、分散したメッセージの処理を担当プロデューサー。共同のグローバルZKクラスターを通じてさまざまなタスクを処理するには、例えば、ロケーションベースのレプリケーションと述べました。そして、メッセージは、簿記係を保存するだけでなく、いくつかのメタデータを格納するための単一のクラスタZKクラスタを持っている必要があります。

  • 簿記クラスタ:永続的なメッセージのために、内部のブックメーカーを複数備えました。

  • ZooKeeperのクラスタ


    640

ブローカ

でカフカとRocketMQにおいて、ブローカーは、ブローカー及びそれらの二つが異なる、plusarブローカは、ステートレスノードである三つの原因であると記憶し、記憶されたメッセージデータの消費者の消費変位、等、及びPlusarする責任があります。

  • 等の露光クエリーコマンドと話題の所有者の管理を実行するためのRESTインターフェース、

  • TCPサーバ、Googleのプロトコルバッファの前に、オープンソースの現在の使用のノード間の非同期通信のためのプロトコル

  • 地理的レプリケーションをサポートするために、メッセージブローカは、独自のクラスタ、他の利用可能なエリアを公開します。

メッセージは言うに所有者を見つけるために、最初の簿記係に投稿して、ブローカーのローカルメモリのコピーをキャッシュされ、一般的にメモリから読み出されたメッセージを読みますので、その話題で言及されている最初の元帳の簿記係が唯一のライターを可能にするので、私たちは現在の所有者の特定のトピックに取得するために、残りのインタフェースを呼び出すことができます。

簿記係

簿記は、基本単位は簿記実際に記録されて横方向に延び、フォールトトレランス、低レイテンシ分散ストレージサービスバイト配列、およびレコードと呼ばれる元帳の配列であり、BKに記録します高い可用性をもたらす、元帳格納されたブックメーカーと呼ばれるブックメーカーにコピーされた複数のノードと、許容誤差。アカウントにさまざまな障害を取るために設計段階からBKは、ダウンタイムがブックメーカーは、ダーティデータを、データを失ったことができますが、全体の主クラスタは、十分なブックメーカーサービス動作が正しいことがあります。
パルサーでは、各パーティションは、いくつかのトピック元帳組成物で構成され、元帳は、各レコードの元帳は、ブックメーカーの複数コピーされ、単一のライターできるように、追加専用のデータ構造であり、元帳であります意志(例えばブローカーがダウンしているか、特定のサイズに達する)のみの読み取りをサポートする、およびデータはもはや台帳を必要とされている場合(たとえば、すべての消費者は、この台帳ニュースで消費されていない)閉じた後それは削除されます。
640?wx_fmt = PNG

Bookkeeper的主要优势在于它可以保证在出现故障时在ledger的读取一致性。因为ledger只能被同时被一个writer写入,因为没有竞争,BK可以更高效的实现写入。在Broker宕机后重启时,Plusar会启动一个恢复的操作,从ZK中读取最后一个写入的Ledger并读取最后一个已提交的记录,然后所有的消费者也都被保证能看到同样的内容。

640?wx_fmt = PNG

我们知道Kafka在0.8版本之前是将消费进度存储到ZK中的,但是ZK本质上基于单个日志的中心服务,简单来讲,ZK的性能不会随着你增加更多的节点而线性增加,会只会相反减少,因为更多的节点意味着需要将日志同步到更多的节点,性能也会随之下降,因此QPS也会受单机性能影响,因此0.8版本之后就将消费进度存储到了Kafka的Topic中,而RocketMQ最初的版本也类似,有几种不同的实现例如ZK、数据库等,目前版本采用的是存储到本机文件系统中,而Plusar采用了和Kafka类似的思想,Plusar将消费进度也存储到了BK的ledger中。

640?wx_fmt = PNG

元数据

Plusar中的元数据主要存储到ZK中,例如不同可用区相关的配置会存在全局的ZK中,集群内部的ZK用于存储例如某个topic的数据写入到了那些Ledger、Broker目前的一些埋点数据等等

Plusar核心概念

Topic

发布订阅系统中最核心的概念是topic,简单来说,topic可以理解为一个管道,producer可以往这个管道丢消息,consumer可以从这个管道的另一端读取消息,但是这里可以有多个consumer同时从这个管道读取消息。
640?wx_fmt = PNG
每个topic可以划分为多个分区,同一个topic下的不同分区所包含的消息都是不同的。每个消息在被添加到一个分区后都会分配一个唯一的offset,在同一个分区内消息是有序的,因此客户端可以根据比如说用户ID进行一个哈希取模从而使得整个用户的消息都发往整个分区,从而一定程度上避免race condition的问题。
通过分区,将大量的消息分散到不同的节点处理从而获得高吞吐。默认情况下,plusar的topic都是非分区的,但是支持通过cli或者接口创建一定分区数目的topic。

640?wx_fmt = PNG


默认情况下Plusar会自动均衡Producer和Consumer,但有时候客户端想要根据自己的业务规则也进行路由,Plusar默认支持以下几种规则:单分区、轮询、哈希、自定义(即自己实现相关接口来定制路由规则)

消费模式

消费决定了消息具体是如何被分发到消费者的,Plusar支持几种不同的消费模式: exclusive、shared、failover。图示如下:

640?wx_fmt = PNG

  • Exclusive: 一个topic只能被一个消费者消费。Plusar默认就是这个模式

  • Shared: 共享模式或者叫轮询模式,多个消费者可以连接到同一个topic,消息被依次分发给消费者,当一个消费者宕机或者主动断开连接,那么发到那个消费者的还没有ack的消息会得到重新调度分发给其他消费者。

  • フェイルオーバー:複数の消費者が同じトピックに接続し、辞書式順序をたどることができ、消費者は、最初のメッセージを費やして開始しますが、マスター、マスターディスコネクトではなく、ACKおよびメッセージキュー分布のすべての残りの部分と呼ばれます別のコンシューマへ。
    Plusarは今も、着信メッセージのIDをサポートし、別のリーダー・インターフェースをサポートし、例えば、最も古いメッセージからの支出を開始するMessage.Earliestを言います。

概要

Plusar次世代ようメッセージキューを分散し、非常に多くの魅力的な特性を持っていますが、また読み書きするために、このようなコピー領域、マルチテナント、スケーラビリティ、隔離など他の競合製品のいくつかの欠点を補います。

640?wx_fmt = GIF

640?wx_fmt = JPEG

おすすめ

転載: blog.csdn.net/u013411339/article/details/91488583