模板"/>
技术文档模板
1、确认需求:
- 用自己的话再给对方复述一遍
2、分析需求:
- 表面需求
- 内在需求
- 扩展需求
- 是否合理
3、分析资源:
- 人+资源+时间+依赖资源
4、边界:
- 功能性需求(数据收集、加工、存储、展示)
- 非功能性需求(易用性、可用性、性能、完整性、强一致性等)
5、技术选型-技术广度:
- 已有轮子
- 自己写轮子
6、概要设计:
- 架构图等
7、详细设计:
- 领域模型、UML图、数据库表结构等
8、接口基本设计:
- 接口的命名、请求参数、支持的协议。
- TPS、并发数、响应时长。
- 数据存储。DB选型、缓存选型。
- 是否需要依赖于第三方。
- 接口是否拆分。
- 接口是否需要幂等。
- 防刷。
- 接口限流、降级。
- 负载均衡器支持。
- 如何部署。
- 是否需要服务治理。
- 是否存在单点。
- 接口是否资源包、预加载还是内置。
- 是否需要本地缓存。
- 是否需要分布式缓存、缓存穿透怎么办。
- 是否需要白名单。
9、系统的可用性、可靠性、可扩展性、可维护性方面延伸:
- 接口设计原则:
- 必须符合Restful,统一返回格式,约定业务层错误编码,每个编码可以携带可选的错误信息。
- 可扩展。
- 必须有文档。
- 设计接口的时候就很常发现很多交互文档走不通,产品没有考虑到位,交互文档缺失,开发要主动推动,完善。
- 第三方服务接口数据能缓存就缓存。
- 第三方服务需要做降级。
- 客户端能处理的逻辑就不要给服务端处理,减少服务端压力。
- 资源预加载。
- 接口高性能:
- A:数据存储方面:我们会想数据库有没有分库、分表、有没有做主从,有没有读写分离、字段是否有加索引、是否存在慢sql,数据库引擎是否选用合适、是不是用了事务;其次我们会想到是不是引用了分布式缓存、缓存key大小是否合适,失效时间是否设置合理,会不会大量缓存穿透、有没有引入本地缓存。
- B:业务方面:是否有大量的计算、能否异步处理。是否需要引入线程池或者MQ来异步处理任务。有没有必要将接口进行垂直拆分和水平拆分、将接口粒度变小。
- C:其他方面:nginx层面做缓存、加机器、用ssd,资源放cdn,多机房部署、资源文件预加载。
- 接口高可用:
- A:消除单点。
- B:能做集群的全部做集群。譬如Redis集群、MySQL集群、Kafka集群、MongoDB副本集。
- C:能做读写分离的都做读写分离。
- D:异地多机房部署,接入GSLB。
- E:必须有限流、降级机制。
- F:监控。
更多推荐
技术文档模板
发布评论