看一看 中间件Middleware

中间件(Middleware)是介于操作系统与应用程序之间的一层软件

它为分布式应用程序提供了统一的通信、数据交换、服务调用、消息传递等能力。
它的作用就像“胶水”,连接各个系统组件。

文章目录

      • 消息队列
      • 缓存中间件
      • 数据库中间件
      • 服务注册与发现
      • Web 中间件
      • RPC 中间件

消息队列

Message Queue Middleware

消息队列是 现代分布式系统中的关键组件,用来解耦、削峰、异步处理和提高系统可扩展性。

消息队列是一种异步通信机制:发送方(Producer)把消息放到队列里,接收方(Consumer)从队列中取消息。中间的“队列”就是中间件的作用。

功能:

  • 解耦:它让两个系统模块不必同时在线,发送者发送完就走,消费者有空再处理。
  • 削峰填谷:在高并发场景下,队列能缓冲瞬间大量请求,防止系统崩溃。
  • 异步处理
  • 广播/订阅:一个消息可以被多个消费者订阅,比如用户注册成功后,分别发送欢迎邮件、创建用户初始配置等。
中间件 特点 应用场景
RabbitMQ 基于 Erlang,支持 AMQP 协议,功能丰富,支持事务、插件机制强 金融、电商、任务调度
Kafka 高吞吐量、分布式、持久化强、偏向日志收集/流处理 日志收集、用户行为追踪、监控
RocketMQ 阿里开源,Java 编写,事务消息支持好,性能优秀 国内互联网、电商场景多见
ActiveMQ Java 实现,老牌 MQ,支持多协议 轻量级系统、企业系统
Redis Stream Redis 5.0 引入,轻量级流处理方案 简单任务队列、轻量异步处理

缓存中间件

缓存中间件是 高性能系统架构中不可或缺的一环,主要用于提高访问速度、减轻数据库压力、提升系统吞吐量。

缓存中间件是一个用于快速访问热点数据的中间层系统,通常存储在内存中。相较于数据库的磁盘访问,缓存是读写速度非常快的内存访问。
典型的缓存数据如:用户会话信息、验证码、热点新闻、商品信息等。

功能:

  • 加速读请求:比如一个商品详情页面,每次都查数据库会慢;缓存可以毫秒级响应。
  • 降低数据库压力:热门数据可以从缓存中直接获取,极大减少数据库访问量。
  • 数据预加载:可以在系统启动或访问前,提前将数据加载进缓存。
  • 分布式共享数据:缓存可以部署为集群,多个服务共享缓存数据。
中间件 特点 应用场景
Redis 单线程、支持多种数据结构、持久化、高可用集群、Lua脚本 分布式缓存、排行榜、计数器、会话存储
Memcached 简单、纯内存、支持 key-value、无持久化 临时缓存、对象缓存
Ehcache 嵌入式缓存、Java 集成方便 单机应用、JVM 内部缓存
Guava Cache Google 的本地缓存库,轻量级 本地缓存、小规模系统

常见术语:
缓存穿透:不存在
缓存击穿:刚好过期
缓存雪崩:大量同时过期

Redis 的典型使用场景:

登录状态 Session 管理,商品详情缓存,秒杀库存控制,排行榜,延迟任务

数据库中间件

数据库中间件:解决数据库在大规模系统中遇到的性能瓶颈、扩展性问题以及高可用等需求。

功能:

  • 分库分表(水平拆分)【数据库分片】:将大表根据特定规则(如 id 取模)拆分为多个小表或分到不同数据库节点上。
  • 读写分离(主从架构):写操作走主库,读操作走从库,提高并发能力。
  • 数据库路由
  • SQL解析与重写: 自动拼接分页、聚合等操作
  • 事务协调(跨库事务): 支持 分布式事务协议(如 XA、TCC、SAGA),保证事务一致性。
