如何撰写好技术方案设计-真实案例干货分享

字节银月引
• 阅读 7460

一、 前言

作为一个技术开发者,特别是高级、资深、架构师等,往往会遇到根据需求撰写技术方案。那么如何撰写一篇好的技术方案设计,我们今天就来聊一聊这个话题。

二、 技术方案是否有必要

答案是肯定的。
我见过太多由于前期规划不到位(甚至是没有技术方案设计,开个技术讨论会口头沟通一下,就直接评工期开干的),这其中不乏很重要,工期很长的项目。而最后呢,到联调阶段各组串不起来,更可笑的是,产品和产品同学之间都没沟通清楚。导致最终很被动,到处挖坑补洞,而且又花费了更多的时间和精力,甚至导致项目延期,后续扩张性不强等等问题。
所以我认为,技术方案是必不可少的一个环节。往往很多坑在这个阶段就可以避免的。
古人云:"磨刀不误砍柴工",技术方案就是磨刀的过程。

如何撰写好技术方案设计-真实案例干货分享

三、 如何写好技术方案

  1. 要贴合需求,满足需求是大方向。
  2. 可实施。要考虑当前条件下是否可落地,如:

    • 团队人员接受能力:技术选型的时候,要考虑团队成员接受能力,盲目引入新技术,可能造成不可预知的问题。
    • 时间成本: 一般来说Java 或者 PHP 后端项目(c语言项目可能会做一年甚至更长时间),3个月时间周期算是比较长的了,假如按照此方案,需要半年甚至更长时间,那可能也不切实际。
    • 资源成本: 例如,项目可能需要引入Redis,Mysql,ES, MongoDB 等基础资源,那公司是否能提供这些资源(服务器是要钱的)。 如果不能,在写技术方案时候,可能就需要考虑是否有替代方案。
  3. 应急处理&可靠性保障
    只要人能想到的问题,就一定会发生,不能有侥幸心理。
    所以要做好出现问题的应对策略,这里就必须做好如:

    • 灰度方案
    • 降级方案
    • 异常处理
    • 容量评估

四、技术方案模板

下面是我总结的技术方案设计模板,希望对大家所有帮助。

1、背景

目前的背景现状,简要说明以往业务所遇到的问题,给出本次项目迭代的原因,解决的技术痛点或业务痛点

2、目标

通过次方案要达到什么样的业务指标,例如,支撑多少QPS,性能相比现在提升多少倍,为后期水平扩展做铺垫

3、整体方案

1)架构图
2)流程图
3)时序图
4)调用链路图

4、存储设计

如Mysql表结构设计,缓存设计,ES存储设计等等,说明Schema、字段类型、默认值、描述信息等。

5、接口定义

列举出接口的结构,参数,返回值等

6、灰度方案

按什么方式灰度,如何做灰度方案,用表格的形式列出分几个阶段灰度,每个阶段大概时间多长。

7、降级方案

当出现问题如何降级操作,如何回滚。将风险降到最低程度。

8、关联系统(功能)影响

重点需要各组注意的地方,相关人员需要特别关注,一一确认到位

9、资源分配情况
  • 人力资源: 实现方案需要多少人力投入(开发人力,测试人力,运维人力)等。
  • 硬件资源: 实现上述方案,需要哪些物理机器资源,运维人员需提前准备。
10、预估工期及时间节点

列举出工期及关键时间节点,如,什么时候联调,什么时候提测,什么时候开始灰度上线,以及后续的迭代完善计划等。

五、温馨提示

我也给大家总结了我之前做系统重构写的技术方案设计文档-PDF版本(已脱敏),给大家总结了2套, 有需要的朋友可以公众号后台留言"方案"即可获取。

如何撰写好技术方案设计-真实案例干货分享

点赞
收藏
评论区
推荐文章
blmius blmius
4年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
Wesley13 Wesley13
4年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Stella981 Stella981
4年前
AssemblyScript 入门指南[每日前端夜话0xEB]
每日前端夜话0xEB每日前端夜话,陪你聊前端。每天晚上18:00准时推送。正文共:2459 字预计阅读时间:10分钟作者:DannyGuo翻译:疯狂的技术宅来源:logrocket!(https://oscimg.oschina.net/oscnet/b880277c594152a503
Stella981 Stella981
4年前
Node.js 12中的ES模块[每日前端夜话0x9E]
每日前端夜话0x9E每日前端夜话,陪你聊前端。每天晚上18:00准时推送。正文共:2552字预计阅读时间:10 分钟作者:BrianDeSousa翻译:疯狂的技术宅来源:logrocket!(https://oscimg.oschina.net/oscnet/2ccaf94cecd3
Wesley13 Wesley13
4年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
4年前
PHP创建多级树型结构
<!lang:php<?php$areaarray(array('id'1,'pid'0,'name''中国'),array('id'5,'pid'0,'name''美国'),array('id'2,'pid'1,'name''吉林'),array('id'4,'pid'2,'n
Stella981 Stella981
4年前
DOIS 2019 DevOps国际峰会北京站来袭~
DevOps国际峰会是国内唯一的国际性DevOps技术峰会,由OSCAR 联盟指导、DevOps时代社区与高效运维社区联合主办,共邀全球80余名顶级专家畅谈DevOps体系与方法、过程与实践、工具与技术。会议召开时间:2019070508:00至2019070618:00结束会议召开地点:北京主办单位:DevOps
Stella981 Stella981
4年前
Django组件——cookie与session
Django组件——cookie与session<fontcolor00bff一、会话跟踪技术</font<fontcolorff7f501、什么是会话跟踪技术</font先了解一下什么是会话。可以把
Python进阶者 Python进阶者
2年前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这