系分模板
一定要记得保留数字标题前缀,这样可以在目录里恰当地理解结构深度。
图例
红色代表变更/新增功能
蓝色/黑色代表原有功能
1、需求分析
1.1 原始需求
1.2 需求背景
1.3 需求收益
1.4 术语解释
名称 | 解释 |
---|---|
例子 | 例子 |
1.5 流程分析
1.6 用例分析
1.6.1 业务用例分析
1.6.2 系统用例分析
2 功能性设计
2.1 交互设计
2.2 流程变动
2.3 领域模型变更
要有枚举变更、领域名词变更
2.4 数据模型变更
2.5 状态机变更
2.6 关键时序
对 sla 的需求是什么?写在时序的 Note 里。
2.7 接口变更
参考:
注意 api 的风格、可扩展性、场景的隔离。
- List
- Get
- Create
- Update
- Delete
接口要素 | 接口要素值 | 语义说明 |
---|---|---|
path | /api/v1/account_settings/reclaim_rules | |
http method | PUT | |
query params | ||
request body | ||
custom request headers | ||
custom response headers | ||
response body |
3 非功能性设计
3.1 风险点评估
3.1.1 高可用风险
3.1.1.1 新增组件/依赖
依赖服务 | 强弱依赖 | 风险点 | 稳定性保障 |
---|---|---|---|
appkey | 弱依赖 | 接口响应时间超出配给时间,导致用户 xx 环节 xx 接口响应超时。 | 发现手段:设置 rpc 超时,依赖超时告警。依赖服务保护平台切面的告警(注意监控、注意中断机制)。依赖监控 上报的异常。是否依赖于中间件超时/重试,是否使用服务保护平台超时/重试。恢复手段:通过降级来绕开对某个 appkey 的依赖。是否依赖于中间件降级,还是使用服务保护平台降级?冗余措施:是否有请求落库持久化,支持异步化/重试,是否支持内存级重试。 |
稳定性保障的子表格
关联对上对上接口 | 对上 sla | 依赖接口名称 | 依赖 qps | 依赖 sla |
---|---|---|---|---|
服务名.方法名 | 目标 40ms tp9999 86 ms avg26ms 对上的 qps 最好能够通过监控看到分钟级数据,对平均值和峰值有所认知 需要考虑是不是上线就带有熔断和限流降级能力 |
服务名.方法名 | 500 | tp9999 10ms 能否在拆解中达到依赖目标? |
3.1.2 资损风险
风险点 | 发现手段 | 应对措施 |
---|---|---|
交易型风险:交易失败?错漏重 | ||
营销型风险:错漏重?如何核销? |
3.2 上线计划
3.2.1 代码变更
发布顺序
- 服务 appkey1
- 服务 appkey2
- 前端服务 xxx
3.2.2 配置变更
强弱依赖的区别在于,是否核心用例、核心事务的核心组成部分。
要上线后才能变更的配置一定要和上线前就能变更的配置区分出来。
强依赖梳理
变更项 | 变更内容 |
---|---|
发 jar | 确认版本号 发布环境 snapshot/release 谁来发布 |
灰度开关 | 有没有暗部署设计 全局开关还是局部开关 是不是基于请求因子灰度的 要注意设计灰度时间和事件顺序 |
rpc 服务鉴权 | 四个环境的子表格,注意变更点要全部列出:包含服务、接口和是否打开鉴权。 |
动态配置服务 | 要注意运用好审批功能。 四个环境的子表格,注意变更点要全部列出: key 和 value。 |
静态properties/yaml新属性 | 四个环境的子表格,注意变更点要全部列出: key 和 value。 |
分布式任务框架 | 四个环境的子表格,注意变更点要全部列出:分布式 任务名称、 确认执行时间(模式、每次执行时间)、告警模板 |
mq | 四个环境的子表格,注意变更点要全部列出:集群、topic(partition 数、是否延时、死信、有没有负载均衡特殊配置)、消费者(并行消费数、是否延时消费、死信配置、消费异常处理策略) |
分布式缓存 | 四个环境的子表格,注意变更点要全部列出:集群、category、超时时间、命名模板、Value 类型(如有强类型中间件、注意 String 和数值类型的区别)、容量(大规模缓存-如大规模模型的缓存需要专门考虑) |
Tair | 四个环境的子表格,注意变更点要全部列出:area、value、qps、ttl、容量、value 类型 |
Rds,加 ddl,加新索引 | 另见Sql SOP |
服务保护平台 | 配置 key、线程池配置(coreSize、maxSize、maxQueueSize)、熔断规则(异常、超时配置)、重试规则(异常、超时配置) |
服务网关 | 协议类型、URL、api名、appkey、服务名、方法名、TTL等,是否已验证,是否已灰度 |
OpenResty | 四个环境的子表格,注意变更点要全部列出:域名、映射规则 |
分布式事务引擎 | 四个环境的子表格,注意变更点要全部列出:事务类型、domain、callbackMethod、配置 |
KMS | 四个环境的子表格,注意变更点要全部列出: key 和 value |
分布式序列号服务 | 四个环境的子表格,注意变更点要全部列出: key 和其他配置 |
业务团队基础数据配置 | 线上线下元数据配置 |
触达服务的分环境配置 | 线上线下消息配置 |
弱依赖变更
变更项 | 变更内容 |
---|---|
其他服务的标识 | 其他服务的配置 |
SqlSOP
- 正向 Sql:
- 是否涉及状态、时间、业务主键?
- 索引是否唯一?是否有联合索引?
- 物理主键是自动生成还是外部生成-自动生成要考虑全局不唯一,以后迁移到 newSql 或者 NoSQL 会产生冲突。
- 业务主键是否全局唯一?
- 是否有扩展字段,扩展字段的表达空间有多大?
- 编号类的列长度是否足够?
- 需要考虑单位的列单位是什么?金额类的列精度是否足够?我们是否能够表达某类货币的最小结算单位。
- 基于时间的列是否需要考虑时区问题?是否可空?缺省值是不是 1970-01-01 00:00:00,如果不是可能导致 Java mapping为 null。
- mapper 是否总能正确地使用索引?要做 Java 和 Sql 的双校验,通常 Sql 先行,Java 代码后之。
- 是否可空和缺省值是否能够脱离 Java 代码工作?如果可脱离小心 Java mapping 为 null。
- insert 语句遇到异常怎么办,涉及范围多大,是否引起大事务?
- select 语句是否涉及分页,最好每页不要超过 1000 条记录。
- update/delete 语句的扫描范围多大,是否引起大事务?慎用负向和穷举条件。
- 归档类操作不能破坏业务完整性,破坏幂等性,破坏 consistency。如果有可能出问题,一定要想办法把订正数据和业务热数据错开。
- 新加外键列,一定要带有索引。
- 慎用 now()-current_sys_date 更糟糕。
- 是否有操作时间,是否有操作人。
- 逆向 Sql:
- 操作时间到底要不要还原?
- 使用新的操作时间可以将变化同步到数仓。
- 使用原操作时间可以将数据完全还原。
3.2.3 灰度方案
灰度过程
要不要分接口灰度、分业务灰度、分环境灰度?
要不要考虑单元化分组,考虑 A/B 互备分组?
沿用普通灰度过程,分若干组,逐步达到全量。
观察正常指标:
- 上游流量监控
- 下游流量监控
- 业务大盘监控。
观察异常指标:观察 error 指标(error log 和 error metric,log4j2.xml 的 root level 是否能够包含全部的 appender 和全部的 error level?)。
验收方案:
- 谁来验收?
- 多久时间后验收?
- 上线要看多久?发布后至少看一天
沿用普通灰度过程,分若干组,逐步达到全量:
- 分三个分组。
- 非高峰期发布。
- 发布第一分组观察 10 分钟,观察:业务大盘、错误监控 problem、其他核对平台处理结果、第一分组机器日志
- 无问题继续发布剩余分组,观察 10 分钟再发布下一分组。
验收者:
- 多方验收:产品、qa 和其他系统工程师,输出结果的验收标准。
- 发布一天后观察剩余数据:
- 业务大盘
- 错误监控 problem
灰度流量设计(要不要压测,要不要灰度开关,要不要调节流量?)
暂时不需要打开灰度开关
3.2.4 监控方案
复用老监控项
- 异常指标监控(是否复用监控的兜底异常):
- rpc 调用失败数的绝对值大于阈值告警
- sql transaction 失败数的绝对值大于阈值告警
- rpc 的成功率小于阈值告警
- sql 的成功率小于阈值告警
- rpc 提供服务失败数的绝对值大于阈值告警
- rpc 提供服务成功率小于阈值告警
业务指标监控:
- 业务核心大盘
- 基础指标大盘一,业务监控大盘一。
- 基础指标大盘一,向下监控大盘。
- 基础指标大盘二,向上监控大盘。
中间件系统指标监控:
- 服务系统指标监控:
- 操作系统性能指标监控:
新增监控项
- 异常指标监控(注意新增监控项一定要基于 exception 打印!在其他监控环境下需要使用专有的错误码。):
- 已在系统告警中排除以上异常。
- 业务指标监控:
- 新上业务必须有自己的 event 和 transaction 监控
- 中间件性能指标监控
- 服务指标性能监控
- 系统指标性能监控
- 客诉指标监控
监控大盘变更
无
监控时间
- 全天候
- 午高峰/晚高峰
- 白天
- 黑夜
核对方案
T+1
T+H
3.2.5 应急方案
回滚策略
回滚上一个包(哪一个包)
如何消除影响:应用全部回滚手段。回滚方案实际上是由发布方案决定的,金丝雀发布(rolling restart)、蓝绿部署和 AB testing。
禁用方案
- 使用服务治理平台自带的禁用方案
- 禁用节点,禁用上游,禁用服务端口
扩容方案
- 使用云方案扩容
- 基于监控的扩容和基于时间策略的扩容
熔断策略
- 使用rpc 框架自带的接口/服务熔断方案
- 超时熔断、基于异常差异化熔断
降级策略
- 降级 sop:包含降级点、降级顺序和恢复顺序
- 特定接口开启限流
4 项目计划
人效评估
功能 | 工时 |
---|---|
批量查询账号是否存在 | 1pd |
流程节点
流程节点 | 时间 |
---|---|
需求粗评 | |
需求细评 | |
技术评审 | |
测试评审 | |
提测 | |
st 测试 | |
发布 |
附录
研发侧自测用例
此处出现一思维导图
All articles on this blog are licensed under CC BY-NC-SA 4.0 unless otherwise stated.