Spring中间件 – 什么是中间件

 一、前言

在互联网应用开发初期,所有用于支撑系统建设的,框架结构、基础工具、业务逻辑、功能服务包括页面展示等,都是在一个系统中开发完成,最终也只是把系统和数据库部署在同一台服务器上。

但随着互联网应用的发展,业务体量逐渐增大,那么原有的系统搭建就很难支撑起现有的业务体量。因此开始陆续出现应用与数据库分离、Nginx 反向代理、缓存组件、分组部署、RPC 分布式应用、网关服务、监控系统等等。

在这些系统的架构的演进过程中,不断的出现各类支撑起服务建设升级的系统和中间件。在中间件这一层的建设,基本是来自于业务系统中非业务逻辑的通用性核心功能抽离出来的,而逐步形成各类中间件服务。

中间件:是介于操作系统和应用软件之间,为应用软件提供服务功能的软件,有消息中间件,通信中间件,应用服务器等。由于介于两种软件之间,所以,称为中间件。

二、中间件的起源

最早具有中间件技术思想以及功能实现的软件是 IBM 的 CICS,但由于 CICS 不是分布式环境下的产品,因此大家一般把 Tuxedo 作为第一个严格意义上的中间件。

Tuxedo 是1984年在当时属于AT&T的贝尔实验室开发完成,但由于分布式处理当时并没有在商业应用上获得像今天一样的成功,Tuxedo 在很长一段时期里只是实验室的产品,后来被 Novell 收购,在经过 Novell 并不成功的商业推广后,1995年被现在的 BEA 公司收购。

尽管中间件的概念很早就已经产生,但中间件技术的广泛运用却是在最近10年之中。BEA 公司1995年成立后收购 Tuxedo 才成为一个真正的中间件厂商,IBM 的中间件 MQSeries 也是20世纪90年代的产品,其他许多中间件产品也都是最近几年才成熟起来的。

三、为什么使用中间件

使用中间件来自于中间件本身的价值能力,具体的说中间件屏蔽了底层操作系统的复杂性,让开发工程师可以把更多的专注力放在业务系统的逻辑和流程实现上,让开发人员面对的是一个简单、单一、统一的开发环境,减少程序设计因底层差异而导致的复杂度。

中间件最终带给系统的是交付质量和交付能力的提升,它的存在不只是让开发简单、周期短,更主要的是减少了系统上线后的不稳性和运维成本以及管理的工作量,同时还减少了服务资源的投入。

四、中间件的分类

其实中间件的分类有很多中,这可能也是让大家在平常的开发中迷惑,到底哪些是中间件。一些基本的中间件定义很好定位,比如MQ、RPC、Dapper等等,但有些软件服务虽然不是作为中间件开发出来的,但它们如果符合中间件的定义,也可以归纳到中间的范畴里。

按照 IDC 的分类方法,中间件可以分为六类:

  1. 终端仿真/屏幕转换中间件

此类中间件用以实现客户机端的图形用户接口与现有的服务器端字符接口方式的应用程序之间的互操作。例如;中继器、IO板卡、PLC等作为控制层进行高级语言与展示层的交互。

  1. 数据访问中间件

JDBC、ODBC,此类中间件适用于应用程序与各类数据源的通信操作,以便于直接访问和更新基于服务器的数据源,数据源可以是关系型、非关系型以及对象型,大概你可以想到的是 Mysql、Oracle、Redis 或者 Elasticsearch 等,使用此类中间件可以更好的简化应用系统的开发。

  1. 远程过程调用中间件

RPC,是最早的分布式应用系统采用的一种同步请求与应答协议,RPC 扩展了过程开发中的“功能调用和结果返回”机制,使得它可以适应于远程环境调用和分布式部署。

  1. 消息中间件

kafka、ActiveMQ、RabbitMQ,现在的分布式系统构建中都离不开 RPC 与 MQ,系统架构设计中使用消息中间件把应用扩展到不同的操作系统和不同的网络环境中,基于消息事件驱动机制处理业务逻辑的解耦和消峰。

  1. 交易中间件

此类中间件是一种针对联机交易处理系统而设计的中间件,其实很多业务发起的中间件都属于此类。交易中间件就相当于一组程序模块,使用它可以大大的减少开发一个交易系统所需要的编程工作量。

  1. 对象中间件

对于这样的中间件分类也可以理解为是从业务系统中抽离出具有通用性通用功能的核心逻辑,面向对象的技术基本是 Java 语言的最大目标,通过封装、继承、多态,提供良好的代码重用性。

五、你为什么要懂中间件开发

说到底你只面向工作学习吗?

如果说编程只是单纯的承接产品需求开发系统功能,那么基本可以把程序开发过程,简单理解为按照需求PRD,定义属性创建方法调用展示,这三个步骤。

尤其是在一些大公司中,会有易用的、完善的、标准的架构体系和运维服务,例如:RPC、MQ、Redis集群、分布式任务、配置中心、分库分表组件、网关等搭配出来的系统架构。也因此让程序员做到只关心业务功能开发

但让程序员只关心业务开发,有成熟的系统架构、有标准的开发流程、有通用的功能设计,对于团队效能提升来说是非常好的事。可一部分程序员正因为有这样的好事,日复一日的岁月做着同样的事,最后成为工具人。

请登录后发表评论

    没有回复内容