【后端开发】golang部分中间件介绍(任务调度/服务治理/数据库/缓存/服务通信/流量治理)

【后端开发】golang部分中间件介绍(任务调度/服务治理/数据库/缓存/服务通信/流量治理)

文章目录

    • 1、中间件是什么?
      • [1.1 中间件的定义](#1.1 中间件的定义)
      • [1.2 中间件和框架的区别](#1.2 中间件和框架的区别)
      • [1.3 中间件与工具库的区别](#1.3 中间件与工具库的区别)
      • [1.4 云原生时代的中间件](#1.4 云原生时代的中间件)
      • [1.5 中间件的生命周期](#1.5 中间件的生命周期)
    • 2、中间件的分类
      • [2.1 计算类中间件(分布式计算,任务调度,服务治理)](#2.1 计算类中间件(分布式计算,任务调度,服务治理))
      • [2.2 存储类中间件(缓存,数据库,搜索引擎,数据同步)](#2.2 存储类中间件(缓存,数据库,搜索引擎,数据同步))
      • [2.3 网络类中间件(服务通信,流量治理,负载均衡,信息安全)](#2.3 网络类中间件(服务通信,流量治理,负载均衡,信息安全))
    • 3、goland的部分常用中间件(以go-zero框架为例)
      • [3.1 计算类(go-kit/cron/viper)](#3.1 计算类(go-kit/cron/viper))
      • [3.2 存储类(mysql/redis/elk/etcd/gorm/minio/mongo/migrate)](#3.2 存储类(mysql/redis/elk/etcd/gorm/minio/mongo/migrate))
      • [3.3 网络类(grpc/telemetry/jwt/kafka/kong/istio/jaeger/consul)](#3.3 网络类(grpc/telemetry/jwt/kafka/kong/istio/jaeger/consul))

1、中间件是什么?

1.1 中间件的定义

中间件是软件开发中连接 "底层基础设施" 与 "上层业务应用" 的关键技术层 ,它通过封装通用能力、解决跨系统协作问题,降低业务开发复杂度,让开发者聚焦核心业务逻辑而非技术细节

  • 向上:为业务应用提供标准化的 API / 接口,屏蔽底层技术差异(如不同数据库的语法、不同消息队列的协议);
  • 向下:适配不同的基础设施(如物理机、虚拟机、云服务器),确保通用能力在不同环境下稳定运行。
  • 简单类比:若把业务应用比作 "餐厅",底层基础设施是 "农场(食材供应)",中间件就是 "中央厨房"------
    它统一处理食材清洗、切配、标准化烹饪流程,餐厅只需直接使用中央厨房的半成品,无需关心食材来源和基础加工,大幅提升效率

中间件的设计围绕"通用性、稳定性、可扩展性"展开,核心特性可归纳为以下6点:

特性 核心说明 典型场景举例
通用性 封装"跨业务的通用需求"(如通信、数据存储、任务调度),可复用于多个业务系统 所有业务都需要"日志收集",日志中间件可通用
解耦性 隔离业务应用与底层依赖(如数据库、缓存),或隔离不同业务模块 订单系统通过消息中间件通知库存系统,无需直接调用库存接口
标准化 提供统一的接口/协议,避免"重复造轮子",降低跨团队协作成本 所有业务通过JDBC(数据库中间件接口)操作不同数据库
高可用性(HA) 支持集群部署、故障自动转移,确保服务不中断(通常要求99.9%以上可用性) 缓存中间件Redis的主从复制+哨兵模式,主节点故障后从节点自动接管
可扩展性 支持水平扩容(增加节点)或垂直扩展(提升单节点性能),应对业务流量增长 消息中间件Kafka通过增加Broker节点,支撑每秒百万级消息收发
透明性 业务应用无需感知中间件的内部实现(如负载均衡、数据分片) 开发者调用RPC中间件时,无需关心请求如何路由到目标服务

1.2 中间件和框架的区别

中间件(Middleware)和框架(Framework)是分布式系统和软件开发中的两个核心但截然不同的概念,它们在架构层次、职责范围和使用方式上有本质区别

技术栈层级关系

text 复制代码
┌─────────────────────────────────┐
│          Application           │  ← 业务代码
├─────────────────────────────────┤
│             Framework          │  ← 提供路由、依赖注入等基础设施
├─────────────────────────────────┤
│          Middleware            │  ← 安全/日志等通用功能
├─────────────────────────────────┤
│   System (OS/Network/DB/etc.)  │
└─────────────────────────────────┘

中间件和框架的对比

维度 中间件 (Middleware) 框架 (Framework)
定位 功能增强插件 开发基础架构
职责 处理横切关注点(Cross-cutting Concerns) 提供应用骨架和编程范式
侵入性 低(可插拔) 高(需遵循框架约束)
复用性 可跨框架使用 通常绑定特定技术栈
典型示例 JWT 认证、日志中间件 Gin、Spring、Django

1.3 中间件与工具库的区别

中间件与普通工具库的差异,本质是"被动调用的工具 "与"主动介入的基础设施"的区别

对比维度 普通工具库(Tool Library) 中间件(Middleware)
核心定位 业务开发的"辅助工具",聚焦单一、原子化的功能封装 系统运行的"基础设施层",聚焦跨模块/跨系统的协作能力支撑
交互模式 「被动调用」:业务代码主动调用工具库API(如DateUtil.format()),工具库不主动介入系统流程 「主动介入」:拦截/接管系统主干数据流(如请求、消息、SQL),无需业务代码显式调用核心逻辑(如网关自动拦截请求鉴权)
依赖关系 业务代码依赖工具库,工具库不依赖业务/系统环境(低耦合) 业务/系统依赖中间件,中间件需适配底层环境(如K8s、数据库),甚至主导系统流程(高耦合,是系统"骨架"的一部分)
能力范围 单一功能(如加密、日期处理、JSON解析),无"分布式/高可用"属性 复合能力(如通信+负载均衡、消息+重试+死信队列),通常具备分布式、高可用、可扩展特性
运行形态 嵌入业务代码(如Jar包、源码依赖),无独立运行进程 独立进程/集群运行(如Redis集群、Kafka Broker),或作为框架核心组件嵌入但接管流程(如Gin中间件)
故障影响 工具库故障仅影响调用它的局部业务(如日期解析失败) 中间件故障会导致整个系统/链路不可用(如Redis集群宕机导致所有缓存查询失败)

交互模式:"被动调用" vs "主动介入"

  • 两者最本质的分界线,直接决定了"谁主导系统流程":

  • 普通工具库:业务代码是"主导者"

    工具库仅提供"功能接口",需业务代码主动触发调用,不干预其他流程。

    示例:

    FastJSON解析JSON时,业务代码需显式调用JSON.parseObject(jsonStr, User.class)

    Apache Commons Lang处理字符串时,需主动调用StringUtils.isBlank(str)

    工具库的逻辑"随调用启动、随调用结束",不会主动拦截或修改业务代码之外的数据流。

  • 中间件:中间件是"主导者"

    中间件通过"拦截器、钩子、代理"等机制,主动接管系统的主干流程(如HTTP请求、数据库操作、消息传输),业务代码无需显式调用其核心逻辑,甚至感知不到中间件的存在。

    示例:
    API网关中间件(如Nginx、Gateway) :用户请求到达时,网关自动拦截请求,完成鉴权、限流、路由,业务服务无需写一行鉴权代码;
    ORM中间件(如MyBatis) :业务代码调用userMapper.selectById(1)时,MyBatis自动拦截SQL请求,完成参数替换、SQL执行、结果映射,业务无需关心JDBC连接池、SQL拼接;
    分布式链路追踪中间件(如SkyWalking):通过字节码增强自动埋点,拦截服务间调用(如Dubbo、HTTP),记录调用链路,业务代码无需手动添加埋点代码。

1.4 云原生时代的中间件

中间件可以理解为高度专业化的工具库

虽然其设计目标和应用场景与普通工具库有显著差异,但是现代中间件越来越呈现模块化工具库特征:

  • 独立可插拔:如OpenTelemetry SDK既可集成到框架,也能单独使用
  • 标准接口:遵循net/http.Handler等通用接口
  • 微内核设计:如go-zero的中间件可脱离框架运行

黄金法则:当某个"工具库"需要拦截系统主干数据流而非被动调用时,它就演变成了中间件
两者的界限在现代云原生架构中正变得越来越模糊。

1.5 中间件的生命周期

普通工具库与中间件在"进程生命周期绑定关系"上存在本质不同

  • 中间件与进程生命周期(启动、运行、异常、退出、重启)的关联,是其区别于普通工具库的核心特征之一------普通工具库完全依附于业务进程生命周期(业务启动则加载,业务退出则销毁),而中间件的进程生命周期通常具备"独立性",且需与业务进程、底层基础设施(如K8s)形成"协同管理机制"。这种关联差异,直接决定了中间件的高可用性、稳定性设计逻辑。

  • 根据中间件是否 "嵌入业务进程",其生命周期管理模式可分为 "独立进程模式" 和 "嵌入式模式"

  • 独立进程模式(主流中间件采用)

    中间件作为独立的服务进程运行(如 Redis、Kafka、Nginx、Elasticsearch),与业务进程完全分离,通过网络协议(TCP/HTTP)或 IPC(进程间通信)与业务进程交互。中间件的生命周期与业务进程无关,具备 "跨业务复用" 和 "独立运维" 能力

  • 嵌入式模式(轻量级中间件采用)

    中间件无独立进程,而是以 "组件 / 库" 形式嵌入业务进程(如 Sharding-JDBC、Gin 中间件、Dubbo 客户端),与业务进程共享同一个运行时(如 JVM、Go 进程),但具备独立的生命周期管理逻辑

    中间件的生命周期与业务进程 "绑定但不完全依赖"------ 随业务进程启动 / 退出,但运行中的状态维护、异常处理独立于业务代码

对比维度 普通工具库(如FastJSON、Apache Commons) 中间件(如Redis、Kafka、API网关)
进程载体 无独立进程,完全嵌入业务进程(如Java应用的JVM进程、Go应用的进程) 大多有独立进程/集群进程(如Redis Server进程、Kafka Broker进程);部分"嵌入式中间件"(如Sharding-JDBC)虽嵌入业务进程,但具备独立生命周期管理逻辑
启动时机 随业务进程启动而加载(如JVM加载Jar包时初始化工具类),无独立启动流程 独立于业务进程启动(如先启动Redis集群,再启动依赖Redis的电商应用);或与业务进程启动同步,但需优先完成初始化(如Gin框架的中间件需在路由初始化前加载)
运行状态 完全依赖业务进程状态(业务进程阻塞则工具库无法调用,业务进程崩溃则工具库直接销毁) 独立维护运行状态(如Redis进程持续监听6379端口,即使业务进程崩溃,Redis仍正常提供服务);需处理"连接保活、资源复用"(如RPC中间件维护长连接池)
异常处理 无独立异常恢复能力(工具库调用报错后,需业务代码自行捕获处理,如JSON解析失败抛异常) 具备独立异常自愈机制(如Kafka Broker崩溃后,ZooKeeper触发选主,新Broker接管分区;Redis主节点故障后,哨兵自动切换从节点为主)
退出逻辑 随业务进程退出而被动销毁(无额外清理操作,或仅执行简单的内存释放) 需执行"优雅退出"流程(如Kafka退出前同步未刷盘的消息到磁盘,避免数据丢失;API网关退出前拒绝新请求,等待存量请求处理完成)
生命周期管理 由业务进程统一管理(无需额外运维操作) 需独立运维管理( 如通过systemd、K8s管理中间件进程的启动/停止/重启;通过监控工具(Prometheus)感知进程状态)

2、中间件的分类

中间件作为连接底层基础设施与上层业务的桥梁,其功能覆盖了计算、存储、网络三大核心领域。这种分类方式能更清晰地反映中间件在IT系统架构中的技术定位和作用边界。

按计算、存储、网络维度划分的中间件体系,共同构成了支撑现代分布式系统的技术底座:

  • 计算类中间件解决 "如何高效处理任务"
  • 存储类中间件解决 "如何高效管理数据"
  • 网络类中间件解决 "如何高效传输数据"

2.1 计算类中间件(分布式计算,任务调度,服务治理)

计算类中间件聚焦于任务调度、资源分配、并行处理等计算能力的封装,解决"如何高效利用计算资源处理业务逻辑"的问题,核心是提升计算效率和资源利用率。

类别 核心特性 代表工具/框架 典型应用场景
分布式计算框架 将大规模任务拆分到多节点并行处理,屏蔽分布式编程细节 Hadoop MapReduce、Spark、Flink 离线日志分析、实时风控计算、用户行为数据分析
任务调度中间件 管理任务触发、执行、重试及依赖关系,支持定时/事件驱动 Quartz、XXL-Job、Airflow、Celery 电商订单对账(每日凌晨)、银行账单生成(每月)、数据处理流水线编排
服务治理中间件 管控微服务调用关系,确保服务稳定运行(注册发现、负载均衡、熔断等) Dubbo、Spring Cloud(Eureka/Ribbon/Hystrix)、Sentinel、Istio 分布式系统服务调用管控、峰值流量削峰、服务熔断降级
容器编排中间件 管理容器生命周期、资源分配和调度策略,支持自动扩缩容和自愈 Kubernetes(K8s)、Docker Compose、Mesos 云原生应用部署、微服务集群扩缩容、容器化应用运维管理

2.2 存储类中间件(缓存,数据库,搜索引擎,数据同步)

存储类中间件专注于数据的持久化、缓存、检索等能力,解决"如何高效存储和访问数据"的问题,核心是平衡数据的可用性、一致性和性能。

类别 核心特性 代表工具/框架 典型应用场景
缓存中间件 将热点数据存储在内存中,加速访问,减轻数据库压力 Redis、Memcached、Caffeine、Ehcache 电商商品详情页缓存、用户登录状态存储、高频查询结果缓存
数据库中间件 解决数据库扩展问题(分库分表、读写分离、分布式事务) Sharding-JDBC、MyCat、Vitess、Seata 海量订单数据分库分表、数据库读写分离提升性能、分布式事务一致性保障
搜索引擎中间件 支持全文检索、复杂条件查询,比传统数据库查询更高效 Elasticsearch、Solr、Algolia 电商商品搜索、日志检索分析、企业文档检索
数据同步中间件 实现不同存储系统间的数据同步和一致性,支持实时/离线同步 Canal、Debezium、DataX、Sqoop MySQL到Elasticsearch数据同步、跨地域数据备份、异构数据库数据迁移

2.3 网络类中间件(服务通信,流量治理,负载均衡,信息安全)

网络类中间件聚焦于数据传输、通信协议、网络资源管控,解决"不同系统/服务之间如何高效、可靠通信"的问题,核心是保证网络传输的效率、安全性和可靠性。

类别 核心特性 代表工具/框架 典型应用场景
服务通信-远程调用(RPC)中间件 实现跨进程/跨机器服务调用,屏蔽网络编程细节(序列化、协议、连接管理) Dubbo、gRPC、Thrift、Spring Cloud OpenFeign 微服务间同步调用(如订单服务调用支付服务)、跨语言服务通信
服务通信-API网关中间件 统一服务入口,处理路由、鉴权、限流、监控等横切关注点 Nginx、Spring Cloud Gateway、Kong、APISIX 对外开放API统一管理、内部服务路由转发、接口访问控制与监控
流量治理-消息队列中间件 基于异步通信模式,实现系统解耦、流量削峰、异步通知 Kafka、RabbitMQ、RocketMQ、ActiveMQ 订单创建后异步通知库存系统、大促期间流量削峰、日志异步收集
负载均衡中间件 将请求分发到多个服务实例,提高系统可用性和吞吐量 Nginx、LVS、F5、HAProxy Web服务器集群请求分发、微服务实例负载分担、高可用系统流量分配
网络安全中间件 保障网络通信安全,提供加密、认证、授权能力 OAuth2.0/OpenID Connect、ModSecurity(WAF)、OpenSSL、Vault 用户身份认证、API接口权限控制、数据传输加密、敏感信息保护

3、goland的部分常用中间件(以go-zero框架为例)

框架分类(按范式)

类别 Go 典型代表 特点
全栈框架 Beego 包含 ORM、缓存等全套组件
微内核框架 Gin、Echo 仅提供路由等核心功能,依赖中间件扩展
RPC 框架 gRPC-Go、go-zero 专注服务间通信
Serverless 框架 AWS Lambda SDK 无服务架构适配

参考资料:1

3.1 计算类(go-kit/cron/viper)

计算类中间件主要解决服务治理、任务调度、流量控制等核心问题。

中间件类型 社区主流组件 go-zero 对应实现 核心功能
服务治理 go-kit(27k+星) 内置服务发现、负载均衡 服务注册发现、熔断降级、监控
流量控制 uber-go/ratelimit(5k+星) MaxConnsHandler、TimeoutHandler 限流、连接数控制、超时管理
熔断机制 afex/hystrix-go(4.3k+星) BreakerHandler 服务熔断、故障隔离
监控指标 prometheus/client_golang(5.9k+星) PrometheusHandler、MetricHandler 指标收集、监控告警
配置管理 spf13/viper(29k+星) 多格式配置文件解析、动态配置更新
任务调度 robfig/cron/v3(13k+星) 定时任务调度、支持复杂 cron 表达式

任务调度中间件示例(cron)
robfig/cron(13k+星)是 Go 生态最流行的定时任务库:

go 复制代码
package main

import (
	"fmt"
	"github.com/robfig/cron/v3"
)

func main() {
	c := cron.New()
	// 每小时执行一次
	_, err := c.AddFunc("@hourly", func() {
		fmt.Println("执行定时任务:清理临时文件")
	})
	if err != nil {
		panic(err)
	}
	c.Start()
	defer c.Stop()

	// 保持程序运行
	select {}
}

3.2 存储类(mysql/redis/elk/etcd/gorm/minio/mongo/migrate)

存储类中间件专注于数据持久化、缓存、检索等功能。

中间件类型 社区主流组件 go-zero 集成方式 核心功能
关系型数据库 go-sql-driver/mysql(15k+星) 通过 sqlx 封装 MySQL 连接、ORM 操作
缓存 redis/go-redis(21k+星) 内置 redis 客户端 缓存操作、分布式锁
日志收集 elastic/go-elasticsearch(6k+星) 结合 LogHandler 使用 日志收集、检索分析
配置中心 etcd-io/etcd(50k+星) 内置配置中心支持 分布式配置管理
关系型数据库ORM gorm.io/gorm(38k+星) 可手动集成 全功能ORM、支持多种数据库、事务管理
文档数据库 mongodb/mongo-go-driver(8k+星) 可手动集成 MongoDB官方驱动、文档存储操作
嵌入式数据库 badgerdb/badger(15k+星) 高性能嵌入式KV数据库、持久化存储
分布式文件存储 minio/minio-go(3k+星) 对象存储客户端、兼容S3协议
数据库迁移 golang-migrate/migrate(18k+星) 数据库版本管理、迁移脚本执行
搜索中间件 blevesearch/bleve(10k+星) 纯Go实现的全文搜索引擎、索引管理

go-zero Redis 缓存使用示例

go 复制代码
package main

import (
	"fmt"
	"github.com/zeromicro/go-zero/core/stores/redis"
)

func main() {
	// 初始化 Redis 客户端
	rds := redis.MustNewRedis(redis.RedisConf{
		Host: "localhost:6379",
		Type: redis.NodeType,
	})
	defer rds.Close()

	// 设置缓存
	key := "user:10086"
	val := `{"id":10086,"name":"go-zero"}`
	_, err := rds.Setex(key, val, 3600) // 1小时过期
	if err != nil {
		panic(err)
	}

	// 获取缓存
	result, err := rds.Get(key)
	if err != nil {
		panic(err)
	}
	fmt.Println("获取缓存:", result)
}

3.3 网络类(grpc/telemetry/jwt/kafka/kong/istio/jaeger/consul)

网络类中间件解决服务通信、API 管理、安全等问题。

中间件类型 社区主流组件 go-zero 对应实现 核心功能
RPC 框架 grpc/grpc-go(22k+星) 内置 zrpc 框架 高性能 RPC 通信
API 网关 kong/go-kong(437+星) 内置 rest 网关 路由、鉴权、限流
消息队列 streadway/amqp(5k+星,RabbitMQ客户端) 支持集成 复杂路由、可靠投递
消息队列 confluentinc/confluent-kafka-go(5k+星,Kafka客户端) 支持集成 高吞吐、日志收集
链路追踪 open-telemetry/opentelemetry-go(6k+星) TraceHandler 分布式追踪
认证授权 golang-jwt/jwt(8k+星) AuthorizeHandler JWT 认证

更多网络中间件

中间件类型 组件名称(GitHub) 核心特性 典型应用场景
API 网关 Traefik(56k+) 1. 自动发现服务(与 K8s、Docker 深度集成) 2. 动态配置(无需重启) 3. 内置监控和仪表盘 4. 支持 HTTPS、WebSocket 云原生环境网关、微服务入口、多环境路由管理
API 网关 Kong Gateway(42k+) 1. 基于 OpenResty,性能优异 2. 丰富的插件生态(限流、鉴权、监控等) 3. 支持声明式配置 4. 企业级稳定性 高并发 API 网关、多团队 API 管理、API 市场
API 网关 Apache APISIX(15k+) 1. 云原生、轻量级 2. 动态配置更新(基于 etcd) 3. 丰富的插件(支持自定义 Go 插件) 4. 支持 gRPC 转 HTTP 微服务网关、K8s Ingress Controller、API 限流防护
身份认证网关 ory/kratos(12k+) 1. 专注于身份认证和授权 2. 支持 OAuth2.0、OpenID Connect 3. 与各种前端框架兼容 4. 可扩展的身份验证流程 用户认证网关、多因素认证、权限管理
服务网格 Istio(37k+) 1. 流量管理(动态路由、A/B 测试) 2. 安全通信(自动 mTLS) 3. 可观测性(全链路追踪、指标) 4. 服务间身份认证 大规模微服务治理、多集群服务管理、零信任网络
代理服务器 Envoy(26.3k+) 1. 高性能 L7/L4 代理 2. 动态配置 3. 健康检查、负载均衡 4. 熔断、限流 服务代理、API 网关底层、边缘代理
反向代理 Caddy(67k+) 1. 自动 HTTPS(默认启用 TLS) 2. 简单易用的配置 3. 插件化架构 4. 支持 HTTP/2、HTTP/3 静态资源服务、反向代理、简易 API 网关
分布式追踪 Jaeger(20.4k+) 1. 分布式链路追踪 2. 性能分析 3. 根因分析 4. 与 OpenTelemetry 兼容 微服务调用链监控、性能瓶颈定位、故障排查
服务注册发现 Consul(29k+) 1. 服务注册与发现 2. 分布式配置 3. 健康检查 4. 服务网格功能 服务自动发现、配置中心、分布式锁

go-zero 链路追踪中间件示例(TraceHandler)

go 复制代码
package main

import (
	"net/http"
	"github.com/zeromicro/go-zero/rest"
	"github.com/zeromicro/go-zero/rest/handler"
	"github.com/zeromicro/go-zero/core/trace"
)

func main() {
	// 初始化追踪器
	trace.SetGlobalTracer(trace.NewTracer(trace.TracerConf{
		ServiceName: "api-service",
		Endpoint:    "http://jaeger:14268/api/traces", // Jaeger 地址
	}))

	engine := rest.MustNewServer(rest.RestConf{
		Port: 8080,
	})
	defer engine.Stop()

	// 添加链路追踪中间件
	engine.Use(handler.TraceHandler)
	
	// 注册路由
	engine.AddRoute(rest.Route{
		Method:  http.MethodGet,
		Path:    "/api/data",
		Handler: dataHandler,
	})

	engine.Start()
}

func dataHandler(w http.ResponseWriter, r *http.Request) {
	w.Write([]byte("success"))
}

Kafka 消费示例(基于 confluent-kafka-go)

go 复制代码
package main

import (
	"fmt"
	"log"
	"github.com/confluentinc/confluent-kafka-go/kafka"
)

func main() {
	// 初始化消费者
	c, err := kafka.NewConsumer(&kafka.ConfigMap{
		"bootstrap.servers": "localhost:9092",
		"group.id":          "my-group",
		"auto.offset.reset": "earliest",
	})
	if err != nil {
		log.Fatalf("无法创建消费者: %v", err)
	}
	defer c.Close()

	// 订阅主题
	err = c.SubscribeTopics([]string{"user-tracking"}, nil)
	if err != nil {
		log.Fatalf("无法订阅主题: %v", err)
	}

	// 消费消息
	for {
		msg, err := c.ReadMessage(-1)
		if err != nil {
			log.Printf("消费错误: %v", err)
			continue
		}
		fmt.Printf("收到消息: %s 主题: %s 分区: %d 偏移量: %d\n",
			string(msg.Value), msg.TopicPartition.Topic,
			msg.TopicPartition.Partition, msg.TopicPartition.Offset)
	}
}

Caddy 作为 API 网关的简单配置示例

复制代码
# Caddy 配置文件
:80 {
    # 将 /api/users 路由到用户服务
    route /api/users/* {
        reverse_proxy http://user-service:8080
    }
    
    # 将 /api/orders 路由到订单服务
    route /api/orders/* {
        reverse_proxy http://order-service:8081
    }
    
    # 全局配置:启用压缩
    encode gzip zstd
    
    # 简单的速率限制
    rate_limit * 100r/m  # 每分钟最多 100 个请求
}
相关推荐
呆萌很2 小时前
【GO】结构体构造函数练习题
golang
科技小花4 小时前
数据治理平台架构演进观察:AI原生设计如何重构企业数据管理范式
数据库·重构·架构·数据治理·ai-native·ai原生
一江寒逸4 小时前
零基础从入门到精通MySQL(中篇):进阶篇——吃透多表查询、事务核心与高级特性,搞定复杂业务SQL
数据库·sql·mysql
D4c-lovetrain4 小时前
linux个人心得22 (mysql)
数据库·mysql
阿里小阿希5 小时前
CentOS7 PostgreSQL 9.2 升级到 15 完整教程
数据库·postgresql
荒川之神5 小时前
Oracle 数据仓库雪花模型设计(完整实战方案)
数据库·数据仓库·oracle
做个文艺程序员5 小时前
MySQL安全加固十大硬核操作
数据库·mysql·安全
不吃香菜学java5 小时前
Redis简单应用
数据库·spring boot·tomcat·maven
一个天蝎座 白勺 程序猿5 小时前
Apache IoTDB(15):IoTDB查询写回(INTO子句)深度解析——从语法到实战的ETL全链路指南
数据库·apache·etl·iotdb
不知名的老吴6 小时前
Redis的延迟瓶颈:TCP栈开销无法避免
数据库·redis·缓存