@forestsheep
2020-02-26T23:06:08.000000Z
字数 10593
阅读 195
IT
cybozu
英 | 中 | 日 |
---|---|---|
Middleware | 中间件 | ミドルウェア |
Message-oriented middleware | 消息中间件 | メッセージ指向ミドルウェア |
synchronous flush | 同步刷盘 | 同期flush |
asynchronous flush | 异步刷盘 | 非同期flush |
synchronous replication | 同步复制 | 同期レプリケーション |
asynchronous replication | 异步复制 | 非同期レプリケーション |
Long Polling | 长轮询 | Long polling |
Order Message | 消息顺序 | 順序メッセージ |
Message Trace | 消息回溯 | Message Trace |
天猫双11购物节 | 「天猫ダブルイレブン」ショッピングフェスティバル |
由于本人对此项技术了解不深,在找专业名字的过程中可能有疏漏。特此记录查资料过程中的一些事项。
Apache RocketMQ是一个分布式消息传递和流媒体平台,具有低延迟,高性能和可靠性,万亿级容量和灵活的可伸缩性。它的一个重要特性是支持非日志类型的可靠消息传送,非常适合运用在金融和电子商务领域。目前他是Apache社区的顶级项目,在全球有超过100家公司在其业务中使用RocketMQ的开源版本。
RocketMQ起源于阿里巴巴。阿里巴巴最初由于业务需求,需要使用消息中间件。早期使用过Notify,ActiveMQ等。但在需求不断膨胀的情况下,ActiveMQ IO模块遇到了瓶颈,几经努力但改善成果不佳。这时正值Kafka流行,于是引起了阿里巴巴开发团队的注意,对kafka的无限消息堆积,高效持久化速度等特性非常赞赏。但不幸的是,Kafka不能满足他们的要求,特别是在低延迟和高可靠性方面。在这种情况下,阿里巴巴决定发明一个新的消息传递引擎来处理更广泛的用例集,从传统的发布/订阅方案到大批量实时零损失容忍交易系统。
2012年,阿里巴巴开始开发RocketMQ,经历了数次双11核心交易链路检验。
2016年11月11日,RocketMQ又一次在阿里巴巴全球购物节上处理了1.2万亿个并发在线消息传输,随后阿里巴巴将RocketMQ捐献给Apache Incubator。
2017年9月25日 – Apache软件基金会,连同350多个开源项目的全体志愿者、开发人员、管理人员、和孵化项目组织,宣布Apache®RocketMQ™从Apache孵化器毕业成为顶级项目,这表明该项目的社区和产品已根据ASF的精英流程和原则得到了很好的管理。参见
现今,Apache RocketMQ在社区各方面的努力下,茁壮发展,很多功能都得到了加强。
在我们看来,它最大的创新点在于能够通过精巧的横向、纵向扩展,不断满足与日俱增的海量消息在高吞吐、高可靠、低延迟方面的要求。
目前RocketMQ主要由NameServer、Broker、Producer以及Consumer四部分构成,如下图所示。
NameServer以轻量级的方式提供服务发现和路由功能,每个NameServer存有全量的路由信息,提供对等的读写服务,支持快速扩缩容。
Broker负责消息存储,以Topic为纬度支持轻量级的队列,单机可以支撑上万队列规模,支持消息推拉模型,具备多副本容错机制(2副本或3副本)、强大的削峰填谷以及上亿级消息堆积能力,同时可严格保证消息的有序性。除此之外,Broker还提供了同城异地容灾能力,丰富的Metrics统计以及告警机制。这些都是传统消息系统无法比拟的。
Producer由用户进行分布式部署,消息由Producer通过多种负载均衡模式发送到Broker集群,发送低延时,支持快速失败。
Consumer也由用户部署,支持PUSH和PULL两种消费模式,支持集群消费和广播消息,提供实时的消息订阅机制,满足大多数消费场景。
RabbitMQ是AMQP规范的参考实现,AMQP是一个线路层协议,面面俱到,很系统,也稍显复杂。目前RabbitMQ已经成为OpenStack Iaas平台首选的消息服务,其背后的支持力度不言而喻。
ActiveMQ最初主要的开发者在LogicBlaze,现在主要开发红帽,是JMS规范的参考实现,也是Apache旗下的老牌消息服务引擎。JMS虽说是一个API级别的协议,但其内部还是定义了一些实现约束,不过缺少多语言支撑。ActiveMQ的生态堪称丰富多彩,在该Apache顶级项目下,拥有不少子项目,包括由HornetMQ演变而来的Artemis,基于Scala号称下一代AMQ的Apollo等。
而Kafka最初被设计用来做日志处理,是一个不折不扣的大数据通道,追求高吞吐,存在丢消息的可能。其背后的研发团队也围绕着Kafka进行了商业包装,目前在一些中小型公司被广泛使用。
下表是一目了然的快速参考,可快速发现RocketMQ及其最受欢迎的替代产品之间的差异。
Messaging Product | Client SDK | Protocol and Specification | Ordered Message | Scheduled Message | Batched Message | BroadCast Message | Message Filter | Server Triggered Redelivery | Message Storage | Message Retroactive | Message Priority | High Availability and Failover | Message Track | Configuration | Management and Operation Tools |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
ActiveMQ | Java, .NET, C++ etc. | Push model, support OpenWire, STOMP, AMQP, MQTT, JMS | Exclusive Consumer or Exclusive Queues can ensure ordering | Supported | Not Supported | Supported | Supported | Not Supported | Supports very fast persistence using JDBC along with a high performance journal,such as levelDB, kahaDB | Supported | Supported | Supported, depending on storage,if using kahadb it requires a ZooKeeper server | Not Supported | The default configuration is low level, user need to optimize the configuration parameters | Supported |
Kafka | Java, Scala etc. | Pull model, support TCP | Ensure ordering of messages within a partition | Not Supported | Supported, with async producer | Not Supported | Supported, you can use Kafka Streams to filter messages | Not Supported | High performance file storage | Supported offset indicate | Not Supported | Supported, requires a ZooKeeper server | Not Supported | Kafka uses key-value pairs format for configuration. These values can be supplied either from a file or programmatically. | Supported, use terminal command to expose core metrics |
RocketMQ | Java, C++, Go | Pull model, support TCP, JMS, OpenMessaging | Ensure strict ordering of messages,and can scale out gracefully | Supported | Supported, with sync mode to avoid message loss | Supported | Supported, property filter expressions based on SQL92 | Supported | High performance and low latency file storage | Supported timestamp and offset two indicates | Not Supported | Supported, Master-Slave model, without another kit | Supported | Work out of box,user only need to pay attention to a few configurations | Supported, rich web and terminal command to expose core metrics |
Apache RocketMQは、低レイテンシ、高パフォーマンスと信頼性、1兆規模の容量、柔軟なスケーラビリティを備えた分散メッセージングおよびストリーミングメディアプラットフォームです。その重要な機能は、非ログタイプの信頼性の高いメッセージングをサポートすることです。これは、金融および電子商取引の分野での使用に非常に適しています。彼は現在、Apacheコミュニティのトッププロジェクトであり、世界中の100社以上の企業がオープンソースバージョンのRocketMQをビジネスに使用しています。
Apache RocketMQは高パフォーマンス、高信頼性、兆規模の容量、柔軟なスケーラビリティを持つ分散メッセージングシステムおよびストリーミングメディアプラットフォームである。Apache RocketMQの重要な特徴の一つは、非ログタイプの信頼性の高いメッセージング転送で、金融および電子商取引の分野での応用に非常に適切している。現在、Apache Software Foundationのトッププロジェクトであり、世界中に100社以上企業がオープンソースバージョンのRocketMQを業務に使用している。
RocketMQはアリババから発信されました。 アリババは当初、ビジネスニーズのためにメッセージングミドルウェアを必要としていました。以前に使用されたNotify、ActiveMQなど。ただし、需要が継続的に拡大する場合、ActiveMQ IOモジュールにボトルネックが発生し、いくつかの努力を重ねた結果、改善結果は良くありませんでした。当時、Kafkaは人気があったため、アリババ開発チームの注目を集め、Kafkaの無限のメッセージ蓄積と効率的な持続速度の機能を高く評価しました。残念ながら、Kafkaは、特に低レイテンシと高信頼性の点で、要件を満たすことができません。この場合、アリババは、従来のパブリッシュ/サブスクライブスキームから大量のリアルタイムゼロロストレラントトレーディングシステムまで、幅広いユースケースを処理する新しいメッセージングエンジンを発明することを決定しました。
RocketMQはアリババ社から発源されていた。 当初、アリババはビジネスニーズのためメッセージ指向ミドルウェアを要としていた。Notify、ActiveMQなどが使用されたが、ニーズが継続的に膨張しつつあり、ActiveMQ IOモジュールにボトルネックが発生していた。いくつかの努力を重ねたが著しい改善が認めされなかった。当時、Kafkaの流行度が高まっていることに気づき、アリババ開発チームがKafkaの無限のメッセージ蓄積と効率的な持続速度の機能を興味深く注目していた。残念ながら、そのままKafkaを使うことが不可能だと判断した。低遅延、高信頼性、そのに点の要求に満たすことができないのが致命的であった。いろいろ考えた上、アリババ開発チームが従来のパブリッシュ/サブスクライブ解決策から大量のリアルタイムゼロトレランストレーディングシステムまで、幅広いユースケースを処理する新しいメッセージ指向ミドルウェアを発明することを決定した。
2012年、アリババはRocketMQの開発を開始し、いくつかの二重11コアトランザクションリンクインスペクションを実施しました。
2016年11月11日に、Rocketはアリババ Global Shopping Festivalで1.2兆の同時オンラインメッセージ送信を再び処理し、アリババはRocketMQをApache Incubatorに寄付しました。
2017年9月25日-Apache Software Foundationは、350を超えるオープンソースプロジェクトのすべてのボランティア、開発者、マネージャー、およびインキュベーションプロジェクト組織とともに、Apache IncubatorからトップレベルプロジェクトへのApache®RocketMQ™の卒業を発表しました。プロジェクトのコミュニティと製品は、ASFのエリートプロセスと原則に従って適切に管理されています。 [参照](https://blogs.apache.org/foundation/entry/the-apache-software-foundation-announces18)
今日、Apache RocketMQはコミュニティのあらゆる努力で繁栄しており、多くの機能が強化されています。
私たちの意見では、最大の革新は、絶妙な水平および垂直拡張により、高スループット、高信頼性、低遅延の要件を継続的に満たす能力にあります。
現在、RocketMQは、下図に示すように、主にNameServer、Broker、Producer、およびConsumerの4つの部分で構成されています。
![](http://img3.tbcdn.cn/5476e8b07b923/TB1FUR8PVXXXXbbXpXXXXXXXXXXXXX)NameServerは、サービス検出およびルーティング機能を軽量に提供し、各NameServerは、すべてのルーティング情報を保存し、ピアツーピアの読み取りおよび書き込みサービスを提供し、迅速な拡張と縮小をサポートします。
ブローカーはメッセージの格納を担当し、Topicを緯度として使用して軽量キューをサポートし、1台のマシンで数万のキューをサポートでき、メッセージのプッシュプルモデルをサポートします。 1億のメッセージスタッキング機能と、同時にメッセージの順序を厳密に保証できます。さらに、Brokerは、都市内の災害復旧機能、豊富なメトリック統計、およびアラームメカニズムも提供します。これらは、従来のメッセージングシステムとは比較になりません。
プロデューサーはユーザーによって分散方式でデプロイされ、プロデューサーはさまざまな負荷分散モードを介してブローカークラスターにメッセージを送信し、低遅延および高速障害サポートを提供します。
消費者もユーザーによって展開され、PUSHとPULLの2つの消費モードをサポートし、クラスター消費とブロードキャストメッセージをサポートし、ほとんどの消費シナリオに対応するリアルタイムメッセージサブスクリプションメカニズムを提供します。
- RocketMQは、非同期リアルタイムフラッシュディスク、同期フラッシュディスク、同期レプリケーション、非同期レプリケーションをサポートしています。高い信頼性。オペレーティングシステムのクラッシュによるデータの損失はありません。
- RocketMQは一連の実践と最適化を経ており、処理速度は最初の10,000TPSから50,000TPSを超えました。 TPSの比較はKafkaの100万レベルほどではありませんが、トランザクションをサポートするメッセージミドルウェアではすでに非常に優れています。
- RocketMQは長いポーリングを使用し、メッセージ配信の遅延は通常数ミリ秒程度です。
- RocketMQシングルマシンは最大50,000個のキューをサポートし、負荷はそれほど増加しません。
- RocketMQは、消費エラーの再試行をサポートしており、この機能は充電アプリケーションに非常に適しています。
- RocketMQは厳密なメッセージ順序をサポートします。ブローカーがダウンした場合でも、メッセージ配信は失敗しますが、順序が狂うことはありません。
- RocketMQはタイミングメッセージをサポートします
- RocketMQは分散トランザクションメッセージをサポートします
- RocketMQは、メッセージIDまたはコンテンツに基づいたクエリをサポートしています。
- RocketMQは、特定の時間、1分、および1秒前のメッセージの再消費など、ミリ秒の精度で、時間に応じた連続したメッセージをサポートします。
RabbitMQはAMQP仕様のリファレンス実装であり、AMQPは包括的で非常に体系的でわずかに複雑なラインレイヤープロトコルです。現在、RabbitMQはOpenStack Iaasプラットフォームに最適なメッセージングサービスになっており、その背後にあるサポートは自明です。
ActiveMQは元々LogicBlazeによって開発されましたが、現在は主にRed Hatを開発しており、JMS仕様のリファレンス実装であり、Apacheの下での古いスタイルのメッセージングサービスエンジンです。 JMSはAPIレベルのプロトコルですが、まだいくつかの実装上の制約を定義していますが、多言語のサポートはありません。このApacheトップレベルプロジェクトには、HornetMQから進化したArtemisや、次世代AMQとして知られるScalaに基づくApolloなど、多くのサブプロジェクトがあります。
Kafkaはもともとログ処理用に設計されたもので、妥協のない大きなデータチャネルであり、高いスループットとメッセージ損失の可能性を追求しています。また、その背後にある研究開発チームは、現在中小企業で広く使用されているカフカ周辺の商業パッケージを実施しています。
以下の表は、RocketMQとその最も一般的な代替品の違いをすばやく発見するためのクイックリファレンスです。
Messaging Product | Client SDK | Protocol and Specification | Ordered Message | Scheduled Message | Batched Message | BroadCast Message | Message Filter | Server Triggered Redelivery | Message Storage | Message Retroactive | Message Priority | High Availability and Failover | Message Track | Configuration | Management and Operation Tools |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
ActiveMQ | Java, .NET, C++ etc. | Push model, support OpenWire, STOMP, AMQP, MQTT, JMS | Exclusive Consumer or Exclusive Queues can ensure ordering | Supported | Not Supported | Supported | Supported | Not Supported | Supports very fast persistence using JDBC along with a high performance journal,such as levelDB, kahaDB | Supported | Supported | Supported, depending on storage,if using kahadb it requires a ZooKeeper server | Not Supported | The default configuration is low level, user need to optimize the configuration parameters | Supported |
Kafka | Java, Scala etc. | Pull model, support TCP | Ensure ordering of messages within a partition | Not Supported | Supported, with async producer | Not Supported | Supported, you can use Kafka Streams to filter messages | Not Supported | High performance file storage | Supported offset indicate | Not Supported | Supported, requires a ZooKeeper server | Not Supported | Kafka uses key-value pairs format for configuration. These values can be supplied either from a file or programmatically. | Supported, use terminal command to expose core metrics |
RocketMQ | Java, C++, Go | Pull model, support TCP, JMS, OpenMessaging | Ensure strict ordering of messages,and can scale out gracefully | Supported | Supported, with sync mode to avoid message loss | Supported | Supported, property filter expressions based on SQL92 | Supported | High performance and low latency file storage | Supported timestamp and offset two indicates | Not Supported | Supported, Master-Slave model, without another kit | Supported | Work out of box,user only need to pay attention to a few configurations | Supported, rich web and terminal command to expose core metrics |