架构设计

架构设计

启动链

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