🍅 Java学习路线:搬砖工逆袭Java架构师
🍅 简介:Java领域优质创作者🏆、CSDN哪吒公众号作者✌ 、Java架构师奋斗者
🍅 扫描主页左侧二维码,一起学习、一起进步
🍅 欢迎点赞 👍 收藏 ⭐留言 📝
一、学习中间件的方式和技巧
- 理解中间件在项目架构中的作用,以及各中间件的底层实现
- 可以使用一些类比的生活概念去理解中间件
- 使用一些主流图或者脑图的方式去梳理各个中间件在架构中的作用
- 尝试使用Java技术去实现中间件
- 静下来去思考中间件在项目中设计和使用的原因
- 如何找到对应的替代方案
- 尝试编写博客总结类同中间件技术的对比和使用场景
- 学会查看中间件的源码以及开源项目和博客
二、消息中间件的应用场景
- 跨系统数据传递
- 高并发的流量削峰
- 数据的分发和异步处理
- 大数据分析与传递
- 分布式事务
比如你有一个数据需要进行迁移或者请求并发过多的时候,比如你有10W的并发请求订单,我们可以在这些订单入库之前,把订单请求堆积到消息队列中,让它稳健可靠的入库和执行。
消息中间件负责数据的传递、存储和分发,所以性能上要高于普通服务和技术。
三、消息中间件的核心组成部分
- 消息的协议
- 消息的持久化机制
- 消息的分发策略
- 消息的高可用,高可靠
- 消息的容错机制
四、网络协议的三要素
- 语法。语法是用户数据与控制信息的结构与格式以及数据出现的顺序。
- 语义。语义是解释控制信息每个部分的意义。它规定了需要发出何种控制信息以及完成的动作与做出什么样的响应。
- 时序。时序是对时间发生顺序的详细说明。
五、为什么消息中间件不直接使用http协议呢?
- 因为http请求报文头和响应报文头是比较复杂的,包含了cookie,数据的加密解密,状态码,响应码等附加的功能,但是对于一个消息而言,我们并不需要这么复杂,也没有这个必要性,它其实就是负责数据传递,存储,分发就行,一定要追求高性能,尽量简洁,快速。
- 大部分情况下http都是短连接,在实际的交互过程中,一个请求到响应很有可能会中断,中断以后就不会进行持久化,就会造成请求的丢失。这样就不利于消息中间件的业务场景,因为消息中间件可能是一个长期的获取消息的过程,出现问题和故障要对数据或消息进行持久化,目的是为了保证消息和数据的高可靠性和稳健的运行。
六、AMQP协议
AMQP:全称Advanced Message Queuing Protocol,是高级消息队列协议。由摩根大通集团联合其他公司设计,是一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的一个开放标准,为面向消息中间件设计,基于此协议的客户端和消息中间件可传递消息,并不受客户端或中间件或不同的开发条件的限制。
特性:
- 分布式事务支持
- 消息的持久化支持
- 高性能和高可靠的消息处理优势
七、消息的分发策略
1、MQ消息队列有如下几个角色
- 生产者
- 存储消息
- 消费者
在发送消息的过程中可能出现异常,或者网络抖动,故障等等原因,从而造成消息无法消费,比如用户下订单,消费MQ接受,订单系统出现故障,导致用户支付失败,那么这个时候就需要消息中间件支持消息重试机制策略。也就是支持:出现问题和故障的情况下,消息不丢失还可以进行重发。
2、消息分发策略的机制和对比
ActiveMQ | RabbitMQ | Kafka | RocketMQ | |
发布订阅 | 支持 | 支持 | 支持 | 支持 |
轮询分发 | 支持 | 支持 | 支持 | / |
公平分发 | / | 支持 | 支持 | / |
重发 | 支持 | 支持 | / | 支持 |
消息拉取 | / | 支持 | 支持 | 支持 |
八、消息队列高可用和高可靠
1、什么是高可用机制
高可用是指产品在规定的条件和规定的时刻或时间内处于可执行规定功能的能力。
当业务量增加时,请求也过大,一台消息中间件服务器会触及硬件(CPU、内存、磁盘)的极限,一台消息服务器已经无法满足业务的需求,所以消息中间件必须支持集群部署,来达到高可用的目的。
2、集群模式
(1)Master-slave主从共享数据的部署模式
生产者消费发送到Master节点,所有的都连接这个消息队列共享这块数据区域,Master节点负责写入,一旦Master挂掉,slave节点继续服务,从而形成高可用。
(2)Master-slave主从同步部署方式
这种模式写入消息同样在Master主节点上,但是主节点同步数据到slave节点形成副本,和zookeeper或者redis主从机制很类似。这样可以达到负载均衡的效果,如果消费者有多个这样就可以取不同的节点进行消费,消息的拷贝和同步会占用很大的宽带和网络资源,在后续的rabbitmq中也会使用。
(3)多主集群同步部署模式
(4)多主集群转发部署模式
如果插入的数据在broker1中,元数据信息会存储数据的相关描述和记录存放的位置。
它会对元数据信息进行同步,如果消费者在broker2中进行消费,但没有找到对应的信息,可以从对应的元数据信息中去匹配,如果得到了,可以直接返回,如果匹配不到,则转发这个请求到别的服务器询问,直到寻找到为止。
好处是减少数据资源的存储,不造成空间的浪费。
(5)Master-slave与Broker-cluster组合方案
总结:
- 要么消息共享
- 要么消息同步
- 要么元数据共享
九、什么是高可靠机制
1、通过协议来保证系统间数据解析的正确性。
2、通过持久化保证消息的可靠性。
🔥联系作者,或者扫作者主页二维码加群,加入我们吧🔥
往期精彩内容
Java学习路线总结❤️搬砖工逆袭Java架构师❤️(全网最强,建议收藏)
❤️连续面试失败后,我总结了57道面试真题❤️,如果时光可以倒流...(附答案,建议收藏)
10万字208道Java经典面试题总结(附答案,建议收藏)
MySql基础知识总结(2021版)
MySql基础知识总结(SQL优化篇)
【Vue基础知识总结 1】Vue入门
【100天算法入门 - 每日三题 - Day1】二叉树的中序遍历、两数之和、整数反转