chore: track docs/readme updates and remove web dist from git
This commit is contained in:
4
doc/iam.md
Normal file
4
doc/iam.md
Normal file
@@ -0,0 +1,4 @@
|
||||
# 数据流
|
||||
1.前端开始注册,关键信息(user,passwd)传入后端接口,执行注册流程(此处注册后不自动登录),密码通过哈希后存数据库(不可逆存储)
|
||||
2.前端登录,关键信息(user,passwd)传入后端接口,后端校验,成功后生成refresh token和access token,将accesstoken对应的session存入redis而不存token,校验由拿到token中获取的sid匹配,refresh token哈希后连带session的其他信息存入数据库,也可以存入redis进行加速读取,并将二者返回给前端,前端收到后,将access token存入localstroage或内存(防止xss), refresh token存入httponly cookie,使用时代credential: include
|
||||
3.业务使用,每次业务http请求前先检查access token的过期时间,如果少于1-5分钟触发刷新token,携带refreshtoken向后端发送请求进行更换token,否则则直接进行业务,若在后端业务开始鉴权时返回401,则前端也要重试refresh,此处refresh的时候可以同时更新refresh token和accesstoken,并且作废旧token,如果refresh token过期,即前端响应退出登录(此处可以模拟7天免登录),此处重试仅一次即可,多个同token refresh请求仅允许一个执行
|
||||
36
doc/notify.md
Normal file
36
doc/notify.md
Normal file
@@ -0,0 +1,36 @@
|
||||
# 数据流
|
||||
业务触发
|
||||
业务系统(如任务到期、任务创建、状态变更)先产生日志化业务事件。
|
||||
事件带基础字段:event_id、event_type、user_id、occurred_at、payload。
|
||||
|
||||
通知规则判断
|
||||
规则引擎判断这条事件是否需要通知、通知谁、用什么模板。
|
||||
同时做用户偏好过滤(是否订阅、免打扰时段、语言、时区)。
|
||||
|
||||
调度器编排
|
||||
立即通知:直接进入投递流程。
|
||||
定时通知:调度器按 cron/延时规则在目标时间生成通知任务。
|
||||
这一层负责时区换算与批量窗口控制(避免瞬时洪峰)。
|
||||
|
||||
写入 MQ
|
||||
通知任务由生产者写入 MQ(如 notification.jobs)。
|
||||
任务包含:job_id、channel=email、to、template_id、params、trace_id、retry_count 等。
|
||||
|
||||
消费者处理
|
||||
Worker 从 MQ 拉取任务,先做幂等检查(idempotency_key)。
|
||||
如果判定“已发送过”,直接 ACK 丢弃重复任务。
|
||||
否则进入渠道网关(Email Adapter)。
|
||||
|
||||
渠道网关发送(Email)
|
||||
网关将模板渲染后的邮件通过 SMTP/邮件服务商发出。
|
||||
返回成功或失败结果,并带错误码。
|
||||
|
||||
可靠性机制
|
||||
成功:记录 sent 状态并 ACK MQ。
|
||||
可重试失败(超时、限流、临时网络故障):写入重试队列,按指数退避再次投递。
|
||||
不可重试失败(地址非法、模板错误)或超最大重试:进入 DLQ 死信队列,等待人工/自动补偿。
|
||||
|
||||
状态回写与观测
|
||||
每次处理都会回写通知状态(pending/sent/failed/dead)到存储层。
|
||||
同时上报指标和日志:送达率、重试次数、端到端延迟、失败原因分布。
|
||||
告警系统基于阈值触发报警(如失败率突增、队列堆积)。
|
||||
Reference in New Issue
Block a user