# watson **Repository Path**: zhangwenlong321/watson ## Basic Information - **Project Name**: watson - **Description**: watson的代码存储,用户保存日常使用md文件。 *[必选,概要介绍一下全流程的架构设计,如果架构有变化就需要介绍架构的变化,包括 Role、Relation;不管架构是否有变化,都要介绍一下需求的全流程的实现逻辑(对应 4R 架构定义的 Rule)。更详细的信息可以直接贴链接。]* ## 项目描述 - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2022-05-26 - **Last Updated**: 2022-05-30 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 方案设计文档模板 (概要设计) ## 前言 *[可选,用于总体上描述本篇文档的内容和目的,一般包括项目名称(或者需求名称)、应用名称,目的一般都是“开发、测试、部署”]* [样例] 本文是扫码支付项目中会员域认证微服务的方案设计文档,用于指导认证微服务后续的开发、测试和部署。 ## 修订历史 *[可选,文档会因为各种原因导致修订,通过修订历史来记录变更情况]* [样例 实际 word 文档请用表格] ![img](https://static001.geekbang.org/infoq/1d/1d55a2bd814e60bcd512261e2e19cd69.png) ## 词汇表 *[可选,用于明确定义和说明一些英文缩写、术语等,请用表格来呈现,infoq 写作平台不支持表格,所以只能一个一个的列,实际 word 文档请用表格]* [样例] Reactor: 网络编程模式 Netty: 开源的网络编程框架 ## 1. 项目背景 *[必选,概要的介绍项目背景,一般可以从立项文档、会议纪要、架构设计文档中找到资料进行提炼,提炼的核心内容可以用 5W 模型(who、when、where、why、what)来写。更详细的信息可以直接贴需求文档、项目立项文档等链接]* [样例] 香港地铁公司(who)为了方便广大市民出行(why),准备在 2021 年(when)实现手机扫码乘车的功能(what),一期项目计划在 XX 线试点(where)。详细的项目背景信息请参考:[XXXXX项目立项文档](https://xie.infoq.cn/link?target=https%3A%2F%2Fwww.baidu.com%2F)。 ## 2. 总体设计 *[必选,概要介绍一下全流程的架构设计,如果架构有变化就需要介绍架构的变化,包括 Role、Relation;不管架构是否有变化,都要介绍一下需求的全流程的实现逻辑(对应 4R 架构定义的 Rule)。更详细的信息可以直接贴链接。]* [样例] 扫码支付的完整流程如下,详细请参考:[扫码支付架构设计文档]( ![img](https://static001.geekbang.org/infoq/c0/c07f4f71bf024d37a239f3de43dc4771.png) ## 3. 系统设计 系统设计就是指单个应用自己的设计。 ### 3.1 系统边界 *[必选,描述为了实现需求,自己负责的应用与外部哪些应用有关联(relation),这些关联可能是直接的接口访问、也可能是通过消息队列发送消息等方式,可以用架构设计中的“系统边界黑盒图”来展现边界和关联]* [样例] 订单中心本次项目开发依赖如下关联系统: ![img](https://static001.geekbang.org/infoq/fa/fa3c17a5453a4d3f6b87363545242e67.png) 接口中心:需要接口中心提供 XXX 接口。 会员中心:需要提供 XXX 接口给会员中心调用。 促销中心:订单中心发送 kafka 消息给促销中心,异步通知促销中心进行个性化推荐。 ……(以下省略,具体的依赖关系可以描述更详细一些) ### 3.2 接口设计 #### 3.2.1 会员中心交互接口 ##### 3.2.1.1 接口流程 *[必选,描述自己的系统内部接口的处理逻辑,一般用 UML 的 sequence diagram 展示,用文字描述处理步骤的具体处理逻辑。]* ##### 3.2.1.2 接口输入 *[必选,用表格的形式描述输入参数和要求]* ![img](https://static001.geekbang.org/infoq/7c/7c84ee3d631441d2827b23c28c2dbd57.png) ##### 3.2.1.3 接口输出 *[必选,用表格的形式描述返回数据,重点是错误码,需要一一列举,并且说明含义]* ##### 3.2.1.4 关键设计 *[可选,如果接口处理流程中有一些关键的设计,例如全局幂等、限流、算法、兼容旧接口、熔断等,需要在这里特别描述,注意不要把关键设计放到接口流程里面讲,因为那样会导致不同的关注点混杂在一起,不方便阅读和理解]* ##### 3.2.1.5 接口要求 *[必选,估算接口的性能要求、响应时间要求、请求量等]* ##### 3.2.1.6 接口依赖 *[必选,用表格形式列出接口处理流程中依赖的其它系统的接口、前置条件等。]* #### 3.2.2 促销中心交互接口 ……(略) ### 3.3 逻辑设计 *[必选,逻辑设计其实就是指导如何写代码的,如果是 Java 这种面向对象设计,那就是类设计;如果用了 DDD 之类的方法,那就是领域对象设计;如果是 golang 这种,那就是 goroutine 和 channel 这种设计。* *注意这里不是写伪代码,而是写代码的设计思路。* *为什么要单独拿出逻辑设计来写,而不是放在接口设计里面写呢?因为逻辑设计是给很多接口用的,不能放在某个接口里面写。]* ### 3.4 存储设计 *[可选,描述存储系统的数据结构如何设计,例如 MySQL 的表设计、Redis 的 key 设计,Elasticsearch 的 index 设计等。* *为什么要单独将存储设计独立出来,而不是放在接口设计里面呢?原因和“逻辑设计”是一样的。]* ### 3.5 其它设计 *[可选,包括特殊的网络设计、安全设计、证书设计、工具设计等。]* ## 4. 部署设计 ### 4.1 部署流程 *[可选,部署的方式和步骤,方式包括金丝雀发布、灰度发布、蓝绿发布等,步骤包括准备工作、执行步骤、验证操作等,如果公司的基建比较完善,可以做到自动化,那么这部分可以简单描述。]* #### 4.1.1 准备工作 #### 4.1.2 执行步骤 #### 4.1.3 部署验证 ### 4.2 回滚流程 #### 4.2.1 回滚标准 *[可选,描述在什么情况下要进行回滚]* #### 4.2.2 回滚操作 #### 4.2.3 回滚验证 ## 5. 风险评估 *[可选,常见的风险有:* *技术风险,例如引入了某个新技术,还不熟悉;* *项目风险:人员不熟悉,人员变动大;* *外部风险:政策风险、业务变动、外部配合进度等。]*