【工程經驗】技術文檔模板

1、確認需求:

  • 用自己的話再給對方複述一遍

2、分析需求:

  • 表面需求
  • 內在需求
  • 擴展需求
  • 是否合理

3、分析資源:

  • 人+資源+時間+依賴資源

4、邊界:

  • 功能性需求(數據收集、加工、存儲、展示)
  • 非功能性需求(易用性、可用性、性能、完整性、強一致性等)

5、技術選型-技術廣度:

  • 已有輪子
  • 自己寫輪子

6、概要設計:

  • 架構圖等

7、詳細設計:

  • 領域模型、UML圖、數據庫表結構等

8、接口基本設計:

  • 接口的命名、請求參數、支持的協議。
  • TPS、併發數、響應時長。
  • 數據存儲。DB選型、緩存選型。
  • 是否需要依賴於第三方。
  • 接口是否拆分。
  • 接口是否需要冪等。
  • 防刷。
  • 接口限流、降級。
  • 負載均衡器支持。
  • 如何部署。
  • 是否需要服務治理。
  • 是否存在單點。
  • 接口是否資源包、預加載還是內置。
  • 是否需要本地緩存。
  • 是否需要分佈式緩存、緩存穿透怎麼辦。
  • 是否需要白名單。

8、系統的可用性、可靠性、可擴展性、可維護性方面延伸:

  • 接口設計原則:
    • 必須符合Restful,統一返回格式,約定業務層錯誤編碼,每個編碼可以攜帶可選的錯誤信息。
    • 可擴展。
    • 必須有文檔。
    • 設計接口的時候就很常發現很多交互文檔走不通,產品沒有考慮到位,交互文檔缺失,開發要主動推動,完善。
    • 第三方服務接口數據能緩存就緩存。
    • 第三方服務需要做降級。
    • 客戶端能處理的邏輯就不要給服務端處理,減少服務端壓力。
    • 資源預加載。
    • 接口高性能:
      • A:數據存儲方面:我們會想數據庫有沒有分庫、分表、有沒有做主從,有沒有讀寫分離、字段是否有加索引、是否存在慢sql,數據庫引擎是否選用合適、是不是用了事務;其次我們會想到是不是引用了分佈式緩存、緩存key大小是否合適,失效時間是否設置合理,會不會大量緩存穿透、有沒有引入本地緩存。
      • B:業務方面:是否有大量的計算、能否異步處理。是否需要引入線程池或者MQ來異步處理任務。有沒有必要將接口進行垂直拆分和水平拆分、將接口粒度變小。
      • C:其他方面:nginx層面做緩存、加機器、用ssd,資源放cdn,多機房部署、資源文件預加載。
    • 接口高可用:
      • A:消除單點。
      • B:能做集羣的全部做集羣。譬如Redis集羣、MySQL集羣、Kafka集羣、MongoDB副本集。
      • C:能做讀寫分離的都做讀寫分離。
      • D:異地多機房部署,接入GSLB。
      • E:必須有限流、降級機制。
      • F:監控。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章