架构设计
架构设计
启动链
main.go 将配置、静态资源和应用装配交给 go-web:环境变量 → 配置 → 日志 → 数据库 → Redis → 缓存 → 领域模块;服务阶段依次完成 JWT 检查、goose 迁移、初始管理员引导、Worker/调度器和 HTTP 服务。
消息流
flowchart LR
API["HMAC API"] --> Validate["鉴权、限流、配额、就绪校验"]
Validate --> DB[("数据库任务")]
DB --> Queue["Redis Stream / 定时集合"]
Queue --> Worker["Worker Pool"]
Worker --> Selector["优先级 + 平滑加权轮询"]
Selector --> Sender["服务商 Sender"]
Sender --> Rule["失败策略"]
Sender --> Callback["回执与上行短信"]
Callback --> Webhook["应用 Webhook"]
数据与职责
- 应用域:App ID、加密 App Secret、白名单、配额、限流与 Webhook。
- 模板域:系统模板表达业务变量,供应商模板表达各平台模板代码与变量。
- 通道域:绑定、优先级、权重、激活状态、签名映射和静态就绪校验。
- 投递域:任务、批次、Redis 队列、Worker、调度、重试和死信流。
- 回调域:下行回执、上行短信与应用 Webhook 日志。
高可用选择
通道先按较小的优先级选组,再在组内平滑加权。规则切换可排除当前账号;同一应用、通道和接收者在短窗口内记录上次账号。启用但失活或配置无效的绑定使通道降级;硬依赖缺失时阻塞。
一致性边界
任务先持久化再入 Redis,队列采用 at-least-once 语义,Worker 通过任务状态避免重复处理。业务调用方仍应以任务 ID做幂等关联,并正确处理回调重复、乱序和超时。
相关页面:项目介绍 · 失败策略 · Kubernetes