feat(cache): adopt FusionCache for business caching
Some checks are pending
ci / release-gate (push) Waiting to run

This commit is contained in:
2026-08-05 09:30:48 +08:00
parent 1aa1ed4829
commit 603bc24c26
18 changed files with 354 additions and 194 deletions

View File

@@ -6,11 +6,11 @@
| 进程 | PostgreSQL | Redis | 说明 |
| --- | --- | --- | --- |
| `Tiku.Api` | 必需 | Development 可选Production 必需 | 提供 HTTP API、认证、授权和缓存 |
| `Tiku.Worker` | 必需 | Development 可选Production 必需 | 承载周期任务、任务队列、商业账务和授权缓存失效重试 |
| `Tiku.DbMigrator` | 必需 | 不需要 | 执行 Migration、内置目录 seed 和管理员引导 |
| `Tiku.Api` | 必需 | Development 可选Production 必需 | 提供 HTTP API、认证、授权、FusionCache L1/L2 和 Output Cache |
| `Tiku.Worker` | 必需 | Development 可选Production 必需 | 承载周期任务、业务缓存 Backplane 和授权缓存失效重试 |
| `Tiku.DbMigrator` | 必需 | 不需要 | 执行 Migration、内置目录 seed 和管理员引导FusionCache 仅使用本地 L1 |
Development 未配置 Redis 时,安全服务使用进程内/数据库防线。Production 不允许 Redis 降级;后台任务在所有环境统一使用 PostgreSQL。
Development 未配置 Redis 时,业务 FusionCache 只使用进程内 L1安全服务使用进程内/数据库防线。Production 不允许 Redis 降级;后台任务在所有环境统一使用 PostgreSQL。
## 数据库
@@ -50,10 +50,14 @@ dotnet run --project Tiku.DbMigrator -- --bootstrap-platform-admin
连接串读取 `ConnectionStrings:Redis``REDIS_URL`。当前用途:
- 密码、短信发送和短信校验的安全窗口计数;
- 租户 Feature 分布式缓存
- `TikuBusiness` FusionCache 的租户目录、Feature 快照和运行时配置 L2
- FusionCache Backplane用于跨 API/Worker 节点驱逐业务 L1
- 可选的 Session、安全状态和版本化权限快照缓存
- Production 的 ASP.NET Core Output Cache。
Redis key 使用环境前缀;配置解析会强制 `AbortOnConnectFail=false`Redis 不是用户、Session、权限、套餐或用量的权威数据源。
业务缓存 key 和 Backplane channel 使用 `tiku:<environment>:business:v2` 前缀;配置解析会强制 `AbortOnConnectFail=false`。FusionCache 复用现有 `IConnectionMultiplexer`,不创建额外 Redis 连接。业务缓存禁用 fail-safe 与后台分布式写入Redis 异常时回退 PostgreSQLRedis 不是用户、Session、权限、套餐或用量的权威数据源。
`TikuBusiness` 的 TTL 和安全边界见[认证、授权与租户隔离](architecture/security-and-tenancy.md#fusioncache-业务缓存)。FusionCache、授权缓存与 Output Cache 是三套不同语义:业务读模型使用 FusionCache安全状态保留版本化专用实现HTTP 响应继续由 ASP.NET Core Output Cache 管理。
授权缓存由 `Security:AuthorizationCache` 配置,默认 `Mode``Disabled`。切换为 `Shadow``Active` 前,应先确认 API 与 Worker 使用同一 Redis 和 PostgreSQL并观察 `Tiku.Security.AuthorizationCache` 的 mismatch、fallback 与 Redis 延迟指标。回滚只需切回 `Disabled`,不应回退授权版本或失效事件相关数据库结构。详细故障语义见[认证、授权与租户隔离](architecture/security-and-tenancy.md#redis-授权缓存模式)。
@@ -191,7 +195,7 @@ Worker 使用 ClamAV `INSTREAM` 协议,不在本地落盘待扫描对象。启
- `GET /api/platform/operations/health`:需要 `platform:operations:view`,返回 PostgreSQL、Redis、Worker heartbeat、ClamAV 和对象存储配置状态。
- `GET /api/platform/operations/workers`:查询 Worker 心跳、周期循环和 stale 状态。
- `GET /api/platform/operations/job-metrics`:查询队列状态、最老 Pending 任务与过期租约。
- 设置 `OpenTelemetry:OtlpEndpoint` 后导出 ASP.NET Core、HTTP client数据库观测数据
- 设置 `OpenTelemetry:OtlpEndpoint` 后导出 ASP.NET Core、HTTP client数据库和 FusionCache 的 hit/miss、L1/L2、工厂、Backplane 指标与 trace
- Serilog 输出结构化请求日志;数据库性能拦截器记录慢查询指标。
Readiness 为绿色不等于认证授权、跨租户隔离或后台任务恢复演练已通过,发布仍需执行对应集成测试。