大家好,欢迎来到IT知识分享网。
目录
- 一、中间件简介
-
- 1.1、什么是中间件
- 1.2、为什么要使用中间件
- 1.3、中间件特点
- 1.4、什么时候使用中间件技术
- 1.5、常用中间件技术
- 1.6、中间件架构演变
中间件便是解决之道,它用自己的复杂换取了企业应用的简单,接下来我们来了解一下什么是中间件?
它并没有很严格的定义,但是普遍接受IDC的定义:
中间件是一种独立的系统软件服务程序,分布式应用软件借助这种软件在不同的技术之间共享资源,中间件位于客户机服务器的操作系统之上,管理计算资源和网络通信。从这个意义上可以用一个等式来表示中间件:中间件=平台+通信,这也就限定了只有用于分布式系统中才能叫中间件,同时也把它与支撑软件和实用软件区分开来。
中间件的概念听起来高大上,但其实我们平时都在使用,例如MySQL就可以看作是具备中间件特性的一种技术,中间件技术必须遵循一定的规范和协议,例如 TCP/IP、UDP协议等等,无规矩不成方圆,只有遵守一定的协议才能去处理事情。MySQL 就遵循了 TCP/IP 协议,在我们平常的开发中使用不同的编程语言比如 Java、Go、Python 等来操作 MySQL 的前提也是要遵循 TCP/IP协议,根据此协议实现了不通语言的连接模块来达到通信的目的。由此说使用中间件需要解决的第一个问题就是互通性,也就是相互间可以通信。我们后续学习到其他中间件可能会看到更多其他的协议,比如 AMQP、HTTP 协议等等,为什么呢?因为 TCP/IP 协议是底层的操作系统协议,它并不能满足我们业务场景中的所有需求,所以在其基础上构建一个自己请求信息来实现一个新的协议,比如 AMQP 协议就在信息头中增加消息内容tag标签、队列名、交换机名、连接定制信息等等。
此外,中间件的第二个关键点是平台,平台就是用不同语言开发的应用程序,它们通过遵循某种协议和规范就能和底层操作系统硬件打交道来实现跨平台的效果,这就是中间件。
中间件为了解决这些通信和平台这两大问题采用了很多协议/技术/方法论,如下所述:
1.2、为什么要使用中间件
1)屏蔽了底层操作系统的复杂性
中间件技术首先能屏蔽底层操作系统的复杂性,如上图左半部分所示,我们对数据进行增删改查并不需要与底层操作系统的硬盘等各种指令打交道,我们只需要知道MySQL怎么使用,与MySQL进行交互即可,不需要管它是怎么进行存储和互联互通的。但是中间件的开发者就必须了解各种协议以及底层如何与操作系统的各种硬件进行交互的。
2)屏蔽技术架构的复杂性
第二,中间件技术可以屏蔽技术架构的复杂性,以前单体架构所有服务都集中在一起用一种语言进行开发,但如今分布式架构下每一个微服务都可以采用不同的语言不同的技术栈,使用中间件就可以将不通的服务来连接互通起来,将不同技术架构的服务串联起来,来达到一个更加稳健、缩短开发周期维护成本低目的。
中间件屏蔽了底层操作系统的复杂性,使程序开发人员面对一个简单而统一的开发环境,减少程序设计的复杂性,将注意力集中在自己的业务上,不必再为程序在不同系统软件上的移至而重复工作,从而大大减少了技术上的负担。中间件带给系统的,不只是开发的便捷,开发周期的缩短,也减少了系统的维护、运行和管理的工作量,还减少了计算机总体费用的投入。
如今的开发都采用的分布式架构,就是将一个系统拆分为若干份,比如一个淘宝app可能分为订单系统、用户系统、支付系统等等,订单系统可能采用Java开发、用户系统采用Go开发、支付系统采用Python开发,这些系统之间如何进行互联互通的呢?一个项目从单体架构拆分成微服务架构要解决的第一个问题就是选择什么样的中间件技术来处理不同服务间的通讯问题,中间件为了解决通信的方式有很多种,比如RMI协议,典型的socket通信、dubbo采用的协议都遵循了RMI协议。不仅如此,中间件还需具备高可用的功能,因为每个微服务往往都采用集群的方式部署,比如订单系统将数据通过中间件发送给支付系统,中间件就一定要保证数据的不丢失且高效送达。此外,还需具备持久性,也就是数据可以存盘用于备份。这些都是中间件技术必须解决的问题。
我们常用的 MQ、Redis、Nginx 等中间件都是都具备了中间件的通讯、高可用、高可拓展、持久化等特性,没有具备的话也会通过技术来补充,比如 MySQL 本身不具备高可用性,于是出现了 Mycat、ShardingJDBC 等技术。
综上所述,中间件的特点可以概括为以下几点:
简单说:中间件有个很大的特点,是脱离于具体设计目标,而具备提供普遍独立功能需求的模块。这使得中间件一定是可替换的。如果一个系统设计中,中间件是不可替换的,不是架构、框架设计有问题,那么就是这个中间件,在别处可能是个中间件,在这个系统内是引擎。
1.5、常用中间件技术
这里将常用中间件分为了四类:分布式中间件、负载均衡中间件、缓存中间件、数据库中间件。这些中间件在我们的应用场景中肯定是会涉及到的:
对于分布式中间件,常用的有以下四个:
对于缓存中间件,一定要遵循 tcp/ip 协议,常见的有MemCache和Redis。其中 MemCache 是代码级别的,它会将缓存写入代码中,占用 jvm 内存,在一些小项目和非特别领域可以采用。考虑到分布式架构最好使用 Redis。
对于数据库中间件,我们知道 MySQL 本身是具有持久化功能但是不具有高可用性的,也就是没有集群。因此要实现 MySQL 的集群/分库分表的话就必须要使用第三方的中间件例如Mycat、ShardingJDBCD等等来协助 MySQL 完成它的高可用性。
以上技术都能很好的帮我们解决项目中的一些场景,比如异步数据的保存可以达到削峰的目的,因为异步可以实现从串行到并行,以及消息分发、分布式事务、消息容错等等场景…
在实际的项目中,大部分的企业项目开发中,在早期都是单体的架构模式
典型特点:把所有的业务和模块,源代码,静态资源文件等都放在一个工程中,如果其中的一个模块升级或者迭代发生一个很小的变动都会重新编译和部署项目。比如可能其中一个小错误就需要重新打包重新编译重新部署,如果服务个数太多,就需要重新发布很多次。
存在问题:
分布式架构:和单体架构不同的是,单体架构是一个请求发起jvm调度线程(确切的是tomcat线程池)分配线程 Thread来处理请求直到释放,而分布式系统是:一个请求是由多个系统共同来协同完成,jvm和环境都可能是独立。
如果生活中的比喻的单体架构就想建设—个小房子很快就能够搞定,如果你要建设个鸟巢或者大型的建筑,你就必须是各个环节的协同和分布,这样目的也是项目发展都后期的时候要去部署和思考的问题。
典型特点:一个请求由服务器端的多个服务(服务或系统)协同处理完成
存在问题:
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/116727.html

