# BeeX 性能监控与缓存优化

更新日期:2026-07-17

定位:这是**持续的工程**,不是一次性任务。本文记录已在代码中核实的能力、待核实的运行状态和后续路线;实际线上状态以 ARMS、CloudMonitor、RDS、Redis、AI Ops Worker 和管理后台为准。


## 一、监控

**已在代码中核实**

- ✅ 业务积压告警:`seahub.monitor`(推送积压 / WA 失败 / 支付 webhook / 佣金待发…)→ 飞书

- ✅ 日志进 SLS(已按环境分 project:`beex-{env}-app-log`)

- ✅ actuator + `micrometer-registry-prometheus` 已接入,`health`、`metrics`、`prometheus` 端点已暴露

- ✅ `OpsMonitorService` 可通过 `SEAHUB_MONITOR_ENABLED=true` 开启业务指标与积压监控

- ✅ AI Ops Worker 提供 `/health`、Git 监控状态与服务自检能力

**需在各环境核实**

- Prometheus 是否被持续采集,以及看板、告警规则是否已配置

- ARMS Java Agent、RDS 慢查询/SQL 洞察、Redis 命中率告警是否在 id-test 和 id 环境都已开启

**要补(按性价比)**

1. **ARMS**(阿里云应用实时监控,Java agent,零改码)—— 接口 p95/p99 延迟、吞吐、错误率、**慢 SQL**、调用链、JVM。**最大缺口,先上**

2. RDS 开**慢查询日志 + SQL 洞察(CloudDBA)**—— 揪慢 SQL / 缺索引(瓶颈最先在这)

3. Redis 控制台看命中率 / 内存 / 连接

4. 业务监控生产开起来(`SEAHUB_MONITOR_ENABLED=true`),告警进飞书


## 二、缓存

**原则**

- cache-aside(查 Redis → miss → DB → 回填);TTL 加**随机抖动**防雪崩;热点用 `RedisLockRegistry` 加互斥防击穿;空值短缓存防穿透

- **写触发失效**:admin 改配置 → evict 对应 key;或靠短 TTL 兜底

- 可缓存响应设 `Cache-Control` 让 **CDN 边缘**也缓存

- 只缓存:读重、跨用户共享、可短暂陈旧;**用户私有 / 钱 / 实时不缓存**

**接口清单(按优先级)**

| 接口 | 类 | 缓存层 | TTL | key | 失效 | 级别 |
|---|---|---|---|---|---|---|
| `/s/{code}` `/h/{code}` 分享承接页 | AffiliateSharePageController / HoneyFeedPageController | CDN 边缘 + Redis | 分钟级 | shareCode | 内容/状态变 evict | **P0** |
| `/api/v1/honey-feed` | HoneyFeedController | Redis(+CDN) | 30–60s | 分页+国家 | admin 改 feed evict | **P0** |
| `/api/v1/products` | AffiliateProductController | Redis | 分钟级 | 商品id/列表参数 | 商品更新 evict | P1 |
| `/api/v1/campaigns/placements` | CampaignPlacementController | Redis | 分钟级 | 展示位+国家 | admin 改展示位 evict | P1 |
| `/api/v1/popular-brands` | PopularBrandController | Redis | ~10min | 国家 | admin 改品牌 evict | P1 |
| `/api/v1/app/h5-package` 版本检查 | AppH5PackageController | Redis | 30–60s | 国家+平台+env | 发新包 evict | P1 |
| 公共配置 `/api/v1/countries` `/api/v1/app/runtime-config` | 对应 controller | Redis/本地 | 分钟到小时级 | 配置类型+国家+平台 | 配置发布后 evict | P2 |

**不缓存:** 钱包、收益、奖励、提现、我的券、用户、登录、支付、订单跟踪。


## 三、ARMS 接入步骤

1. 阿里云控制台开通 **ARMS**(雅加达 ap-southeast-5),新建「Java 应用」,拿到 **LicenseKey** + agent 下载地址

2. ECS 上放好 agent(如 `/opt/arms/aliyun-java-agent.jar`)

3. deploy 脚本给 `java -jar` 加(**env 网关,缺 LicenseKey 即不挂,可一键关**):
   `-javaagent:/opt/arms/aliyun-java-agent.jar -Darms.licenseKey=$ARMS_LICENSE_KEY -Darms.appName=beex-{服务}-{env}`

4. 重启服务 → ARMS 看板出数据(接口/SQL/链路/JVM)

> agent 是无侵入的,不改业务代码;关掉只需去掉 JVM 参数。


## 四、分阶段路线图(逐步)

- **P0(先做,影响最大)**
    - ARMS 接入(全局可观测,先看清哪慢)
    - 分享承接页缓存(裂变最热、原来每请求现拼 HTML)
    - honey feed 缓存
    - RDS 慢查询日志开

- **P1**
    - products / placements / brands / h5-package 缓存
    - 加缓存命中率 + 失效监控

- **P2**
    - 配置类缓存
    - RDS 读写分离路由(已有多数据源骨架)
    - 按 ARMS 慢 SQL 报告补索引

- **长期**
    - 按 ARMS + 慢查询数据持续找热点,逐个缓存/优化
    - 统一缓存失效(admin 写 → evict),避免脏读


---

> 进度记录:路线图表示优先级,不代表所有项目都未开工。每次落地或调整后,需同步更新本文及运维看板。
