环保部网站建设项目验收方案,有用cc域名做网站的,个人网站的搭建,让百度收入 wordpress一、关于RocketMQ
RocketMQ 是一个高性能、高可靠、可扩展的分布式消息中间件#xff0c;它是由阿里巴巴开发并贡献给 Apache 软件基金会的一个开源项目。RocketMQ 主要用于处理大规模、高吞吐量、低延迟的消息传递#xff0c;它是一个轻量级的、功能强大的消息队列系统它是由阿里巴巴开发并贡献给 Apache 软件基金会的一个开源项目。RocketMQ 主要用于处理大规模、高吞吐量、低延迟的消息传递它是一个轻量级的、功能强大的消息队列系统广泛应用于金融、电商、日志系统、数据分析等领域。
RocketMQ作为一款纯java、分布式、队列模型的开源消息中间件支持事务消息、顺序消息、批量消息、定时消息、消息回溯等总之就是葛大爷的一句话。
二、发展 消息队列属于最经典的中间件之一已经有 30 多年的历史其发展历程可以总结为几个阶段 第一阶段2000 年之前。这个阶段的消息队列供应商是几家商业软件巨头比如 IBM、Oracle、Microsoft 都有自己的商业化 MQ其中最具代表性的是 IBM MQ价格昂贵面向高端企业主要是大型金融、电信等企业这类商业 MQ 一般采用高端硬件软硬件一体机交付MQ 本身的软件架构是单机架构。第二阶段2000~2007 年。进入 00 年代后初代开源消息队列崛起诞生了 JMS、AMQP 两大标准与之对应的两个实现分别为 ActiveMQ、RabbitMQ他们引领了初期的开源消息队列技术。开源极大的促进了消息队列的流行、降低了使用门槛技术普惠化逐渐成为了企业级架构的标配。第三阶段2007~2017 年。PC 互联网、移动互联网爆发式发展。由于传统的消息队列无法承受亿级用户的访问流量和海量数据传输诞生了互联网消息中间件核心能力是全面采用分布式架构、具备很强的横向扩展能力开源典型代表有 Kafka、RocketMQ闭源的还有淘宝 Notify。 RocketMQ 发展的主要历程
2007年淘宝实施了“五彩石”项目“五彩石”用于将交易系统从单机变成分布式也是在这个过程中产生了阿里巴巴第一代消息引擎——Notify。
2010年阿里巴巴B2B部门基于ActiveMQ的5.1版本也开发了自己的一款消息引擎称为Napoli这款消息引擎在B2B里面广泛地被使用不仅仅是在交易领域在很多的后台异步解耦等方面也得到了广泛的应用。
2011年业界出现了现在被很多大数据领域所推崇的Kafka消息引擎阿里巴巴在研究了Kafka的整体机制和架构设计之后基于Kafka的设计使用Java进行了完全重写并推出了MetaQ 1.0版本主要是用于解决顺序消息和海量堆积的问题。
2012年阿里巴巴开源其自研的第三代分布式消息中间件——RocketMQ。
经过几年的技术打磨阿里称基于RocketMQ技术目前双十一当天消息容量可达到万亿级。
2016年11月阿里将RocketMQ捐献给Apache软件基金会正式成为孵化项目。
阿里称会将其打造成顶级项目。这是阿里迈出的一大步因为加入到开源软件基金会需要经过评审方的考核与观察。
坦率而言业界还对国人的代码开源参与度仍保持着刻板印象而Apache基金会中的342个项目中暂时还只有Kylin、CarbonData、Eagle 、Dubbo和 RocketMQ 共计五个中国技术人主导的项目。
2017 年RocketMQ 成功通过了 Apache Incubator 的评审正式成为 Apache 顶级项目Top-Level Project, TLP 。这个标志性事件不仅提升了 RocketMQ 在全球开源社区的影响力也使其获得了更多来自外部社区的支持和贡献。
2017年2月20日RocketMQ正式发布4.0版本专家称新版本适用于电商领域金融领域大数据领域兼有物联网领域的编程模型。
2023 年RocketMQ 发布了 5.x 版本继续强化其在云原生、容器化环境中的应用并且在微服务架构中发挥了重要作用。此版本在性能、可扩展性和稳定性方面进行了进一步优化增强了在异构环境下的跨平台兼容性并扩展了更多高级特性如 精准消息投递、更加细粒度的消息过滤 等。
以上就是RocketMQ的整体发展历史其实在阿里巴巴内部围绕着RocketMQ内核打造了三款产品分别是MetaQ、Notify和Aliware MQ。
这三者分别采用了不同的模型MetaQ主要使用了拉模型解决了顺序消息和海量堆积问题Notify主要使用了推模型解决了事务消息而云产品Aliware MQ则是提供了商业化的版本。
三、功能特点 高可靠性 RocketMQ 提供了强大的消息可靠性保证机制。它支持 消息持久化即使在系统崩溃后消息仍然可以恢复。此外RocketMQ 提供了消息重试机制确保消息不会丢失。 高吞吐量 RocketMQ 的设计目标之一就是高吞吐量。它通过高效的网络通信和存储方式能够处理大量的并发请求适用于大规模分布式场景。 分布式架构 RocketMQ 使用 分布式架构其主要组件包括 NameServer负责服务发现Broker消息存储与转发Producer消息生产者Consumer消息消费者。RocketMQ 具有水平扩展性能够支持多台机器集群化部署保证了系统的高可用性和弹性扩展。 顺序消息支持 RocketMQ 提供了强大的 顺序消息支持。对于需要保证消息顺序的应用RocketMQ 可以通过同一队列中存储顺序消息确保消费顺序的一致性。 多种消息模型 RocketMQ 支持多种消息模型如 点对点模式P2P 消费者独占某个队列的消息保证一个消息只被一个消费者消费。发布/订阅模式Pub/Sub 多个消费者可以订阅同一个主题Topic消息广播到所有消费者。 高可扩展性 RocketMQ 通过分区Topic 分区和分布式的消息存储可以横向扩展支持大规模消息的存储和处理。可以灵活地根据业务需求进行扩展。 多语言客户端支持 RocketMQ 提供了多种客户端 SDK支持 Java、C、Python、Go 等多种语言方便开发者进行跨语言集成。 事务消息 RocketMQ 提供了 事务消息功能可以支持分布式事务场景中的消息可靠性保证。通过事务消息开发者可以保证消息与本地事务的一致性。 消息回溯与重试机制 支持消息的 回溯功能允许消费者查看过去的消息还支持消息的 重试机制确保消息处理失败时不会丢失。 灵活的消息过滤 RocketMQ 支持消息的 标签过滤Tag-based filtering允许消费者根据消息的标签过滤需要的消息。
四、对比其它中间件
特性RocketMQKafkaRabbitMQActiveMQNATS开发背景阿里巴巴开发2010 年开源现为 Apache 顶级项目LinkedIn 开发2011 年开源现为 Apache 顶级项目Pivotal现 VMware开发开源项目Apache 软件基金会开发支持多协议的消息队列开源项目初衷为轻量级实时消息传递消息协议自定义协议兼容 MQTT、OpenMessaging 等自定义协议Kafka 协议支持 AMQP、STOMP、MQTT 等多种协议支持 AMQP、OpenWire、MQTT 等多种协议NATS 协议专注于简单的 Pub/Sub 模型性能与吞吐量高吞吐量低延迟适用于高并发场景主要侧重吞吐量适用于大数据流处理吞吐量较低适用于中小型企业吞吐量较低适合中小型企业应用极低的延迟和极高的吞吐量专注于实时性消息模型支持点对点P2P和发布/订阅Pub/Sub模式主要是发布/订阅Pub/Sub模型支持点对点P2P和发布/订阅Pub/Sub模型支持点对点P2P和发布/订阅Pub/Sub模型支持 Pub/Sub 模型消息存储顺序写入支持高效的消息持久化顺序写入按日志存储支持高效的消息持久化使用内存/磁盘存储支持消息持久化使用内存/磁盘存储支持消息持久化存储较为简单不强调持久化扩展性支持分布式部署高可用支持水平扩展高扩展性支持分布式部署和多副本机制集群模式但扩展性不如 RocketMQ 和 Kafka支持集群模式扩展性相对较差高扩展性适用于大规模水平扩展高可用性支持主从复制集群模式容错性高多副本机制较强的容错性支持镜像队列和集群模式容错性较好支持主从复制和集群模式容错性一般支持集群模式和多节点部署容错性较好事务消息原生支持事务消息和分布式事务不支持原生事务消息需自行实现支持事务消息但性能不如 RocketMQ支持事务消息但一致性和性能较差不支持事务消息顺序消息支持严格顺序消费适合高并发场景支持分区内的顺序消费但需要手动控制分区的数量和分布支持顺序消费但通常不如 RocketMQ 强大支持顺序消费但不如 RocketMQ 强大不强调顺序消息处理延迟在高并发场景下延迟较低适用于实时消息传递吞吐量优先延迟相对较高在高负载时延迟较高延迟较高尤其在负载较重时延迟极低适用于实时性要求较高的场景适用场景高吞吐量、大规模分布式系统、事务消息、顺序消息等场景日志聚合、流数据处理、大数据平台企业消息传递、支持 AMQP 协议的系统中小规模企业消息传递、企业级应用实时数据流、IoT、微服务架构等高性能、低延迟场景社区与生态Apache 社区支持活跃且发展迅速Apache 社区支持社区活跃社区活跃广泛应用于企业级应用Apache 社区支持但活跃度和扩展性相对较弱开源社区活跃适用于微服务和高并发场景
总结
RocketMQ 在高吞吐量、低延迟和事务消息支持方面表现出色适用于金融、电商等高并发、高可靠的场景。Kafka 强调吞吐量适用于大数据流处理、日志聚合等大规模数据平台且具有较好的扩展性。RabbitMQ 适用于中小规模企业特别是需要支持多协议如 AMQP的消息传递应用。ActiveMQ 相对较为传统适合于小到中规模的企业应用支持多协议但性能和扩展性较差。NATS 轻量级、高性能适用于实时性要求较高的场景如物联网、微服务架构等。
五、应用场景
以下是一些典型的 RocketMQ 应用场景
金融行业
交易消息系统金融交易系统对消息的可靠性、事务性和高吞吐量有严格要求。RocketMQ 支持事务消息Transaction Message能够确保分布式事务的准确性适合在银行、电商金融、支付系统中进行实时交易消息处理。风控系统在金融风控系统中常常需要高并发、高吞吐量的消息系统来处理海量数据。RocketMQ 的高吞吐量和低延迟特性使其适用于此类实时风控决策系统。资金调度资金调度的核心需求是可靠性与高吞吐量RocketMQ 能够在大规模并发请求下保证数据一致性适合资金结算、账户调度等高并发场景。
电商平台
订单处理系统电商平台中的订单生成、支付、库存管理、物流等环节常常需要保证高并发、高吞吐量的消息传递。RocketMQ 能够保证系统的高效性特别是在“双十一”等促销活动期间能够平稳处理海量订单消息。异步消息处理电商系统中很多操作是异步的例如支付回调、库存扣减、物流派送等。使用 RocketMQ 可以通过消息队列解耦这些操作提高系统响应速度。促销活动推送对于电商平台的秒杀、优惠券发放等高频业务RocketMQ 能够提供高并发支持保证消息的顺序和稳定性。
大数据与流处理
日志收集与分析RocketMQ 可以高效地处理海量的日志数据支持从各类应用程序、服务器、设备等收集日志并进行实时处理。与 Flume、Logstash 等流式处理框架配合使用能够快速地收集、传输和分析日志数据。数据流处理在实时数据流的场景中如实时大数据处理、数据分析、机器学习等RocketMQ 能够以极低的延迟和高吞吐量确保数据的稳定传输适用于大数据平台和流计算架构。
微服务架构
微服务通信在微服务架构中服务之间通常通过异步消息传递进行解耦。RocketMQ 提供可靠的消息投递机制可以保证服务间的数据一致性避免系统耦合过紧。通过 RocketMQ服务间的通信能够更加灵活、可靠。异步处理与事件驱动RocketMQ 作为事件驱动架构EDA中的核心组件能够很好地支持微服务中的异步处理和事件发布与订阅模式。事件驱动模型适用于需要处理高并发、低延迟业务的微服务系统。
物联网IoT
设备数据收集与处理在物联网应用中设备的数量庞大产生的数据量巨大且对实时性要求较高。RocketMQ 的高吞吐量、低延迟和高可靠性非常适合用于 IoT 系统中能够实时收集来自各类设备的数据并进行分发处理。状态监控和告警系统RocketMQ 能够支持设备的状态数据流转以及实时告警通知。通过将设备数据发送到消息队列中再进行实时分析和处理能够在出现异常时及时触发告警。
实时消息推送
社交平台消息推送在社交平台中实时消息推送是一项核心功能如聊天消息、通知、点赞、评论等RocketMQ 具备高吞吐量和低延迟的特点能够保证大规模用户的实时消息推送。内容分发网络CDN RocketMQ 可以帮助构建高效的内容分发和通知系统推送实时更新、推荐内容等确保数据在多个节点之间快速传递特别适用于需要快速内容更新的场景。
日志与事件追踪
异步日志记录许多应用系统会在后台记录用户操作、系统运行状态等信息。RocketMQ 可以异步记录日志避免同步阻塞同时保证高效的日志传输和存储尤其适合大规模分布式系统的日志收集。事件追踪与分析在微服务架构中事件追踪如调用链追踪对于监控和故障排查至关重要。RocketMQ 可以确保事件流的高效传递和顺序处理帮助构建全面的事件追踪系统。
消息驱动的异步任务
后台任务处理很多系统的任务是异步的如生成报表、邮件发送、数据处理等。使用 RocketMQ 进行任务调度和消息驱动处理可以有效解耦主业务流程和耗时的任务处理提高系统的响应能力。定时任务与延时消息RocketMQ 支持延时消息功能可以用来处理定时任务、超时重试等操作。比如在电商场景中发货时间的计算、延时支付的重试等都可以通过 RocketMQ 延时消息机制来实现。
日志与审计系统
审计日志收集在许多业务中审计日志的收集与处理具有重要意义特别是在合规性要求较高的行业如金融、医疗等。RocketMQ 可以作为日志收集的中间件确保日志的可靠传输与持久化。
分布式系统与高可用架构
系统解耦与弹性扩展在复杂的分布式系统中RocketMQ 可以通过消息队列解耦各个服务模块保证系统的可靠性和高可用性。尤其是在微服务架构中消息中间件可以减少服务间的直接依赖提高系统的扩展性和容错能力。
场景示例1—异步解耦
随着微服务架构的流行服务之间的关系梳理非常重要。异步解耦可以降低服务之间的耦合程度同时也能提高服务的吞吐量。
使用异步解耦的业务场景非常多因为每个行业的业务都会不太一样以一些比较通用的业务来说明相信大家都能理解。
比如电商行业的下单业务场景以最简单的下单流程来说下单流程如下
锁库存创建订单用户支付扣减库存给用户发送购买短信通知给用户增加积分通知商家发货
我们以下单成功后用户进行支付支付完成会有个逻辑叫支付回调在回调里面需要去做一些业务逻辑。首先来看下同步处理需要花费的时间如下图
同步流程
上面的下单流程从 3 到 5 都是可以采用异步流程进行处理对于用户来说支付完成后他就不需要关注后面的流程了。后台慢慢处理就行了这样就能简化三个步骤提高回调的处理时间。
异步流程
场景示例2—削峰填谷
削峰填谷指的是在大流量的冲击下利用 RocketMQ 可以抗住瞬时的大流量保护系统的稳定性提升用户体验。
在电商行业最常见的流量冲击就是秒杀活动了利用 RocketMQ 来实现一个完整的秒杀业务还是与很多需要做的工作不在本文的范围内后面有机会可以单独跟大家聊聊。想告诉大家的是像诸如此类的场景可以利用 RocketMQ 来扛住高并发前提是业务场景支持异步处理。
削峰填谷
场景示例3—分布式事务最终一致性
众所周知分布式事务有 2PCTCC最终一致性等方案。其中使用消息队列来做最终一致性方案是比较常用的。
在电商的业务场景中交易相关的核心业务一定要确保数据的一致性。通过引入消息队列 RocketMQ 版的分布式事务既可以实现系统之间的解耦又可以保证最终的数据一致性。
场景示例4—数据分发
数据分发指的是可以将原始数据分发到多个需要使用这份数据的系统中实现数据异构的需求。最常见的有将数据分发到 ES, Redis 中为业务提供搜索缓存等服务。
除了手动通过消息机制进行数据分发还可以订阅 Mysql 的 binlog 来分发在分发这个场景需要使用 RocketMQ 的顺序消息来保证数据的一致性。
数据分发
六、RocketMQ 组件
RocketMQ 的架构主要包括以下几个核心组件
NameServer NameServer 是一个轻量级的服务发现模块负责管理 Broker 节点的元数据帮助 Producer 和 Consumer 查找 Broker类似于一个服务注册与发现中心。Broker Broker 是消息的存储和转发节点消息生产者将消息发送到 Broker消费者从 Broker 中拉取消息。Broker 负责消息的持久化存储、顺序消费和消息的投递。Producer Producer 是消息生产者负责将消息发送到指定的 Topic。每个 Producer 可以连接多个 Broker发送消息到不同的队列。Consumer Consumer 是消息消费者负责从 Broker 拉取消息进行消费。Consumer 可以是 推模式Push或 拉模式Pull支持异步或同步消费。Admin Console RocketMQ 提供了管理控制台用于监控和管理集群的状态、Topic、Consumer 以及消息的流量等信息。
七、消息传递流程
Producer 发送消息 Producer 将消息发送到 RocketMQ 的 Broker并通过 NameServer 找到目标 Broker。消息被分配到一个队列Queue可以是顺序队列或并发队列。消息存储 Broker 接收到消息后会将其持久化到磁盘中并且根据需要将消息复制到其他副本节点保证高可用性。Consumer 拉取消息 消费者Consumer从 Broker 拉取消息进行消费。RocketMQ 支持按 消息队列Queue 或 消息主题Topic 进行消费可以配置多种消费策略和消费并发度。消息确认和重试 消费者确认消息消费成功后RocketMQ 会将消息从队列中删除如果消费失败消息会进入重试队列按配置重试消费。
通过本文的介绍我们可以看到 RocketMQ 作为一款高效的分布式消息中间件无论你是正在考虑在项目中引入 RocketMQ还是已经在使用它的开发者掌握 RocketMQ 的核心特性和最佳实践对于提升系统的可靠性和性能至关重要。后续将分享RocketMQ的部署及开发使用流程。