2. 系统架构概览:Go权限审计网关的整体架构图、核心模块、数据流向
在深入分析慢查询根因之前,必须先建立对系统全貌的共识。Go权限审计网关(以下简称“网关”)部署在业务集群与下游数据服务之间,承担统一的身份认证、权限校验、操作审计三大职责。本章从架构分层、核心模块、数据流向三个维度拆解系统,为后续的慢查询定位提供上下文。
2.1 整体架构分层
网关采用经典的四层架构:接入层、路由与中间件层、核心业务层、数据持久层。每一层职责清晰,层间通过 gRPC/HTTP 协议通信。
| 层级 | 职责 | 关键组件 |
|---|---|---|
| 接入层 | TLS 终止、连接管理、限流熔断 | Nginx / Envoy → gRPC-Gateway |
| 路由与中间件层 | 请求路由、认证鉴权、审计日志采集 | 路由分发器、认证中间件、审计中间件 |
| 核心业务层 | 权限模型解析、策略匹配、审计事件组装 | 策略引擎、审计事件处理器、缓存管理器 |
| 数据持久层 | 配置存储、审计日志持久化、缓存 | MySQL (主库)、Redis (缓存)、Kafka (审计管道) |
架构要点:网关本身不处理业务逻辑,只做“鉴权+审计”两个原子操作。所有慢查询问题都集中在核心业务层与数据持久层的交互上,尤其是 MySQL 查询与 Redis 缓存穿透。
2.2 核心模块详解
网关内部由 6 个核心模块组成,每个模块对应一个独立的 Go package,通过依赖注入组合运行。
- 认证模块 (authn):解析 JWT / OAuth2 Token,提取用户身份与租户信息。支持多租户隔离。
- 权限策略模块 (authz):加载 RBAC / ABAC 策略,根据请求资源路径、动作、上下文计算权限结果。策略数据从 MySQL 加载,常驻本地缓存。
- 审计事件模块 (audit):在请求通过鉴权后,异步组装审计事件(请求/响应摘要、时间戳、用户、资源、结果),写入 Kafka 管道。
- 缓存管理模块 (cache):封装 Redis 与本地 LRU 缓存,负责策略快照、用户会话、Token 黑名单的读写。缓存失效策略是慢查询的关键诱因之一。
- 路由分发模块 (router):根据请求 URL 与 method 匹配到对应的内部服务端点,支持动态路由刷新。
- 监控与指标模块 (metrics):采集每个请求的耗时、鉴权结果、缓存命中率、数据库慢查询次数,暴露 Prometheus 端点。
2.3 数据流向与关键路径
一次完整的请求经过网关的路径如下,其中步骤 4→5→6 是慢查询的高发区:
- 客户端请求到达接入层,TLS 握手后进入路由中间件。
- 认证中间件解析 Token,从 Redis 获取用户会话(缓存命中则跳过 DB)。
- 权限策略模块根据用户角色与资源路径,从本地缓存或 MySQL 加载策略,执行匹配。
- 鉴权通过后,审计模块将请求上下文写入 Kafka(异步,不阻塞主流程)。
- 路由分发模块将请求转发至后端业务服务。
- 后端响应返回后,审计模块补充响应状态码与耗时,最终提交审计事件。
慢查询高发路径:步骤 2 的 Redis 缓存未命中 → 回查 MySQL 用户表;步骤 3 的策略缓存过期 → 全量加载策略表;步骤 4 的 Kafka 生产端阻塞 → 导致审计事件堆积,最终影响主流程 goroutine 池。
2.4 系统架构 SVG 图
下图展示了网关的四层架构与核心模块之间的数据流向,箭头方向代表请求处理顺序:
2.5 核心模块依赖关系 SVG 图
下图聚焦于核心业务层内部 6 个模块之间的依赖与数据流,帮助理解慢查询如何在模块间传导:
2.6 关键数据流向总结
结合两张架构图,可以提炼出以下与慢查询直接相关的数据流特征:
- 同步路径:认证 → 策略匹配 → 路由转发,这条路径上的任何数据库或缓存操作都会直接增加请求延迟。
- 异步路径:审计事件 → Kafka → 日志存储,异步路径的阻塞不会直接拖慢请求,但会引发 goroutine 泄漏与内存飙升,间接导致 GC 压力增大,最终影响同步路径。
- 缓存穿透点:策略快照缓存(本地 LRU)与用户会话缓存(Redis)是两个最容易出现穿透的点。一旦缓存过期或未命中,网关会并发回查 MySQL,形成“缓存雪崩”效应。