后端方案设计文档结构模板可参考

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 名词释义

方案设计到的术语、缩略词说明,解释时不要引入新名词

术语 / 缩略词说明
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

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 业务核心子流程

根据需求分析得出的用例图,找到用例图中的核心功能,输出时序图,有时候业务的流程会比较复杂,涉及到多种角色,这时就可以使用时序图来梳理这个业务逻辑。这样会使业务看起来非常清晰。

  • 通过时序图理清几个服务之间的交互关系,每一步的流程交互,在重要的地方可以尽量详细,也就是详略得当,对着就可以进行开发。

绘制参考文章:

程序员必备画图技能之——时序图- 程序员自由之路- 博客园

在线绘图工具,ER模型设计-登录时序图.xml,uml序列图,uml时序图,visio时序图,visio序列图,序列图怎么画,时序图怎么画,系统时序图-

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 系统资源评估

资源规格备注使用评估
实例pod
mysql
redis
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值