产品:验证技术方案是否能够 match 上产品方案
测试:验证技术方案对测试方案是否有足够 & 准确的输入
同事 & leader:参与技术方案评审,验证技术方案的合理性
新人(不单单指新同学也指新接触这一块的同学):拿到技术方案可以很快对某一块的事情熟悉起来
什么样的技术方案是一个好的技术方案
我们都知道技术方案是指导具体开发工作的,可以分别从开发的事前、事中、事后来讨论这个问题。
事前
明确的目标:整个技术方案要达成什么目的
低沟通成本:产品测试能从技术方案上获取足够的输入,不需要反复找你确认
技术选型思考:为什么要这么做?和业内方案相比有什么好处和坏处,如何权衡的
事中
少调整:尽可能少的技术方案需要调整, 否则无法完成开发任务
事后
少补丁:尽可能少的 bug 或者遗漏
可扩展 & 可复用:相对简单的改动就能支持新增需求,类似场景可复用不需要重复开发
如何写好一篇好的技术方案
清晰的目标
页面交互:能提升多少的运营操作效率,多少 PV、UV 这种可量化的数字?
业务 SOP 调整:带来的业务价值是什么?是能降多少本还是提升多少时效?
数据订正:订正能解决什么问题?防止多少钱未结算?又或者是防止多少客诉?
性能优化:优化多少?20%、30% 还是 50%?
数据隔离:隔离的范围是什么,涉及多少张表,多少数据?可以减少当前的什么问题?减少多少?
各种小工具:没有小工具之前是什么样?有之后是什么样?可以带来什么好处?
研发效能提升:提升多少?有没有可以量化的指标?而不是为了做而做。
在众多的需求当中还有一些是我们要去辨别的伪需求——不是用户真正想要的需求,如用户想要将一个飞机改造成火箭,但是产品可能提过来的仅仅是把飞机的两个翅膀砍掉,那么砍掉翅膀就能变成火箭了吗?明显不能,所以这种需求一定要注意鉴别。
大纲图
图不用很细(比如加工比较复杂我们可以简单写**加工),但是要能看到全貌,具体的每个模块如果需要展开的,那么在对应的详细设计中体现即可,在这里我们关注的是整体;
接口如有归属不同的应用要标明;
数据存储介质不同要标明;
数据流转的箭头要清晰明确;
-
数据加工计算的输入和输出要体现,同时要体现加工的运行环境(比如到底是 odps 计算还是内存计算,内存计算的话是在那个应用)。
大纲图的逻辑示意参考
模型设计
对外依赖提前确认
外部 hsf 依赖:需要确认对应 hsf 接口的类、方法、version,以及二方包(也可使用泛化调用);
外部消息依赖:需要确认消息的 topic、数据格式;
分布式调度、缓存等中间件:当前应用是否接入过该中间件,未接入需要去到官网确认接入文档,接入的话需要确认是否可以复用接入逻辑。
内部前后模块依赖 & 层次结构
领域依赖(如交易依赖商品)
应用依赖(如 cntcp 应用依赖 cngfc 应用)
接口依赖(如滚存看板查询接口依赖于锁接口 & 渠道集接口)
一个模块里面应该有啥
1. 具体的接口定义
入参:
{
"area": "南美"
}
出参:
{
"date": "***"
}
方法名:CapacityService.queryPlan
入参:
{
"cnArea": "南美"
}
出参:
{
"date": "***"
}
技术方案 2 是更好的,为什么?测试、前端 、后续要接手该接口的人都能够一下子找到你的接口并清楚知道输入输出是什么。另外,1 和 2 的入参一个 area 一个 cnArea,那么到底哪个更对呢?这里由于系统中在用的都是 cnArea,固沿用 cnArea 是对的(一致性减小沟通成本)。
完整的类和方法名
入参字段如果系统中已有,那便沿用;如果没有,那么英文的描述需要准确(可同产品业务商榷)
出参字段要求同入参
2. 详细的时序图
step1. 入参校验
step2. 查询A表
step3. 对A标返回结果做校验
step4. 查询B表
······
技术方案 2:在 1 的基础上使用时序图表达出来。
数据加工的详细图(如有)——同样推荐用图的形式可以更直观
消息设计(如有),明确消息生产方、消费方、tps、数据结构
自测用例(推荐),比较重要的功能点构造一些自测用例
技术选型分析
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
安全生产
监控
对账
灰度方案
数据隔离
兼容性评估
发布流程
我们举一个例子。
监控目标:写清楚监控的是什么内容
监控点:如通过打印日志监控,那么日志打印在哪个类的哪个方法
监控触发:是通过 sunfire 采集触发还是其它,如果是 sunfire 采集最好能把监控项地址贴出来
监控订阅人:监控告警需要的订阅人
监控触发后的解决方法:如果发生异常该如何解决?如手工触发结算
对账目标:写清楚对账是为什么
对账方式:写清楚是怎么对账的(如通过 odps 天级定时任务,履行单上的关务资源 code 和日志表中关务 cp 回传报文的关务资源 code 对比要一致,不一致的形成某个数据集,通过锦衣卫-资损风险平台配置)
对账告警订阅人
对账异常之后的解决办法
多方前置准备
灰度切流开关设计
灰度切流节奏
异常应对
向前兼容性,包括但不限于:
接口的向前兼容:尤其是对外的接口
数据结构的向前兼容:如不能随意改变字段的存储类型和格式
如有租户隔离 & 预发线上隔离的情况需要考虑数据
发布计划
检查项列表
发布流量监控