文章目录
1 方案设计文档整体结构2 模块详解及示例2.1 方案背景2.1.1 名词释义2.1.2 背景说明
2.2 方案目标2.2.1 需求分析2.2.1.1 用户2.2.1.2 用例图
2.2.2 需求列表2.2.2.1 功能性需求列表2.2.2.2 非功能性需求列表
2.3 架构设计2.3.1 业务架构2.3.2 应用架构2.3.3 部署架构
2.3 详细设计2.3.1 业务全流程2.3.3 业务实体设计2.2.4 接口设计2.3.3 任务状态图2.3.3.1 同步任务状态图
2.3.4 业务核心子流程2.3.5 存储设计2.3.5.1 ER关系图2.3.5.2 任务表结构
2.3.6 接口设计
2.4 性能设计2.5 高可用设计2.5.1 模块高可用2.5.2 第三方系统依赖接口
2.6 系统资源评估
1 方案设计文档整体结构
一,现状:把项目的基本情况和背景都说清楚,让大家达成一个共识,才能进行后面的方案评审和讨论
1、名词释义(方案设计到的术语、缩略词说明,解释时不要引入新名词)
2、业务背景:业务(项目)的基本介绍
3、技术背景:现有技术积淀、架构描述、系统的整体容量(可选,新系统不需要)
二,方案目标:技术方案一切都是围绕需求来设计,需求清楚之后才能比较好的去评审你的方案
1、需求分析(如果有产品文档,直接从产品文档贴过来)
* 用户(角色、描述、预期)
* 用例图(需要与用户一一对应)
2、需求列表
* 功能性需求列表(从用户角度的需求,不能是开发视角)
* 非功能性需求列表(性能需求、可用性需求、系统可观测性需求、数据量级评估,非常重要,这部分是业务方隐含的需求,不会明确告诉你,考虑到这部分能够提前识别风险,并且代码具备更强的健壮性可扩展性等)
三,架构设计(从抽象到具体,越靠近部署架构,越接近实际物理结构)
1、业务架构(产品文档应该有,由产品提供,没有也得自己画)
* 业务架构是业务视角的有哪些功能模块,与实际开发结构无关
* 需要画出上下游业务功能模块,依赖的第三方功能模块、基础服务功能模块
* 需要用颜色区分,让别人一眼就能看出你的业务模块
* 维度是业务功能模块
2、应用架构
* 维度是微服务,一个微服务对应一个模块
* 数据流向是纵向流动,从前端UI——负载均衡——网关——微服务——基础设施
* 别人一看就知道,你这个服务由几个微服务组成
3、部署架构
* 与实际物理结构一致,数据流向接近物理结构,从UI——微服务——数据库
* 别人一看,就能知道实际是怎么部署的
四,方案详细设计
1、业务全流程
* 展现了业务的全流程,给一个全局视角的业务流程
2、业务实体结构
* 需要把业务上下游的实体一起画出来,让人看到整体的数据流向
* 注意,实体结构对应服务的实体抽象,与数据库表设计无关,不要冗杂数据库表的东西
3、任务状态图
* 重要实体类的状态流转
4、核心子流程
* 画核心流程的时序图,方便看清核心流程的细节
* 最好所有流程都采用一致的时序图,保持结构的一致性
5、存储设计
* ER关系图
* 数据库表设计
6、接口设计
* 可以贴上yapi接口文档,或者实际的接口设计
* 粒度需要到接口的入参、出参
五,性能设计(对应非功能性需求,一个非功能性需求对应一个章节)
六,高可用设计
1、模块高可用
* 接入层,多节点部署服务
* 服务间调用,超时控制与重试机制(熔断与降级)
* 公共组件,比如配置热更新
* 日志监控
* 发布与运维
* 基础设施
* 数据库高可用与灾备,MySQL 主从架构(主备模式),支持定时快照与手动快照恢复
* 缓存高可用,Redis 采用双副本部署模式(主从结构)
2、依赖第三方服务的哪些接口及对应的熔断降级策略
* 防止服务被第三方服务异常拉胯
* 第三方服务、依赖接口、接口类型、依赖类型、接口用途、降级熔断措施
七,系统资源预估(用到了哪些资源,k8s、mysql、redis等资源预算)
八,工作量评估(可选)
每个模块、每个接口的设计分别需要多长时间,一定要同时包括开发时间、联调时间、测试时间
2 模块详解及示例
这是一种自上而下的设计,需要从用户视角去看系统,从用户需求——>产品文档梳理——>功能设计——>代码开发,从业务架构进行下钻,进行更详细的设计,每一层级都基于上一层级所输出的内容,采用的是“结构化思维”
方案名称xxxxxxx方案作者xxxxx方案时间xxxxx
2.1 方案背景
把项目的基本情况和背景都说清楚,让大家达成一个共识,才能进行后面的方案评审和讨论
2.1.1 名词释义
方案设计到的术语、缩略词说明,解释时不要引入新名词
术语 / 缩略词说明xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
2.1.2 背景说明
当前业务痛点:
1、 2、 3、 4、
2.2 方案目标
2.2.1 需求分析
相关需求文档:
2.2.1.1 用户
如果有产品文档,直接从产品文档贴过来
角色描述预期xxxx负责人对xxxxx负责期望能对xxxxx进行管理xxxx管理员对xxxxx负责期望能对xxxxx进行管理xxxx普通用户对xxxxx负责期望能对xxxxx进行管理
2.2.1.2 用例图
需要与上面的用户一一对应
对于这个服务系统,用户有哪些功能需求,分析之后输出用例图这里的需求并非产品经理识别用户需求里面的用户需求,而是针对已有的产品文档输出开发的需求根据所有用户的用例图,可以从中抽象出功能模块示例:
2.2.2 需求列表
2.2.2.1 功能性需求列表
从用户角度的需求,不能是开发视角
需求分类需求项需求描述备注任务管理创建任务xxxxxxxx删除任务xxxxxxxx查询任务列表xxxxxxxx查询任务详情xxxxxxxx修改任务xxxxxxxx
2.2.2.2 非功能性需求列表
非常重要,这部分是业务方隐含的需求,不会明确告诉你,考虑到这部分能够提前识别风险,并且代码具备更强的健壮性可扩展性等
需求维度需求备注性能数据量级需要支持xxx级别可用性接口性能指标要求关键性接口交互需求要求接口耗时秒级以内返回系统SLA需求系统支持99.9%—99.99%的高可用性系统可观测性业务层需求任务进度可观测、系统日志、api接口监控
2.3 架构设计
从抽象到具体,越靠近部署架构,越接近实际物理结构
2.3.1 业务架构
从业务用户角度进行考虑,由哪些功能模块组成,https://zhuanlan.zhihu.com/p/342136194业务架构是业务视角的有哪些功能模块,与实际开发结构无关需要画出上下游业务功能模块,依赖的第三方功能模块、基础服务功能模块需要用颜色区分,让别人一眼就能看出你的业务模块维度是业务功能模块
例如:
2.3.2 应用架构
IT系统功能和技术实现,从开发的角度来考虑功能模块与服务之间的关系,UI层、网关接入层、应用层、基础设施层数据流向是纵向流动,从前端UI——负载均衡——网关——微服务——基础设施维度是微服务,一个微服务对应一个模块,体现了微服务之间的关系别人一看就知道,你这个服务由几个微服务组成
2.3.3 部署架构
服务之间如何进行部署,用户、网关、网络、防火墙、存储,从用户到存储的全部过程与实际物理结构一致,数据流向接近物理结构。别人一看,就能知道实际是怎么部署的
2.3 详细设计
2.3.1 业务全流程
2.3.3 业务实体设计
核心功能涉及有哪些关键的类,这些关键类,又有哪些关键属性,实际上是为了梳理出类与类之间的关系,对应了写代码的思路有了关键类,则可以为后续的存储设计,数据库表设计,进行参考英文书写,类名最好直接对应与最后的开发类名
参考文档:http://www.objie.com/article/613ab8af0763c30011fa8daf
2.2.4 接口设计
2.3.3 任务状态图
2.3.3.1 同步任务状态图
2.3.4 业务核心子流程
根据需求分析得出的用例图,找到用例图中的核心功能,输出时序图,有时候业务的流程会比较复杂,涉及到多种角色,这时就可以使用时序图来梳理这个业务逻辑。这样会使业务看起来非常清晰。
通过时序图理清几个服务之间的交互关系,每一步的流程交互,在重要的地方可以尽量详细,也就是详略得当,对着就可以进行开发。
绘制参考文章:
http://www.objie.com/article/6034b11a15c40100118fef6chttps://www.cnblogs.com/54chensongxia/p/13236965.html
2.3.5 存储设计
2.3.5.1 ER关系图
2.3.5.2 任务表结构
2.3.6 接口设计
接口设计:xxxxxxxxx
2.4 性能设计
1、 2、 3、
2.5 高可用设计
2.5.1 模块高可用
模块高可用设计目标技术实现接入层请求入口稳定、支持大流量、防止单点故障多节点部署接入服务服务间调用超时控制与重试机制apisix配置请求超时时间,业务层添加重试机制(设置次数)公共组件配置热更新使用配置中心(Apollo)统一管理配置信息日志与监控收集日志,快速定位问题指标监控,方便排查问题发布与运维快速部署、弹性伸缩、自动恢复k8s滚动更新,一键回滚基础设施(存储)数据库高可用与灾备MySQL 主从架构(主备模式),支持定时快照与手动快照恢复缓存高可用Redis 采用双副本部署模式(主从结构)
2.5.2 第三方系统依赖接口
第三方系统接口名称接口方法依赖类型接口用途降级熔断措施xxx服务/api/v2/xxxxxGET强依赖xxxxx快速失败 ,返回“服务暂不可用"。
2.6 系统资源评估
资源规格备注使用评估实例podmysqlredis