Day306.中间件的功能&对比

本文详细介绍了消息中间件的主要功能,如异步处理、削峰填谷、解耦合和性能提升,并对比了Kafka、RabbitMQ和RocketMQ的优缺点。Kafka以其高性能、高可用性但功能单一适用于日志采集;RabbitMQ具备丰富功能但扩展不便,适合中低并发场景;RocketMQ则在性能和功能上兼顾,适合大规模Java系统。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

中间件功能&对比

一、中间件的功能

1、MQ的异步

1)同步的概念

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WF66rmVq-1624333729922)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210622105649502.png)]

同步

用户发起一个请求,系统A收到请求,接着系统A必须立马去调用系统B,直到系统B返回了,系统A
才能返回结果给用户
,不是那种学术型的解释


2)中间件实现异步

用户发起①请求给系统A,系统A收到请求并②发送消息给MQ,系统A发送消息成功,MQ接收到小心后系统A就③返回用户结果,根据MQ和系统B的情况,系统B④拿到获取消息,整个过程异步执行,分工明确

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UM0F7fm8-1624333729924)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210622105836054.png)]


2、MQ的削峰

大量用户发起请求,系统A然后发送过来的每秒1万请求是一个流量洪峰,然后MQ直接给扛下来了,都存储自己本地磁盘,这个过程就是流量削峰的过程,瞬间把一个洪峰给削下来了,让系统B后续慢慢获取消息来处理;

不让数据库直接去承受大量的流量洪峰,而导致数据库宕机, 造成某个功能停止服务或是整个系统瘫痪

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-59Ivm9eU-1624333729927)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210622110448181.png)]


3、MQ的解耦

系统A和系统B通过同步调用的模式耦合在了一起,所以一旦系统B出现故障,很可能会影响系统A也有故障
而且系统A还得去关心系统B的故障,去处理对应的异常

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-X1tO7A3Q-1624333729930)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210622111546157.png)]

假设我们在系统A和系统B之间加入一个消息中间件,在这种情况下,系统A对系统B的调用仅仅是发送一个消息到MQ,然后就直接返回给用户了,系统A对系统B就不管了。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dV0R7AiY-1624333729934)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210622111625181.png)]

此时系统B如果出现了故障,对系统A根本没影响,系统A也感觉不到。

因为通过引入MQ,两个系统实现了异步化调用,也就实现了解耦,系统A并没有跟系统B耦合,所以互相之
间并没有任何影响


4、MQ的异步化性能

假设系统A要调用系统B干一个事儿,然后系统A先执行一些操作,需要耗费20ms,接着系统B执行一些操作要耗费
200ms,总共就要耗费220ms。整体是同步调用,导致出现木桶效应

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-78GHJVMx-1624333729935)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210622111914084.png)]

系统A和系统B直接的业务是同步进行的,所以两个系统的处理能力会影响整个接口的调用性能

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1CWyjdm4-1624333729936)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210622112839612.png)]

通过MQ,系统只需要将消息发送给MQ即可,然后即可返回给用户结果,就完成了操作,用户仅仅等待25ms就收到了结果;

然后系统B从MQ里获取消息,接着花费200ms去执行,但是这个200ms就跟用户没关系了,用户早就收到结果了,他也不关心你花200ms还是2s去干自己的事。

实现了MQ的异步化性能提升


二、常用中间件的落地产品优缺点

发现一般国内常用的MQ技术有四种实现, ActiveMQ、Kafka、RabbitMQ、RocketMQ,但是其中ActiveMQ主要是几年以前较多公司使用,现在几乎国内用的公司都很少了。

下面主要是针对Kafka、RabbitMQ、RocketMQ三种技术做的介绍

1、Kafka

  • 性能强

发送消息给Kafka都是毫秒级的性能

  • 可用性高

Kafka是可以支持集群部署的,其中部分机器宕机是可以继续运行的。

  • 诟病

可能存在丢失数据的可能

