热门课程

免费试听

上课方式

开班时间

当前位置: 首页 -   文章 -   新闻动态 -   正文

中间件技术之消息队列

知了堂姐
2024-07-09 11:12:24
0

01、学习中间件的方式和技巧

1:理解中间件在项目架构中的作用,以及各中间件的底层实现。 2:可以使用一些类比的生活概念去理解中间件, 3:使用一些流程图或者脑图的方式去梳理各个中间件在架构中的作用 4:尝试用java技术去实现中间件的远离 5:静下来去思考中间件在项目中设计的和使用的原因 6:如果找到对应的替代总结方案 7:尝试编写博文总结类同中间件技术的对比和使用场景。 8:学会查看中间件的源码以及开开源项目和博文。

02、学习目标

  • 什么是消息中间件
  • 什么是协议
  • 什么是持久化
  • 消息分发
  • 消息的高可用
  • 消息的集群
  • 消息的容错
  • 消息的冗余

03、什么是消息中间件

在实际的项目中,大部分的企业项目开发中,在早期都采用的是单体的架构模式,如下图:

 

04、单体架构

在企业开发的中,大部分的初期架构都采用的是单体架构的模式进行架构,而这种架构的典型的特点:就是把所有的业务和模块,源代码,静态资源文件等都放在一个一工程中,如果其中的一个模块升级或者迭代发生一个很小变动都会重新编译和重新部署项目。 这种的架构存在的问题就是: 1:耦合度太高 2:运维的成本过高 3:不易维护 4:服务器的成本高 5:以及升级架构的复杂度也会增大 这样就有后续的分布式架构系统。如下
 

05、分布式架构

 

何谓分布式系统呢:

通俗一点:就是一个请求由服务器端的多个服务(服务或者系统)协同处理完成

和单体架构不同的是,单体架构是一个请求发起jvm调度线程(确切的是tomcat线程池)分配线程Thread来处理请求直到释放,而分布式是系统是:一个请求是由多个系统共同来协同完成,jvm和环境都可能是独立。如果生活中的比喻的话,单体架构就想建设一个小房子很快就能够搞定,如果你要建设一个鸟巢或者大型的建筑,你就必须是各个环节的协同和分布,这样目的也是项目发展都后期的时候要去部署和思考的问题。我们也不能看出来:分布式架构系统存在的特点和问题如下:

存在问题 1:学习成本高,技术栈过多 2:运维成本和服务器成本增高 3:人员的成本也会增高 4:项目的负载度也会上升 5:面临的错误和容错性也会成倍增加 6:占用的服务器端口和通讯的选择的成本高 7:安全性的考虑和因素逼迫可能选择RMI/MQ相关的服务器端通讯。

好处 1:服务系统的独立,占用的服务器资源减少和占用的硬件成本减少, 确切的说是:可以合理的分配服务资源,不造成服务器资源的浪费 2:系统的独立维护和部署,耦合度降低,可插拔性。 3:系统的架构和技术栈的选择可以变的灵活(而不是单纯的选择java) 4:弹性的部署,不会造成平台因部署造成的瘫痪和停服的状态。

06、基于消息中间件的分布式系统的架构

 

从上图中可以看出来,消息中间件的是 1:利用可靠的消息传递机制进行系统和系统直接的通讯 2:通过提供消息传递和消息的排队机制,它可以在分布式系统环境下扩展进程间的通讯。

07、消息中间件应用的场景

1:跨系统数据传递 2:高并发的流量削峰 3:数据的分发和异步处理 4:大数据分析与传递 5:分布式事务 比如你有一个数据要进行迁移或者请求并发过多的时候,比如你有10W的并发请求下订单,我们可以在这些订单入库之前,我们可以把订单请求堆积到消息队列中,让它稳健可靠的入库和执行。

08、常见的消息中间件

ActiveMQ、RabbitMQ、Kafka、RocketMQ等。

09、如何认识消息中间件的本质及设计

它是一种接受数据,接受请求、存储数据、发送数据等功能的技术服务。

MQ消息队列:负责数据的传接受,存储和传递,所以性能要过于普通服务和技术。

 