中间件 特点 适用场景
ShardingSphere Apache 顶级项目,功能最强,支持分布式事务、弹性扩容、SQL重写 复杂系统,数据库中间层统一解决方案
MyCat 国内常用,基于 Cobar,配置文件驱动,易部署 中小型系统、轻量分库分表
TDDL(淘宝) 阿里早期内部使用,支撑双十一高并发场景 电商平台、分布式大数据系统
Vitess YouTube 开源,支持海量分库分表和水平扩展 高可用、大规模数据库服务
OceanBase 蚂蚁集团自研,融合关系型数据库与分布式能力 金融级数据库、强一致需求场景

好处:

  • 横向扩展能力强:突破单库容量限制
  • 容灾能力增强:支持主从切换、高可用架构
  • 透明接入:应用层无需修改大量代码
  • 灵活路由:根据配置灵活选择数据节点

服务注册与发现

Service Registry & Discovery

服务注册与发现 主要用于解决“服务实例动态变化”带来的访问问题

在微服务架构下,一个系统通常由多个小服务组成,服务实例可能频繁上线、下线、扩容或重启,因此不能像单体应用那样写死 IP 和端口。
于是,我们需要一个“服务注册中心”来动态记录每个服务的地址信息。其它服务通过“服务发现”找到它们要调用的服务。

流程:

服务提供者(Service A)启动 -> 向注册中心注册自己的信息

服务消费者(Service B) -> 从注册中心拉取/订阅服务列表 -> 根据负载均衡策略选择一个实例调用
中间件 特点 适用场景
Eureka Netflix 开源,经典 Java 生态,适合 Spring Cloud,支持自我保护机制 中小型微服务架构
Nacos 阿里巴巴开源,支持服务注册/发现 + 配置中心,易集成 Dubbo/Spring Cloud 国内主流项目
Consul HashiCorp 开源,支持健康检查、KV存储、DNS 发现、跨语言支持好 跨语言服务体系
Zookeeper 强一致性,CAP 中偏 CP,Apache 项目,广泛用于 Dubbo、Kafka 需要严格一致性的系统
Etcd CoreOS 开源,Kubernetes 的底层组件,支持高并发、强一致 Kubernetes 原生注册系统

Web 中间件

Web 中间件 要用于连接前端请求和后端服务,提供多种通用功能。

类别 代表产品 功能
反向代理 Nginx、Apache HTTPD 负载均衡、SSL 终止、静态资源、请求转发
API 网关 Kong、APISIX、Zuul、Spring Cloud Gateway 路由、认证、限流、服务聚合、跨域处理
Web 框架中间件 Express.js 中间件、Django Middleware、Flask Middleware 权限、日志、跨域、参数处理
服务网格数据面 Envoy、Linkerd 服务之间通信控制,透明代理
静态资源中间件 CDN、Nginx、Varnish 缓存、就近访问、内容分发
应用服务器 Tomcat、Jetty HTTP 服务、Servlet 容器、JSP 解析
网络通信框架 Netty 高性能网络通信、异步事件驱动

RPC 中间件

Remote Procedure Call,远程过程调用

是一种通过网络请求调用远程服务器上的函数或方法的技术,它隐藏了底层的网络通信细节,让开发者像调用本地方法一样调用远程方法【Feign】。
简化了分布式系统的构建。

名称 特点 使用场景
gRPC 基于 Google 的 Protocol Buffers(Protobuf),支持高效的二进制序列化,内建支持负载均衡、认证、追踪等 高性能、高并发的微服务架构
Dubbo Apache 提供,支持多种协议和序列化方式,具有服务治理和负载均衡功能 大规模分布式系统,企业级服务框架
Thrift 由 Facebook 开发,支持多种编程语言,灵活的跨语言调用,支持多种协议和传输层 跨语言应用,性能要求高的场景
Hessian 轻量级、快速的二进制协议,适合大规模分布式系统 高效的分布式服务调用
RMI Java 提供的 RPC 机制,适用于 Java 环境中远程方法调用 Java 环境内的服务调用
Zookeeper 分布式协调服务,常用于服务注册、配置管理等,支持高可用性 服务发现、配置管理
Consul 提供服务发现、健康检查和键值存储,适用于微服务架构 微服务架构中的服务注册和发现
Restful API 基于 HTTP 协议的简单、易用的远程调用机制 简单的 Web 服务和 RESTful 接口

你可能感兴趣的:(2025,-,中间件,中间件)