1. 背景

描述项目背景,说清楚整个项目的背景以及业务方向。

2. 目标

根据背景列出要实现的目标点:

  1. xxxx
  2. xxxxx

3. 业务分析

3.1 支持的能力

若项目已上线,本次只是迭代,要写清楚已有业务的能力,以及针对本次迭代目标,要具备什么能力(功能)
若是新项目,要写清楚针对本次迭代目标,要具备什么能力(功能)

3.2 行业调研

除非你创造了一个杀手级应用,否则你的轮子基本都是重复的。这里要写出业务领域内其他公司是如何实现的,若公司内有类似的实现,要写出公司内其他人是怎么实现的。
他人的实现存在什么优点,可以吸取?存在什么缺点,可以改进?不存在什么,我们进行支持。
列一个表格,写出支持什么能力:

能力1

能力2


有赞搜索引擎



腾讯搜索引擎


x


列一个表格,写出支持的能力用什么方案实现的:

能力1

能力2


有赞搜索引擎

ElasticSearch

冷热集群

腾讯搜索引擎

自研

x


4. 系统整体架构

4.1 现有架构

若项目已上线,给出之前项目的架构图,并说明:

  1. 模块、组件的边界
  2. 模块、组件的依赖
  3. 模块、组件的功能
  4. 核心业务流

若是新项目,本节可以去掉

4.2 技术选型

若项目已上线,本次需要更换框架、存储、中间件等,需要增加本节
若项目未上线,需要增加本节
以表格的形式列出3种选型

方案

易用性

可靠性

性能

扩展性

监控

MySQL

标准SQL、社区资料多

ACID事务、主从、MGR

4c8g TPS =xxx、QPS=xxx

主从复制,读从写主

zabbix

TiDB

标准SQL,社区资料多

ACID事务、分布式

4c8g TPS=xxx、QPS=xxx

分布式

grafana


并根据自己的业务场景针对三种不同技术选型,给出最终的选型结果

4.2 架构变更

若项目已上线,本次需要对整体架构进行变更,需要增加本节,对架构图中变更的模块用颜色特殊标记,并给出文字说明
若项目未上线,需要增加本节

5. 详细设计

5.1 模块1

包括不限于流程图、ER图、类图
列出设计到的数据结构(数据库表、ES索引、MQ报文等)
对核心业务流程增加伪代码并进行说明

5.2 模块2

6. 存储设计

列出数据库表、ES索引等存储建表语句
若有磁盘IO,列出目录结构

7.灰度方案

若需要进行灰度,给出灰度范围

8.降级方案

表格列出降级范围和方案:

模块

降级类型

是否有损

备注

模块1

自动降级


说明降级后哪些功能不可用

模块2

手动降级


说明降级后哪些功能不可用,手动降级方法

模块3

自动降级


说明降级后哪些功能不可用,对什么产生的损害,是否需要修复,如何修复


9. 异常处理

表格列出异常情况和处理方案

模块

异常情况

处理方案

模块1

异常情况1

修改配置中心开关xxx,降低数据库压力

10. 容量评估

10.1 容量预估

对用到的存储进行评估,列出表格

模块

使用到的存储

上线一周增长

上线一月增长

上线半年增长

上线一年增长

模块1

MySQL表xxx

<1000行 <2G

<2000行 <4G

<50000行 <20G

<1000000行 <50G


10.2 流量预估

对可能存在流量徒增的接口进行评估,列出表格

模块

接口

上线一周增长

上线一月增长

上线半年增长

上线一年增长

模块1

接口1

<1000QPS

<2000QPS

<5000QPS

<10000QPS


11. 监控报警

表格列出监控项,说明正常值、阈值

模块

功能

正常

阈值

模块1

创建订单接口

100TPS

500TPS


12. 其他

12.1 改造点影响评估

若项目已上线,本次进行改造迭代,评估影响点:

  1. 用户体验影响
  2. 底层数据影响
  3. 集群分批发版时,新老代码影响

12.2 测试方案

写出改造点,重点需要测试什么,测试依赖有什么,是否需要压力测试、Mock大批量数据测试

12.3 上线方案

  1. 需要修改什么配置

应用

配置项

配置值

服务A

order.mq.filter

true


  1. 数据库SQL语句
  2. MQ创建Topic、消费组
  3. ES模板
  4. 各模块、组件部署依赖关系
  5. 应用包版本升级

12.4 方案评审记录

评审时间

评审人

评审意见

备注

2021.01.01 11:30

小明

xxx模块业务流程图需要细化

12.5 参考资料