因为Kafka收到消息之后会写入一个磁盘缓冲区里,并没有直接落地到物理磁盘上去,所以要是机器本身故障了,可能会导致磁盘缓冲区里的数据丢失。

  • 功能非常的单一

主要是支持发送消息给他,然后从里面消费消息,其他就没有什么额外的高级功能了。所以基于Kafka有限的功能,可能适用的场景并不是很多

  • 使用场景用户行为日志的采集和传输

因为那种日志适当丢失数据是没有关系的,而且一般量特别大,要求吞吐量要高,一般就是收发消息,不需要太多的高级功能,所以Kafka是非常适合这种场景的。


2、RabbitMQ

国内大部分公司都从ActiveMQ切换到RabbitMQ来使用,包括很多一线互联网大厂,而且直到现在都有很多 中小型公司 在使用RabbitMQ。

  • 吞吐量低

每秒几万的级别,所以如果遇到特别特别高并发的情况下,支撑起来是有点困难的。

  • 高可用性

集群部署的时候部分机器宕机可以继续运行,且不丢失数据

  • 功能丰富

支持部分高级功能,比如说死信队列,消息重试之类的

  • 扩展麻烦

进行集群扩展的时候(也就是加机器部署),还比较麻烦。

  • 开发的语言

开发语言是erlang,国内很少有精通erlang语言的工程师,因此也没办法去阅读他的源代码,甚至修改他的源代码。


3、RocketMQ

RocketMQ是阿里开源的消息中间件,久经沙场,非常的靠谱。他几乎同时解决了Kafka和RabbitMQ的缺陷。

RocketMQ是非常适合用在Java业务系统架构中的,因为他很高的性能表现,还有他的高阶功能的支持,可以让我们解决各种业务问题。

  • 吞吐量高

单机可以达到10万QPS以上

  • 高可用性

可以部署大规模的集群

  • 性能高
  • 数据不丢失

支持通过配置保证数据绝对不丢失

  • 功能丰富

比如延迟消息、事务消息、消息回溯、死信队列、消息积压,等等

  • 开发语言

是基于Java开发的,符合国内大多数公司的技术栈,很容易就可以阅读他的源码,甚至是修改他的源码。


4、优劣对比

消息中间件ActiveMq,RabbitMq,RocketMq,Kafka面试时可以从单机吞吐量,时效性,架构可靠性,消息可靠性,支持的功能等方面去讲

ActiveMqRabbitMqRocketMqKafka
单机吞吐量每秒万级每秒万级10万级10万级
时效性毫秒级微秒级毫秒级毫秒级
可用性基于主从架构基于主从架构天然支持分布式天然支持分布式
消息可靠性较低概率丢失经过配置几乎可以0丢失经过配置几乎可以0丢失经过配置几乎可以0丢失
功能及其完备基于erlang语言开发,并发能力强,延时很低基于Java语言开发,接口简单易用,功能完备,扩展性好,比如支持,普通消息(同步发送,异步发送,单向发送),定时延时消息,顺序消息,事物消息功能较为简单,主要支持简单的mq功能,因为功能简单,在大数据以及日志采集方面用处广
数据存储每个节点存储着所有的数据每个节点存储着所有的数据每个节点存储着一部分数据,并且每个节点都有数据备份,防数据丢失每个节点存储着一部分数据,并且每个节点都有数据备份,防数据丢失