谁来生产消息,存储消息和消费消息呢?

 

MQ设计你理念和本质都不难,就一个生产着生产消息,找个地方存消息,然后消费者消费消息,但是设计过程中如何消息 1:生产如何把数据传递给MQ 2:MQ中间件如何把数据存储得 3:又是如何把消息分发给消费者端 4:生产过程中出现异常怎么处理。 5:如何保证消费者可靠消费 6:如果保证消息不丢失,也就是进行持久化处理。等等 总结上述总共分为5个部分: 1:消息协议 2:消息的持久化机制 3:消息的分发机制 4:消息高可用设计 5:消息高可靠设计
 

10、什么是消息协议

协议:是计算机与计算机之间共同遵从的以组约定。只有遵守相同的约定,计算机才能正常有效的相互交流。 协议的三个特点: 1:语法:数据的结构要一致 2:语义:发送的信息,完成什么样子的动作,以及这个动作作何相应。 3:顺序(同步):事件的如何保证有效顺序的说明。 比如常见协议:HTTP协议或TCP协议,以HTTP协议为例:

http协议三要素: 1:语法:http定义了请求报文和相应报文的具体格式。 2:语义:客户端主动发起的操作称为请求(比如Get/Post) 3:时序:一个请求对应一个相应。

不论是Http协议还是TCP协议,都不适合做消息队列的协议,原因又如下: 1:请求的报文头和响应头是非常复杂的不利于高性能的传输,影响传输的速度 2:还有各种状态码信息,影响接受的速度。 3:主要原因Http都是一个短链接,每次交互和请求之后,响应就会中断。不利于中间件的数据稳定接受。 因为消息中间件会长期的有效的不停的去获取消息的内容。

常见的MQ消息队列协议更多使用:OpenWire、AMQP、MQTT、Kafka、OpenMessage。

11、小结

其实不论选择单体架构还是分布式架构都是项目开发的一个阶段,在什么阶段选择适合的架构方式,而不能盲目追求,最后造成的后果和问题都需要自己买单。但是作为一个开发人员学习和探讨新的技术是我们每个程序开发者都应该去保持和思考的问题。当我们没办法去改变社会和世界的时候,我们为了生活和生存那就必须要迎合企业和市场的需求,发挥你的价值和所学的才能,创造价值和实现自我。

大家都在看

Java/前端/信安齐开班:知了堂,梦开始的地方

2024-07-09 浏览次数:0

程序员,苦外包公司久矣?

2024-07-09 浏览次数:0

学java培训去哪里好?专业java培训班推荐

2024-07-09 浏览次数:0

Java程序员就业饱和了吗?Java市场环境了解...

2024-07-09 浏览次数:0

1024程序员节,给大家送份福利

2024-07-09 浏览次数:0

HW行动高薪等你拿,汇智知了堂内推助你一臂之力!

2024-07-09 浏览次数:0
最新资讯
Java干货来袭,新手必看!j...   提取子串  用String类的substring方法可以提取字符串中的子串,该方法有两种常用参数...
Java干货小知识,InnoD... 随着互联网行业的兴起,it人才需求量也越来越大,越来越多的人选择了从事it行业,在大家进行了Java...
ElasticSearch介绍... ElasticSearch是一个实时分布式搜索和分析引擎,它让你以前所未有的速度处理大数据的可能 它...
mysql数据库开发入门 数据库管理软件,数据库相当于是一个文件系统,只不过我们要通过命令(SQL语言)来操作这个文件系统
中间件技术之消息队列 01、学习中间件的方式和技巧 1:理解中间件在项目架构中的作用,以及各中间件的底层实现。 2:可以使...
Java代码如何对架构改进? Java代码如何对架构改进 1.缓存: 现在内存的价格很低,而且越来越低,从磁盘或通过网络来检索数据...
Java干货分享:直接插入排序 直接插入排序和它的字面意思一样,将数字插入到有序序列中排序。
【java干货】git安装及初... 从2月2日-2月29日,注册知了堂在线学习平台,还可以免费领取价值上千元的就业付费课程,限时扫码领取...