中间件

介绍

中间件 = 介于「应用程序」和「底层系统/硬件/其他服务」之间的一层通用软件

它本身不直接给用户提供业务功能,只负责搭桥、通用能力封装,解决不同程序、不同机器、不同语言之间通信、数据传输、资源调度的麻烦。

一句话理解

中间件是 独立服务,不面向终端用户,专门为 业务应用 提供通用底层支撑能力。

类比

电脑上的显卡驱动、声卡驱动就是最简单的中间件:游戏(上层应用)不用直接跟显卡硬件打交道,靠驱动中转。

作用

  1. 解耦
    业务代码不用写复杂底层逻辑,不用关心数据库、网络、操作系统细节;换数据库/服务器不用大面积改业务代码。

  2. 标准化通信
    Java、Python、Go写的服务能互相调用,跨机房、跨服务器传输数据。

  3. 提供通用基础能力
    消息队列、缓存、分布式事务、远程调用、文件存储、网关等重复功能统一实现,不用每个项目重复造轮子。

  4. 屏蔽底层差异
    不管是Windows、Linux,MySQL、Oracle,本地服务还是云服务,中间件统一接口。

常见分类

1. 消息中间件(消息队列)

负责异步收发消息,削峰填谷、系统解耦

  • RabbitMQ、Kafka、RocketMQ、ActiveMQ

场景:下单后异步发短信、日志收集、订单延时取消

2. 缓存中间件

高速内存存储,加速读写,减轻数据库压力

  • Redis、Memcached

3. 远程调用中间件(RPC)

不同服务之间快速调用,替代HTTP,高性能

  • Dubbo、gRPC、Spring Cloud Feign

4. 数据库中间件

分库分表、读写分离,统一管理多数据库

  • MyCat、Sharding-JDBC

5. API网关中间件

统一入口,路由、鉴权、限流、日志

  • Nginx、Gateway、Zuul

6. 事务中间件(分布式事务)

保证跨多服务、多数据库的数据一致性

  • Seata

7. 应用服务器中间件(传统中间件)

早年Java Web容器,运行Web项目

  • Tomcat、Jetty、JBoss、WebLogic

例子

电商下单流程:
前端页面 → 网关(Nginx) → 业务服务(SpringBoot) →

  1. 查商品库存:Redis缓存中间件
  2. 扣减订单:MySQL + Sharding-JDBC分库中间件
  3. 发通知、物流:Kafka消息中间件
  4. 微服务互相调用:Dubbo RPC中间件

网关、缓存、MQ、RPC全都是中间件,业务代码只写“下单逻辑”,网络、存储、通信全部交给中间件处理。

容易混淆概念

  1. 操作系统:最底层,管理硬件;中间件跑在OS之上
  2. 中间件:基础通用支撑软件,无业务逻辑
  3. 业务系统/应用:面向用户的功能(商城、OA、ERP),跑在中间件之上

原文出处:/show_1GW3hgccfZXo.html