技术方案模板

需求背景

对问题的分析、定义,现状是什么,有哪些问题。最好要有相关行业调研、数据分析,尽可能准确地量化现状、问题

  • 业务需求:要达到的业务功能,业务价值。有哪些指标可以衡量,现状是多少,指标如转化率(填单-下单、下单-支付、支付-出票等)、业务成功率(下单成功率、支付成功率、出票成功率等)、订单量、万订单客诉量等
    • 示例:搭售满足用户合并购买的诉求(搭售能力从无到有、订单从少到多)
    • 示例:限购优化提升下单成功率。现在下单成功率是xx%,其中限购引起的占xx%(下单成功率从低到高)
  • 技术需求:要提高的哪些质量属性(维护性、容量、性能、安全性、用户体验等)、研发效率。有哪些指标可以衡量,现状是多少,指标如RT、峰值QPS、DB放大倍数、代码重复度等
    • 示例:中台DB优化降低DB读写放大倍数,降低DB压力,提升系统容量。中台DB的放大倍数是xx%(DB放大倍数从高到低)
    • 示例:FDP具备小流量链路异常的发现能力、提升问题的定位效率(发现快、定位快)

需求目标

行业标准是什么,基于对现状问题的分析,要达到的目标是什么。现状->目标最好要有推演过程,依据符合逻辑的推演方法推演得出需求目标,尽可能准确地量化目标,设计业务/技术指标

  • 业务需求,目标及其推演在PRD中给出,RD在需求review时要关注
  • 技术需求,目标及其推演在技术方案中给出
    • 示例:依据各转化率、poi_uv、deal_uv、order_uv、预估的搭售率、预估上线的相关deal数等推演
    • 示例:依据中台各流量来源占比及本方案推演

方案调研【可选】

他山之石,可以攻玉,看看他人怎么做的,避免闭门造车

  • 同BG不同BU类似需求解决方案调研
  • 不同BG类似需求解决方案调研
  • 业界类似需求解决方案调研

方案选型【可选】

成本、收益、约束、团队协作模式

  • 成本
    • 软件质量损耗(产品质量:维护性、稳定性、性能、安全性等,使用质量:有效性、效率等,详见:ISO/IEC 25010)
    • 研发成本(多模块、跨组、跨部门)
    • 测试成本
    • 联调成本
    • 服务器成本
    • ……
  • 收益
    • 业务价值
    • 软件质量提升
    • ……
  • 约束
    • 时间
    • 合规性,法务风险
    • 质量基线
      • 维护性
      • 稳定性
      • 性能
      • 安全性
      • ……
  • 团队协作模式
  • ……

利益相关方【可选】

需求利益干系人,参见RACI模型

  • 谁负责:主R,技术主R,项目主R,整体把控项目,协调资源
  • 谁支持:参与具体任务,协助主R完成工作
  • 告知谁:上下游兄弟团队、数仓、运维、法务、产品等
  • ……

整体设计

整体交代架构,关键点设计、变化点、系统边界

  • 多视角:从不同的视角展现技术方案,相关的架构方法有TOGAF、ADMEMS等
  • 全方位:除了要考虑功能属性,还要充分考虑质量属性

概述

关键点设计与折中、项目边界影响范围、风险点

新增关键名词定义【可选】

业务架构图【可选】

  • 功能列表
  • 功能分解图
  • 用例图
  • 流程图
  • ……

应用架构图【可选】

  • 架构分层
  • 时序图
  • ……

数据架构图【可选】

  • 分库分表示意图
  • 数据流图
  • ER图(简)
  • ……

技术架构图【可选】

  • 部署方案
  • 灰度方案
  • 基础组件依赖关系
  • ……

详细设计

功能设计为主,质量设计为辅。对于质量属性的设计应贯穿整个详细设计

服务契约设计

HTTP、RPC接口

  • 协议设计,请求方式、请求地址、方法描述、查询参数(参数名、参数类型、含义、规则说明、是否必填、缺省值)、返回结果等
  • SLA,预估的RT、预估的QPS、预估的可用性
  • 安全设计,鉴权、传输安全等
  • 幂等设计,考虑需要同步处理的资源,如orderId,payId,refundId等
  • 流控设计,依据预估QPS、资源的耗占,对系统做过载保护
  • 性能设计,批量、异步、分页等
  • 兼容性设计:
    • 兼容:增加接口、增加参数的可选属性、修改参数的属性为可选、删除参数的属性
    • 不兼容:修改接口签名(接口名、参数类型、返回值类型)、删除接口、增加参数的必选属性、修改参数的属性为必选、修改参数的属性的顺序(thrift)
  • ….

外部依赖HTTP、RPC接口

  • 超时配置,依据约定的RT(SLA)合理设计超时时间
  • 补偿重试策略,依据约定的接口可用性(SLA)及业务的重要程度合理设计补偿重试策略
  • 熔断降级策略,依据业务的重要程度合理设计熔断降级策略
  • ……

消息

  • 监控报警设计
  • 预估的QPS
  • ……

模型设计【可选】

领域模型

  • 实体、聚合、值对象、领域服务等
  • 数据模型设计及约束规则
  • 类图

存储模型

  • ER图
  • SQL设计(建表语句、表更新语句)
  • SQL注入安全
  • SQL性能
  • 兼容性设计
    • 兼容:新写新读,旧写旧读
    • 不兼容:旧写新读、新写旧读
  • ….

测试方案设计

测试方案是对所有设计点的验证,包括功能性设计的验证和非功能性设计的验证

功能性测试用例

  • 测试用例种类
    • 新增功能测试用例
    • 需回归的老功能测试用例
    • 边界用例
    • ……
  • 验证点
    • 页面展示
    • 接口结果
    • 数据
    • ……

非功能性测试用例

  • 性能
  • 可用性
  • 数据一致性,边界case
  • 安全性
  • 兼容性
  • ……

任务拆解

  • 项目排期
    • 整体项目周期
    • 整体项目排期估时-甘特图
    • 本组排期估时
  • 详细任务拆解
    • 不同视角:业务用例、业务功能视角、模块视角
    • 任务项、责任人、deadline、优先级、进度状态等

上线计划【可选】

发布前:保证所有线上资源已经申请完毕,外部依赖已经上线完成,禁止使用snapshot包
发布中:注意发布顺序,发布窗口的兼容性
发布后:注意除了验证本次需求功能点外,还要尽可能对非功能点设计进行验证,对主流程的回归验收
注:技术方案review时,该项可先暂空

前置依赖

线上资源申请

  • MQ
  • DB
  • 数据库申请
  • 数据表申请、更新
  • cache
  • 机器
  • 发布项
  • NG变更

线上配置

  • RPC配置
  • properties配置
  • 热发配置(发布前)
  • AB-Test配置(发布前)
  • 监控配置
  • 报警配置
  • 鉴权配置

RELEASE包

发布顺序

  • 上游服务发布
  • 本组服务发布顺序
  • 下游服务周知

注:特别注意发布窗口的兼容,同一模块不同版本代码的兼容、不同模块的发布顺序兼容,因此考虑不周的casestudy数不胜数

回滚预案

  • 功能开关
  • 灰度流量配比
  • 常规回滚操作

线上验收

  • 主流程回归
  • 新增功能点验收
  • 热发配置(发布后)
  • AB-Test配置(发布后)
  • 用户侧验证
  • 数据验证
  • 非功能性设计点验收