技术文档模板

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:监控。

你可能感兴趣的:(java)