【后端开发】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 小时前
基于 Service Worker 的图书馆资源缓存技术研究
缓存
come112342 小时前
Go 和云原生 的现状和发展前景
开发语言·云原生·golang
专家大圣2 小时前
Bililive-go+cpolar:跨平台直播录制的远程管理方案
开发语言·网络·后端·golang·内网穿透·设计工具
m0_619731193 小时前
linux配置数据库
linux·运维·数据库
重启的码农3 小时前
kv数据库-leveldb (16) 跨平台封装-环境 (Env)
数据库
COWORKSHOP4 小时前
华为芯片泄密案警示:用Curtain e-locker阻断内部数据泄露
运维·服务器·前端·数据库·安全·华为
青柠编程4 小时前
基于Spring Boot与SSM的中药实验管理系统架构设计
java·开发语言·数据库
塔中妖4 小时前
Spring Boot 启动时将数据库数据预加载到 Redis 缓存
数据库·spring boot·缓存
SelectDB技术团队4 小时前
Apache Doris 4.0 AI 能力揭秘(二):为企业级应用而生的 AI 函数设计与实践
数据库·人工智能·apache·olap·mcp