目录
1. 中间件简介
1.1. 什么是中间件? 1.3. 何时使用中间件技术?
1. 中间件简介
尽管中国企业从20世纪80年代开始就开始逐步建设信息化,但他们的方法和系统仍然不成熟,而且他们的业务和市场需求在不断变化。你可能有几个不同的业务系统同时运行。基于不同的操作系统、不同的数据库、异构的网络环境。现在的问题是如何将这些信息系统整合成一个有机协调的整体,真正实现企业跨平台、分布式应用。
中间件以牺牲复杂性来支持企业应用程序。 接下来我们来了解一下什么是中间件。
1.1. 什么是中间件?
百度百科:中间件是一种位于应用系统和系统软件之间,利用系统软件提供的基础服务(功能)连接应用系统不同部分或网络上不同应用程序,实现资源目标的软件。共享和功能共享。
尽管没有严格定义,但IDC 的定义已被普遍接受。
中间件是一种独立的系统软件服务程序,用于在不同技术之间共享资源并管理计算资源和网络通信。从这个意义上来说,中间件可以表示为中间件=平台+通信。它还有一个局限性,即在分布式系统中使用时只能称为中间件,这也将其与支持软件或实用软件区别开来。
虽然中间件的概念听起来很高大上,但MySQL实际上可以认为是一种具有中间件特性的技术,要求它遵循一定的规范和协议,例如TCP/IP和UDP约定。没有规则,什么都不会发生。事情只能通过遵守一定的协议才能完成。 MySQL遵循TCP/IP协议。在我们的日常开发中,遵循这个协议是使用Java、Go、Python等各种编程语言来操作MySQL的前提。实现不同语言的连接模块来达到通信的目的。由此看来,使用中间件首先需要解决的问题就是互操作性,或者说是相互通信的能力。当我们稍后了解其他中间件时,可能还会出现其他协议,例如AMQP、HTTP 协议等。为什么呢?因为TCP/IP协议是底层操作系统协议,它无法满足所有业务场景的需求。因此我们基于此构建新协议并请求信息。例如,AMQP 协议将信息标头添加到消息内容中。标签、队列名称、交换机名称、连接定制信息等。
此外,中间件的第二个重要方面是平台。平台是按照特定协议和规范开发的应用程序,与底层操作系统硬件交互以实现跨平台效果。
为了解决通信和平台这两大问题,中间件采用了许多协议/技术/方法,如下所述。
RMI(远程方法调用,远程调用)
负载均衡(负载分配,将访问负载分配到各个服务器上)
透明故障转移(Transparent Failover)
集群(集群用多个小型服务器代替大型机)
后端集成(后端集成,遗留系统如何与现有的和新开发的系统集成)
常用的中间件如MQ、Redis、Nginx等都缺乏中间件通信、高可用、高扩展性、持久化等特性,而这些都由MySQL等技术来弥补。它本身不具备高可用性,这就是Mycat、ShardingJDBC等技术发挥作用的原因。
中间件的特点可以概括如下。
满足众多应用的需求
运行在各种硬件或操作系统平台上
支持分布式计算并提供跨网络、硬件和操作系统平台的透明应用程序或服务交互。
支持标准协议
支持标准接口
由于标准接口对于可移植性和标准协议对于互操作性的重要性,中间件已成为许多标准化工作的关键部分。在应用软件开发中,中间件提供编程接口,定义一个无论底层计算机硬件和系统软件如何更新都相对稳定的高层应用环境。升级更新中间件,保持中间件对外接口定义不变,对应用软件的改动很小,保护了公司在应用软件开发和维护方面的大量投资。
简而言之,中间件的关键特征是它具有与特定设计目标解耦的模块,并提供通用的、独立的功能需求。这使得中间件必然是可替换的。如果中间件在系统设计中是不可替代的,并且架构、框架设计没有问题,那就是这个中间件。它可能是其他地方的中间件,但它是这个系统的引擎。
1.4. 何时使用中间件技术
项目架构和重组需要仔细考虑技术的使用和架构的变化。因为技术整合和变革会增加人员、技术和成本,就像今天的互联网一样。对于企业或项目使用,我们建议使用单体架构,最多添加缓存中间件。没有必要一味追求新的性能或者所谓的高性能。其背后的业务和项目驱动因素,追求它将意味着学习成本、公司人员和服务器成本、维护和运营维护成本都会增加,因此需要仔细选择和考虑。
但由于是开源的,如果没有学习中间件技术的能力和心态,项目开发时估计很难理解,也很难在面试中提及。这些技术在当今时代并不新鲜。学习和探索最重要的是花时间和精力去探索和研究。
1.5. 常用中间件技术
我们将常用的中间件分为四类:分发中间件、负载均衡中间件、缓存中间件、数据库中间件。应用场景中总会涉及到这些中间件。
常用的分布式中间件有四种:
ActiveMQ是一个符合JMS规范AMQP协议的消息中间件。这个中间件比较老,现在用得不多。如果我们是一个比较新的技术的开发者,ActiveMQ并不是一个学习参考,因为使用这个中间件的复杂度比RabbitMQ高很多。
RabbitMQ目前比较流行,被国内各大厂商使用。这样做的原因有很多,因为它支持分布式模式、持久性和容错等多种机制。它也类似于由多家公司开发的Spring框架。这就是Spring框架在Java领域如此流行的原因,因为它对它们有比较完整的支持。
Kafka是基于TCP/IP二进制传输协议开发的,所以性能充其量也接近最低,但也支持持久化和分发机制,比较完善。大数据领域有很多。
RocketMQ是阿里巴巴、滴滴等联合开发的国产消息队列。尽管Apache 基础已被移除,但由于其准开源状态,我们对该产品保持中间立场,不建议使用它。稳定性不是很高。如果有一天你的团队不再维护或升级,你遇到了无法解决的问题,你在开发时不应该盲目选择最稳定可靠的技术。追求新事物。
一些常见的负载均衡中间件包括Nginx、LVS、KeepAlive 和CDN。其中,您应该关注Nginx和CDN,因为LVS和KeepAlive不适合短期和中小型项目。当Nginx出现故障并且需要处理集群架构时,可以使用LVS。 KeepAlive用于维持心跳,保持高可用性,以加快网页加载和渲染速度。
对于缓存中间件来说,它必须遵循TCP/IP协议。常见的有MemCache、Redis。其中,MemCache将代码级别的缓存写入代码中,占用JVM内存。这不能用于一些小型项目或专业领域。考虑到分布式架构,最好使用Redis。
对于数据库中间件,我们知道MySQL本身有持久化能力,但没有高可用性,即没有集群。因此,要实现MySQL集群/分库分表,需要使用Mycat、ShardingJDBCD等第三方中间件来帮助MySQL实现高可用。
上述技术对于解决项目中的多种场景非常有帮助。例如,异步数据存储可以达到削峰的目的,因为异步不仅可以实现串并转换,还可以实现消息传递、分布式事务和消息。容错等场景.
1.6. 中间件架构的演变
1 单体架构
在现实项目中,大多数企业项目开发在早期阶段都采用单一的架构模型。
共同特点:将你所有的业务和模块、源码、静态资源文件等放到一个项目中。如果您的模块之一被升级或迭代并且发生微小的更改,则该项目将被重新编译和部署。例如,一个小错误可能需要您重新打包、重新编译和重新部署。如果您的服务太多,您可能需要多次重新发布它们。
有一个问题:
耦合度太高
运维成本太高
不易维护
服务器成本高
架构升级变得更加复杂
2分布式系统
分布式架构:与单片架构不同,单片架构是一个请求启动一个JVM调度线程(更准确地说是Tomcat线程池)并分配一个线程来处理该请求,直到被释放为止,分布式系统是。请求是由多人提出的。两个系统协同工作来完成任务。 JVM和环境都可以是独立的。
如果你想建造一座基于生活中单一结构的小房子,鸟巢或大型建筑,你将需要协调和分配所有的环节。项目开发后期需要开发和考虑的问题。
典型特征:请求由服务器端的多个服务(服务或系统)处理。
有一个问题:
学习成本高、技术栈太多
运维成本和服务器成本增加
人工成本也会增加
项目复杂性也随之增加
面临的错误和容错能力也成倍增加
专用服务器端口和通信选项成本高昂
安全考虑和因素可能要求您选择RM/MQ相关的服务器端通信。
优势:
由于业务系统相互独立,占用服务器资源和硬件成本较少。
更准确地说,它合理分配服务资源,不浪费服务器资源。
系统独立维护和部署,降低耦合性和可插拔性
系统架构和技术栈的选择(而不是简单地选择Java)可以很灵活。
通过大胆的部署,外部问题不会使平台瘫痪或导致服务中断。
原文链接:https://blog.csdn.net/qq_45173404/article/details/121413665
#什么是中间件的简单易懂的解释。相关内容来源网络仅供参考。相关信息请参见官方公告。
原创文章,作者:CSDN,如若转载,请注明出处:https://www.sudun.com/ask/91199.html