一、前言

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

但随着互联网应用的发展,业务体量逐渐增大,那么原有的系统搭建就很难支撑起现有的业务体量。因此开始陆续出现应用与数据库分离、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集群、分布式任务、配置中心、分库分表组件、网关等搭配出来的系统架构。也因此让程序员做到只关心业务功能开发

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

如果是框架和中间件的存在,是了让程序员只关心业务开发。 那为什么你面试的时候会被问到核心组件的设计和原理呢? 在这个年代,别放弃学习以及深度学习是你几乎唯一的生存途径。所以你要多去拓展学习一些更核心的技术,让自己成为那个最贵的程序员!

Spring中间件 - 什么是中间件相关推荐

  1. 后盾网lavarel视频项目---lavarel中间件(使用中间件拦截没登录的用户)

    后盾网lavarel视频项目---lavarel中间件(使用中间件拦截没登录的用户) 一.总结 一句话总结: 1.中间件中验证用户是否登录:if(!Auth::guard('admin')->c ...

  2. 什么是中间件?常见中间件有哪些?

    文章目录 中间件是什么 为什么使用中间件 常见的中间件有哪些 中间件是什么 中间件是一种独立的系统软件或服务程序,分布式应用软件借助这种软件在不同的技术之间共享资源.中间件位于客户机/ 服务器的操作系 ...

  3. Java中间件(1)--分布式系统中间件从入门到精通(五)

    上篇文章说了,当业务数据量大的时候,可以考虑业务和数据分离,当还解决不了的时候,可以考虑把数据库读写分离,缓存,还可以考虑把表垂直拆分,水平拆分. 大型网站架构(2)--分布式系统&中间件从入 ...

  4. PHP中间件 middleware,middleware 中间件详解

    如果感觉这篇文章有用请点个赞,让我知道自己的努力不白费!!! 中间件是请求必经之处,所以此处能对请求的数据做一系列处理,相当于过滤器.例如跨域请求,验证会员是否登录跳转至登录页,前后端分离数据类型不一 ...

  5. mysql 横向扩展 中间件_mysql-proxy数据库中间件架构 | 架构师之路

    一.mysql-proxy简介 mysql-proxy是mysql官方提供的mysql中间件服务,上游可接入若干个mysql-client,后端可连接若干个mysql-server. 它使用mysql ...

  6. python的数据库中间件_数据库中间件设计方案

    数据库中间件的主要作用是向应用程序开发人员屏蔽读写分离和分库分表面临的挑战,并隐藏底层实现细节,使得开发人员可以像操作单库单表那样去操作数据.在介绍分库分表的主流设计方案前,我们首先回顾一下在单个库的 ...

  7. java中间件学习1-java中间件的定义

    1.java中间件的定义 在java web开发的演进与进化中,我们对于消息系统,数据库,服务化接口的抽象等,涉及数据分离的过程中,在分离过程中,就会涉及到分离后系统间,数据库间的交互.java中间件 ...

  8. hyperf 前置中间件 后置中间件

    今天碰到一个问题 , 就是正常跑接口 , 我们需要做一些日志 , 当出现慢日志问题进行分析与接口优化 , 于是想到了全局中间件 但是hyperf文档中没有写 Hyperf 根据这个官方的图示 , 可以 ...

  9. php mysql中间件原理_Laravel中间件实现原理详解

    本文实例讲述了Laravel的中间件实现原理.分享给大家供大家参考,具体如下: #1 什么是中间件? 对于一个Web应用来说,在一个请求真正处理前,我们可能会对请求做各种各样的判断,然后才可以让它继续 ...

最新文章

  1. VTK:PolyData之PolyDataCellNormals
  2. c语言 字符串 正序再倒序_新特性解读 | MySQL 8.0 索引特性3 -倒序索引
  3. linux中断pollselcet按键处理机制
  4. 哈维玛德学院 计算机,这些美国大学名气不高,却有最顶级的工程专业
  5. Go Web编程--深入学习解析HTTP请求
  6. BootStrap基本模板
  7. android webkit js脚本注入(js内部对象由java层构建)
  8. java多线程在单例模式下是否需要同步
  9. Java API 中文版 谷歌翻译 拿走不谢 jdk api 1.8_google
  10. 浅谈Java程序员的黄金五年,如何实现快速进阶
  11. Python爬虫爬取电影网站种子,让你以后再也不寂寞
  12. python 打印数组_python打印数组的全部元素 | 学步园
  13. 硬改路由器-MW310R-AR9341篇
  14. [绍棠] This In-App purchase has already been bought. It will be restored for free.
  15. deepin更新失败_更新失败
  16. STM32F407的时钟
  17. 学习KNN(一) 图像分类与KNN原理
  18. 「杂谈」最有可能成为第五个一线城市,苏州 or 杭州?
  19. C#使用OleDB操作ACCESS插入数据时提示:标准表达式中数据类型不匹配。
  20. Codeforces gym101981 (2018 icpc 南京站) B.Tournament

热门文章

  1. 新手做自媒体短视频,想入行的必看哦!博主的真实收入?
  2. MethodInfo类的一般使用
  3. 安装xshell和xftp显示更新版本的解决方案
  4. java 面向对象程序设计实验书 答案_java面向对象程序设计实验指导与习题解答的答案...
  5. 6 过滤数据:where
  6. Microsoft Office Excel 不能访问文件“XXXXXXXXXXXXX.xls”。 可能的原因有:
  7. java使用snmp协议
  8. 播放实现Android实现图片循环播放
  9. NAACL 2019最佳论文:量子概率驱动的神经网络(附代码文献)
  10. Linux学习----文件创建、修改和编辑