以下是针对该项目进度及计划目标的系统性撰写方案,结合功能模块划分与研发管理逻辑,突出可执行性和里程碑控制: 项目进度计划与目标 一、项目总体目标 技术目标 完成企业自研系统的全功能模块开发,实现与钉钉、仁云等第三方平台的深度集成。 确保系统支持高并发(≥500人/秒)与数据硬同步(延迟≤1秒)。 业务目标 覆盖员工信息管理、财务流程、报销管控等8大核心业务场景,提升运营效率30%以上。 实现账单、开票、收入成本等财务流程线上化率100%。 时间目标 总周期:6个月(202X年X月-202X年X月),分3个阶段推进。 二、阶段划分与里程碑 阶段1:需求分析与基础架构搭建(第1-2个月) 需求确认 完成用户角色权限矩阵(OEMD客服、财务BP、外包员工等12类角色)。 输出功能需求文档(FRD),明确各模块输入/输出标准(如账单模板配置规则)。 技术设计 架构设计:微服务架构,拆分员工管理、财务、报销3大服务集群。 数据库设计:主数据表(员工信息、组织架构)与事务表(报销单、账单)分离。 接口规划:钉钉开放平台API对接、仁云数据同步中间件设计。 里程碑 完成系统原型设计评审(第1个月末)。 确定第三方平台对接方案(第2个月末)。 阶段2:核心模块开发与测试(第3-4个月) 模块开发优先级 优先级 模块 关键功能 P0 员工端信息管理 钉钉推送、异常告警、离职储备(需支持10万级员工数据实时同步) P0 账单管理 账单模板配置、客服组反馈闭环(与财务系统对接校验逻辑) P1 外包员工报销提报 报销条件动态配置(如根据项目编码自动匹配审批流) P1 开票管理 开票申请审批链、发票退票状态跟踪 测试计划 单元测试:每个接口覆盖率≥90%,异常场景模拟(如钉钉推送失败重试机制)。 集成测试:员工信息同步→账单生成→开票全流程联动测试。 性能测试:模拟2000人同时提交报销,系统响应时间≤2秒。 里程碑 完成P0模块开发并通过内部验收(第3个月末)。 全系统联调成功(第4个月末)。 阶段3:上线部署与优化(第5-6个月) 部署方案 灰度发布:首批开放OEMD客服、财务BP角色使用,逐步扩大至全用户。 数据迁移:历史员工数据、账单记录从旧系统迁移至新数仓(ETL工具开发)。 培训与推广 编制《系统操作手册》(分角色定制),组织3场线上培训(覆盖200+关键用户)。 运维保障 监控体系:搭建Prometheus+Grafana监控大盘,实时告警接口异常、数据库连接池满等问题。 应急预案:准备降级方案(如钉钉推送失败时切换邮件通知)。 里程碑 系统正式上线(第5个月末)。 完成首月运营数据复盘(第6个月末)。 三、资源投入计划 人力资源 研发部:后端开发4人、前端开发2人、测试1人、架构师1人(全职投入)。 业务部:OEMD客服代表1人、财务BP 1人参与UAT测试(兼职)。 经费预算 类别 金额(万元) 说明 研发人员薪酬 80 6个月工资及奖金 服务器成本 15 云服务器(阿里云ECS)+数据库RDS 第三方服务费 10 钉钉开放平台API调用费用 应急储备 10 应对需求变更或技术攻关超支 总计 115 设备清单 开发测试机:MacBook Pro 16英寸(M3 Max芯片)×3台。 监控服务器:戴尔PowerEdge R740 ×1台(用于部署Prometheus)。 四、风险管理计划 需求变更风险 应对措施:建立变更控制委员会(CCB),超5人天工作量变更需重新评估排期。 第三方对接风险 应对措施:与钉钉、仁云签订SLA协议,明确故障响应时间(如2小时内支持)。 数据安全风险 应对措施:通过ISO 27001认证,员工信息加密存储(AES-256),关键操作日志审计。 五、交付成果清单 技术文档 系统架构设计图、接口文档(Swagger格式)、数据库ER图。 业务文档 用户操作手册、系统运维手册、数据同步规范。 知识产权 申请软著1项(系统名称:XX企业人力资源财务一体化平台)。 关键成功因素(KSF) 跨部门协作:研发部与财务、HR部门建立每日站会机制,快速解决业务逻辑冲突。 数据准确性:在账单管理、报销提报模块设置双重校验(系统规则+人工抽检)。 用户体验:外包员工报销流程从7步压缩至3步(通过预置模板自动填充信息)。 通过此计划,可确保项目在预算内按期交付,同时满足企业复杂业务场景的数字化需求。
最新发布
08-07
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿昌喜欢吃黄桃

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值