中间件
(这篇文章是从一个疯人的笔记编写的。
1. 什么是中间件
中间部分是什么
中国企业自1980年代开始逐步开展信息建设.由于 方法 和 制度 不足,以及企业不断变化的商业和市场需求,企业可以同时运行多个不同业务系统,这些系统可能基于不同的操作系统、不同的数据库和异构网络环境。现在的问题是,如何将这些信息系统结合成一个有机的协作整体,真正实现企业跨平台和分布式应用。中间部分是解决方案,它利用自己的复杂性来取代企业应用的简单性.
中间件(Middleware)是处于操作系统和应用程序之间的软件,另一些人认为它应该成为操作系统的一部分。当人们使用中间件时,通常是一群相互整合的中介人,构成平台(包括开发平台和运行平台),但在这个中间人群体中必须有一个沟通中间人,即中间件=平台+通讯,这个定义也限制了用在分布式系统中使用的中间词。它也可以与支持软件和实用软件分开。
举例:
- RMI(Remote Method Invocations, 远程调用)
- Load Balancing(负载均衡,将访问负荷分散到各个服务器中)
- Transparent Fail-over(透明的故障切换)
- 集群(由多个小服务器组成的组,以取代大型机器)
- Back-end-Integration(后端集成,用现有的、新开发的系统如何去集成遗留的系统)
- Transaction事务(全局/局部)全局事务(分布式事务)局部事务(在同一数据库联接内的事务)
- Dynamic Redeployment(动态重新部署,在不停止原系统的情况下,部署新的系统)
- System Management(系统管理)
- Threading
- Message-oriented Middleware面向消息的中间件(异步的调用编程)
- Component Life Cycle(组件的生命周期管理)
- Resource pooling(资源池)
- Security(安全)
- 缓存
为什么你需要使用中间人
具体地说,中间部分屏蔽了基础操作系统的复杂性,使程序开发者面对一个简单的统一的开发环境,减少程序设计的复杂性,集中精力做生意,不需要在不同的系统软件上重复过程。这大大降低了技术负担。中间部分是应用系统,它不仅仅是简单的发展,缩短了发展周期,它还减少了系统维护、操作和管理的工作量,计算机 的 总成本 也 减少 了 。
1.3 中间件特点
- 为了解决分配异质性的问题,人们提出了中间件(middleware)的概念。中间体是平台(硬件和操作系统)与应用程序之间的通用服务,如下图所示,这些服务具有标准的程序接口和协议。适用于不同操作系统和硬件平台,它们可以根据接口和协议规范实现。
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-o3aR9WkR-1658986933840)(C:Users10642AppDataRoamingTyporatypora-user-imagesimage-20220717150225395.png)]](http://static.wangsu123.cn/article/image/20220729/f6c8cc85122f9b2d2a0bbce8791f9386.png)
对中间体的严格定义可能很困难,但中间体应具备下列特点:
- 满足大量应用的需要
- 在多个硬件和OS平台运行
- 支持分布式计算,以提供跨网络、硬件和OS平台的应用程序或服务的透明度
- 支持标准的协议
- 支持标准的接口
由于标准接口对于可移植性和标准协议对于互操作性的重要性,中间件已成为许多标准化工作的一大部分。对于应用软件开发,中间件比操作系统和网络服务更重要,中间人提供的程序接口定义了相对稳定的高层次应用程序环境,不论计算机硬件和系统软件如何更新和更换,只要升级和更新中间件,并保持中间件以外的接口定义不变,应用程序软件几乎不需要修改,因此,它保护了企业在开发和维护应用软件方面的重大投资。
简言之,中间部分具有很强的特征,与具体的设计目标分开,具有普遍独立的功能要求的模块。这意味着中间体必须可以替换。如果一个系统是设计的,中间部分是不可替代的,无论是建筑还是框架设计都有问题,要么是中间部分,也许还有别的中间人,这个系统里有一个引擎。
1.在项目中使用中间件技术时
- 在项目架构和重组方面,使用任何技术和架构的变化,我们需要小心,仔细思考,因为任何技术都可以由人们整合和改变,技术,和成本的增加,中间件技术目前在一些互联网公司或项目中普遍使用,如果你只是一个创业公司,推荐或使用一个单一的架构,最多可添加一个缓存中间体,不要盲目追求新的或所谓的高性能,追求的背后必须有商业驱动和项目驱动,因为一旦你追求它,就意味着你的学习成本,公司的人事结构和服务器成本,维修和操作费用将增加,因此需要仔细的选择和考虑。
- 但作为一个开放的人,你必须有能力学习中间件技术并思考,否则,当一个项目发展到一个阶段时,很容易在面试中得到估算或参考,这会给你带来一点麻烦,如今,这些技术也不是什么新事物。如果掌握和挖掘是最重要的,则要花时间和精力去探索和研究。
2.中级技术及建筑概览
知识图谱

2.1学习中间件的方法和技术
- 了解中间件在项目架构中的作用和中间件的根本实现。
- 你可以用一些生命概念来理解中间件,
- 使用一些流程图或脑图来分列建筑中的中间人的角色
- 利用Java技术实现中间件的远程性
- 坐下来,思考一下中间件在项目中设计和使用的原因
- 如果找到相应的总结方案
- 尝试编译类和中间件技术之间的对比和使用场景的布尔汇总。
- 学习查看中间件的源代码以及开放源代码项目和 bovins。
2.2 单体架构
在实际的项目中,大部分的企业项目开发中,在早期都采用的是单体的架构模式,如下图:

在企业开发的中,大多数最初的建筑使用单体建筑模型。这种建筑的典型特征是把所有业务和模块放在一起,源代码,在项目中放置静态资源文件等,如果一个模块被升级或重复,就会发生一个非常小的变化,重新编译和重新配置项目。这个架构的问题是:
- 耦合度太高
- 运维的成本过高
- 不易维护
- 服务器的成本高
- 提高建筑的复杂性将增加
2.3 分布式架构
- 分布式系统:通常指由服务器端同时处理多个服务(服务或系统)的请求

- 与单立体建筑不同,单体架构是一个请求,启动jvm调度线程(当然是Tomcat线程库),分配线程线程来处理请求直到发布,分布式系统是:请求由多个系统共同完成,jvm和环境都可以独立。如果生活里有一个隐喻,单立体建筑想要快速建造一个小房子,可以做到,如果你想建造一个鸟巢或一座大建筑,你必须是每个环节的协调和分配者,这也是在项目开发后期部署和思考的一个问题。我们不能看到:分布式建筑系统的特点和问题如下:
- 特点:
- 服务系统的独立性减少了服务器资源的占用和硬件成本的占用。确切地说,可以合理地分配服务资源而不造成服务器资源的浪费
- 独立的维护和部署系统, 减少耦合, 互连性.
- 系统架构和技术堆栈的灵活选择(不仅仅是 choicejava)
- 灵活部署不会使平台瘫痪,而部署会使平台瘫痪。
- 问题:
- 高学习成本,太多的技术堆积
- 运营和服务器成本上升
- 人员的成本也会增高
- 工程的负荷也会增加
- 遇到的错误和容许也会翻倍
- 占用服务器端口和通信选项的高成本
- 安全考虑和限制可能迫使选择与RMI/MQ有关的服务器端通信。
3.基于消息中间体的分布式系统架构
3.1基于消息中间体的分布式系统架构

- 如上图所示,中间消息是:
- 使用可靠消息传输机制的系统和系统直接通信
- 通过提供消息传输和消息队列机制,可以扩展分布式系统环境中进程之间的通信。
3.2消息中间件的应用场景
- 跨系统数据传递
- 高并发的流量削峰
- 数据分配和逆转处理
- 大数据分析与传递
- 分布式事务
- 比如你有一个数据要进行迁移或者请求并发过多的时候,比如你有10W的并发请求下订单,我们可以在这些订单入库之前,我们可以把订单请求堆积到消息队列中,让它稳健可靠的入库和执行。
3.3共同消息中介人
- ActiveMQ
- RabbitMQ
- Kafka
- RocketMQ
3.4消息中间体的性质和设计
4.消息中介人的核心组成部分
4.1消息队列协议
协议是什么

- 我们知道消息中介人负责数据传输,存储,把消费分成三个部分,在存储和分发数据的过程中, 一定遵循一些传统规范.你正在使用底层的TCP/IP,UDP协议或其他自建协议等。这些公约通常被称为议定书。
- 所谓协议是指:
- 计算机的基本操作系统和应用程序之间的通信协议,只有共同协议和标准才能在系统和基本操作系统之间进行通信。
- 与一般的网络应用不同,它主要负责接收和传递数据,因此性能相对较高。
- 协议对数据格式和计算机之间交换数据都必须严格遵守规范。
4.1.2网络协议的三个要素
- 语法是用户数据和控制信息的结构和格式,以及数据发生顺序。
- 语义:语义是控制信息的每个部分的含义,它指定了需要的控制信息是什么类型,哪些行动完成,哪些反应是作出的。
- 时间序列是事件序列的详细描述。
面试问题: 为什么消息中间人不直接使用 http 协议?
- 因为 http 请求项和响应项更复杂,包括饼干,数据的加密解密,状态码,其他功能如响应代码,但有一个信息,我们不需要那么复杂,也没有这个必要性,它实际上负责传输数据,存储,分发就行,必须追求高性能。尽量简洁,快速。
- 在大多数情况下,http大多是短的链接,在实际的相互作用过程中,请求答复可能会被中断,停顿后不会持续,这将导致请求丢失。这不利于消息中介商的业务模式,因为信息中介可能是获取信息的长期过程,当数据或消息持续存在时会出现问题和故障等。目的是确保消息和数据的高可靠性和鲁棒操作。
4.1.3共同消息中间协议
AMQP协议
AMQP(Advanced Message Queuing Protocol)是一个先进的消息队列协议。由摩根集团和其他公司共同设计。这是一个标准的高级消息队列协议,提供统一消息服务。是一个开放的应用程序层协议标准,为面向消息的中间件设计。基于此协议的客户端和消息中介人可以发送消息,不接受客户/中间不同产品,例如不同的开发语言的限制。在Erlang的实现包括RabbitMQ等。
特性:
- 分布式事务支持。
- 消息的持久化支持。
- 高性能和高可靠性的信息处理优势.
支持者:

MQTT协议
OpenMessage协议
4.1.3.4 Kafka协议
- Kafka协议是一个基于TCP/IP的二进制协议,内部消息由长度分开,由一些基本数据类型组成。
- 特点是:
1:结构简单
2:快速分析(最高性能)
3:无事务支持
4:有持久化设计

4.2消息队列持久性
4.2.1 持久化
- 简单地将数据放在磁盘上,而不是在服务器重新启动时消失在内存中,从而使数据永久存储。

4.2.2持久性的一般方法
[外部链接图像传输失败,源站可能有防盗链接机制,建议将图像保存下来并直接上传(img-yEzUuqo1-1658986933846)(C:Users10642AppDataRoamingTyporatypora-user-imagesimage-20220717154409122)。(png)]
4.3消息分配策略
4.3.1消息分配策略
MQ消息队列由下列字符组成:
- 生产者
- 存储消息
- 消费者
因此,制造商生成消息后,MQ进行存储,消费者如何获得信息?一般获取数据的方式无外乎推(push)或者拉(pull)两种方式,典型的Git有一个拉动机制,我们发送的http请求是检索数据库数据返回的典型过程。消息队列MQ是一个传送的过程,这些推力机制可以应用于许多商业场景,并有许多相应的推力机制策略。
4.3.场景分析1
- 比如我在APP上下了一个订单,我们的系统和服务很多,我们如何得知这个消息被那个系统或者那些服务或者系统进行消费,那这个时候就需要一个分发的策略。这就需要消费策略。或者称之为消费的方法论。
[外部链接图像传输失败,源站点可能有防盗链接机制,建议将图像保存下来并直接上传(img-OyrOrVYj-1658986933846)(C:Users10642AppDataRoamingTyporatypora-user-imagesimage-20220717154917786)。(png)]
4.3.场景分析2
发送消息过程中可能出现异常,或者网络的抖动,由于无法接受信息,失败等等,比如用户在下订单,消费MQ接受,订单系统出现故障,导致用户支付失败,因此当前需要的中间消息必须支持消息重试机制策略。也就是说,支持:在遇到问题和失败时,没有丢失的邮件也可以检索。

4.3.4消息分配策略的机制
4.3.5消息分配策略的比较
[外部链接图像传输失败,源站可能有防盗链接机制,建议将图像保存下来并直接上传(img-3fgbEWQE-1658986933847)(C:Users10642AppDataRoamingTyporatypora-user-imagesimage-20220717155013325.(png)]
4.4消息队列高可用性和高可靠性
什么是高可用性机制
- 高可用性是指产品能在特定条件下和特定时间或时间执行特定功能的能力。当业务量增加时,请求也过大,消息中间服务器的触摸和硬件(CPU, 内存,磁盘)的极限,消息服务器您不再能够满足业务需要,因此消息中间人必须支持集群部署,达到较高的可用性。
- 集群模式的目标:消息服务器不会挂载,故障仍能保持消息服务使用
- 集群模式的方案
4.4.2集群模式
1.共享数据的部署方法
- 生产者讲消费发送到Master节点,所有的都连接这个消息队列共享这块数据区域,Master节点负责写入,一旦Master挂掉,slave节点继续服务。从而形成高可用

2.主流同步部署
- 这个模式还写信在主节点上,但主节点将将数据同步到奴隶节点以形成复制,它类似于动物园keeper或Redis的宿主机制。这样可以达到负荷平衡的效果,如果消费者有多个,你可以到不同的地点去消费,但复制和同步消息需要大量的带宽和网络资源。它将在随后的rabbtmqs中使用。

3.对多个主群进行同步部署

4.多主群转移部署模型
- 如果您插入的数据是 Broker-1,元数据信息存储数据的相应描述,并记录存储位置(队列)。它同时同步描述信息,即元数据信息。如果消费者使用经纪人-2,想知道你没有多少消息,你可以从相应的元数据信息中查询,然后返回相应的消息信息,场景:例如,黄贝卖音乐会票,黄牛一号有顾客想参加的音乐会的票,如果没有黄牛,他就会把它卖给他。他会到别的牛那里去问他们,有则返回

5.Master-slave与Breoker-cluster组合的方案
什么是高可靠性机制
- 高可用性意味着系统可以正常运行低连续性,如系统突然崩溃、报告错误、异常等不影响线路业务的正常运行,错误的概率非常低,因此称为高可靠性。
- 在高耦合业务场景中,未能确保系统的高可靠性所造成的风险和损失非常严重。
- 如何确保中间消息的可靠性可以从两个方面考虑:
- 消息传输: 通过协议确保系统间数据分析的准确性.
- 可靠消息存储:通过持久性确保消息的可靠性。
本文由 在线网速测试 整理编辑,转载请注明出处,原文链接:https://www.wangsu123.cn/news/30664.html。