系统分析与设计的质量直接关系到项目需求落地的质量,这个过程也是倒逼开发者真正去弄清楚需求背景、技术细节、技术风险等,如果系统分析与设计搞得马马虎虎,那项目的最终质量就很难保障。

上图是笔者总结的系统分析与设计的脑图,罗列了需要注意的事项与结构化思考,下文将从需求分析、架构设计、领域驱动、风险管控等来分析如何做好系统分析与设计。

一、需求分析

需求分析是很多开发者容易忽视的一部分,切忌一拿到需求就埋头去干,不然很容易走进坑里而不自知,需求分析重点是要评估需求的合理性和风险:

  • 搞清楚为什么要做这个需求,以后可能往哪个方向发展
  • 业务指标是什么,如何衡量业务成果
  • 目前的需求链路设计是否合理,是否能实现业务目标,如果不合理要提供技术反馈意见
  • 需求可能会产生什么风险,比如舆情投诉风险、资损风险等等
  • 需求的业务价值是什么,价值高低如何以及业务优先、级紧急程度等,如果是低价值需求或者不合理需求,要考虑是否可以砍掉或者把开发资源暂时让位给其他更重要的需求。

二、架构设计

完成需求分析后,如果确认需求合理就要投入到相关技术链路的架构设计中了,架构设计涉及到的面很广,每一个点拿出来单独讲都会有很多东西,这时要结合具体需求来做裁剪,不必要面面俱到,突出重点即可。

脑图中列出的架构设计事项可以作为一个技术设计时的参考模板,尤其是大型系统的设计中都是必须要考虑清楚的地方。

1.数据链路设计

  • 选用什么样的数据库比较合适,MySQL or NOSQL,数据库的稳定性、可扩展性是否满足业务需求
  • 数据库与表结构设计要考虑将来数据量可能有多大,是否要分库分表,如果分库分表,涉及到多维度的数据查询又该如何处理。
  • 表结构的设计一定要细化到字段,字段类型、是否可空、字段枚举值等等都要想清楚,不然写代码时很可能因为一个字段就要返工。

2.高并发设计

  • 如果是交易链路的高并发,要考虑超卖问题与热点问题,做好订单库存的设计。
  • 系统上线前要评估后系统流量并做接口性能压测,要有系统限流设计,设置限流阈值
  • 如果因为高并发导致系统问题,比如第三方接口异常、超时,要考虑设计对应的数据兜底机制与业务降级机制,不能让用户感知到系统不可用。

3.缓存设计

  • 如果系统中用到了缓存,要考虑热点缓存、缓存击穿、缓存雪崩、缓存数据一致性等场景的处理方案
  • 缓存不可作为数据单点使用,如果缓存出现异常,要有降级措施,比如直接走数据库查询或者有数据兜底机制。

4.数据一致性设计

  • 如果涉及到多个数据源,要考虑采用什么样的分布式事务架构来保障数据的一致性,事务消息还是二阶段提交等等。
  • 要建立数据巡检机制,做数据核对,及时发现数据不一致的情况并报警处理
  • 要有必备的数据处理工具,当发现不一致时使用工具及时处理,不要直接上SQL来订正,风险很高。

5.可扩展性设计

  • 可扩展性设计要适度超前,不能闭门造车,过度设计,不然徒增系统复杂度。
  • 可扩展性设计最好是基于业务的发展需求来设计,不可自己去凭空设想一些可能的需求。
  • 可扩展性的基本思想是拆分,面向流程拆分、面向服务拆分、面向功能拆分
  • 可以结合设计模式,让代码更具备可扩展性
  • 系统能力复用也是可扩展性的体现,可重用性设计离不开对业务的抽象,要站在业务之上看问题,横向思考,这个对开发者要求比较高。
  • 表设计、命名、接口设计、功能实现等都要考虑是否可以给复用给其他场景来使用。

6.可维护性设计

  • 类、接口、字段等命名是否合理,是否可以做到见名知意,如果名字比较随意,那后来人维护代码的时候也比较难以理解,代码可读性一定要高。
  • 重视技术文档沉淀,文档是很好的技术沉淀与沟通工具,技术要详细明了,重点突出,这样其他人比较容易看懂相关的功能设计。
  • 架构设计也一定要尽量简单,设计得越复杂,将来维护起来越麻烦,能用一个数据库解决,就不要搞两个,能不分库分表就暂时先用单表,架构设计是一个不断演化的过程,切忌过度设计。

7.高可用设计

  • 高可用的本质是冗余
  • 监控报警要想清楚哪些业务场景需要做监控,监控的粒度是什么,使用什么样的监控报警平台等等
  • 开关切流设计,常见于新旧链路的切换等场景,开关设计的目的是应急回滚。
  • 兜底机制,如果系统出现异常,如何做业务兜底设计,比如CDN页面兜底等等
  • 灾备机制,数据库灾备、机房灾备、集群灾备等等

8.稳定性设计

  • 服务上线三板斧:可应急、可监控、可灰度,这三条是新服务发布时的硬性指标,在设计时一定要考虑到,以防万一上线时系统有问题引发不可弥补的损失。
  • 新服务上线前还要预估好流量大小,如果确定流量很大,必须配置相应的限流配置,并在上线前做相关系统性能的压测。
  • 压测也是确保服务稳定性的一个重要手段,通过压测来考察系统的性能和吞吐量,对于大流量系统,新服务切不可没有压测就直接发布上线。
  • 压测又可以分为单链路压测和全链路压测,像双11这种大流量场景,就需要多次的单链路压测和整个集团的全链路压测来衡量系统的稳定性。

9.架构设计原则

  • 基于已有资源设计适合当前情况的架构,不可盲目照抄所谓的BAT架构,要依据实际情况灵活决策技术方案,不可生搬硬套。
  • 大道至简,技术方案要追求把复杂的事情简单化,越是简单的架构越是方便维护,切不可追求架构的复杂性来显示个人的技术水准。
  • 好的架构是演化出来的 ,不可能一步到位,注意不要过度设计,不要瞎猜业务需求。

三、风险管控

技术方案设计一定要考虑这个产品链路可能存在的风险点,包括技术风险和业务风险。

  • 技术风险:比如新老链路的切换、接口性能超时不稳定、算法结果不符合预期等等
  • 业务风险:有可能新功能新设计会引发用户投诉,引起舆情,涉及到资金流的场景也可能是资损风险等等
  • 安全风险:写服务的黄赌毒内容过滤、读服务的接口防爬等

这三类型的风险结合具体需求要在设计文档中体现出来,并给出相应的解决方案,并把风险告知相关的业务方和产品经理。

风险评估是技术设计中容易被忽略的一环,但也是极其重要的,在一些金融业务场景,如果风险评估不到位,极有可能给公司带来重要资金损失,那最终自己可能也要凉凉了,不可不慎重。

四、领域驱动设计

从国内实际开发情况来看,真正去实践领域驱动的团队并不多,毕竟成本还是比较高的。但是领域驱动设计的思想要有,要有意识的运用领域驱动设计的思想去审视自己的系统设计方案。领域驱动设计是一个很好的方法论,值得学习借鉴,当然如果能实践自然更好了。

  • 领域模型:要画出系统的领域模型,这个过程可以帮你搞清楚系统各功能模块的边界与联系,以及各模块本身的设计细节。
  • 领域驱动的一个重要原则是把隐含的逻辑给显性化的表达出来
  • 通过领域驱动设计来做系统模块的分层设计

五、开发排期

  • 评估当前系统开发的可投入资源以及各个功能模块的开发人日,做成表格。
  • 如果涉及到上下游链路的开发配合,需要去协调其他开发者的投入资源
  • 确定测试资源,如果排期时间很紧迫,可以分模块交付与测试,做到开发与测试的并行
  • 把排期同步给产品与业务方,沟通达成对项目交付期限的预期
  • 对于排期要充分评估,不可盲目乐观,要留一定的冗余时间,不然一旦不能按期完成就非常被动了。
  • 拒绝开发周期倒排,99%的倒排都没有什么意义。

更多内容欢迎关注个人微信公众号:技术进阶之路,一起成长!
​​​​如何做好系统分析与设计系统分析与设计的质量直接关系到项目需求落地的质量https://mp.weixin.qq.com/s?__biz=MzI0MDQwOTc5NQ==&mid=2247483816&idx=1&sn=f7d0652bf862ca5300f5b439c3c47f00&chksm=e91a0c04de6d85123f288b4bf665e84dc2fdce8353fe1bbb02ae4817b2b38d315c38e58aee7e&scene=132#wechat_redirect

如何做好系统分析与设计相关推荐

  1. 用UML做好系统分析

    用UML做好系统分析 作者 邱郁惠 发布于 2008年6月19日 领域 运维 & 基础架构, 过程 & 实践, 语言 & 开发 主题 Java ,  UML ,  构建系统 使 ...

  2. [架构之路-177]-《软考-系统分析师》-17-嵌入式系统分析与设计 -2- 系统分析与设计、低功耗设计

    目录 1 7 . 4 嵌 入 式 系 统 开 发 17.4.1 开发平台 1 . 交叉开发环境 2 . 交叉编译环境 17. 2 开发流程 1. 过程模型 2 . 分析与设计方法 17.4.3 软硬件 ...

  3. 基于Python(Django)+MySQL实现(Web)大学生信用评价系统分析与设计【100010400】

    大学生信用评价系统分析与设计 第一章绪论 1.1 系统开发背景 随着中国社会蓬勃发展,社会不断地走向繁荣富强,经济活动也随之日益增长.在人民,毫无疑问在这些经济活动中扮演了重要的角色.很多中国人在乎的 ...

  4. 系统分析和设计方法之全书总结

    全书总共分为四部分,每一部分都有需要仔细去学习并且需要与现实中遇到的项目做对比,这是我第一次尝试做全书总结. 系统分析和设计的基础 系统分析 系统设计 系统构造和实现以及之后的工作 1.系统分析和设计 ...

  5. 10kw全固态中波dam广播发射机的计算机监控系统分析与设计[,10KW全固态中波DAM广播发射机的计算机监控系统分析与设计...

    10KW全固态中波DAM广播发射机的计算机监控系统分析与设计 广播发射台是国家非常重要的宣传部门,担负着繁重的广播发射任务.机务值班人员常年在高频.高温和高噪声环境下高度紧张地昼夜值班操作,巡机.抄表 ...

  6. 复杂系统分析与设计思路

    复杂系统分析与设计思路 概述 首先,系统是什么?根据<系统架构>一书的定义,系统是由一组实体和这些实体之间的关系所构成的集合,其功能要大于这些实体各自的功能之和.对于我们的场景,系统可能是 ...

  7. 信息系统分析与设计杨选辉_信息系统分析与设计(第2版)

    Contents第1章信息系统导论1 1.1信息1 1.1.1信息的概念1 1.1.2信息的特性2 1.1.3信息的分类3 1.1.4信息与决策3 1.2系统5 1.2.1系统的概念5 1.2.2系统 ...

  8. 网络推广外包——网络推广外包专员如何做好网站首页设计

    一般来说用户在浏览网站过程中大多都会将视线集中在网站的头部和中间页面的位置,这也是网站建设中的重点,很少有用户会详细看网站页面的底部,但是作为一个专业的网站建设人员自然也不能忽视对网站底部的建设.那么 ...

  9. UML系统分析与设计01-准备

    http://www.cnblogs.com/showjan/archive/2012/05/14/2499713.html UML,统一建模语言,在软件系统分析和设计中被广泛应用.作为一个初学者,我 ...

  10. 电影点评系统论文java_毕业设计(论文)-基于web的电影点评系统分析与设计.docx...

    毕业设计(论文) 论文题目 基于web的电影点评系统分析与设计 thesis Topic Movie reviews system analysis and design based on web A ...

最新文章

  1. Build OpenVSwitch and OVN
  2. halcon 旋转_HALCON高级篇:3D相机标定(3/3)
  3. ML.NET生成器带来了许多错误修复和增强功能以及新功能
  4. 【渝粤题库】陕西师范大学209005课堂教学艺术作业(高起专)
  5. ise和modelsim联合仿真的一些准备
  6. mongodb、mysql、redis的性能对比
  7. O365(世纪互联)SharePoint 之使用Designer报错
  8. 译文-Minor GC vs Major GC vs Full GC
  9. My Feedback for Windows 10 IoT Core on Feedback Hub App (4/1/2017-1/23/2018)
  10. linux 打开dmg文件_如何在Windows中打开DMG文件
  11. Java实现 for循环输出空心的菱形 在main方法中调用printHollowRhombus()方法完成10行的空心菱形输出,其中 printHollo
  12. AVRWARE++开发笔记8:Atmel Studio去除拼写检查
  13. Java游戏开发——推箱子
  14. XUPT 寒假算法集训第一周
  15. 计算机管理系统在哪里,图文详解win10设备管理器在哪打开
  16. OpenStack核心组件原理与应用之Keystone
  17. You_Probably_Dont_Need_RAC
  18. 西南大学考研计算机808真题和复试
  19. 天钰FP6378AS5CTR芯片供应,输出电压纹波低,输出电流敢达3A
  20. ps眼睛糖果滤镜插件:eye candy 7 汉化版(支持ps2021)

热门文章

  1. 从零开始编译LEDE固件 默认中文material主题
  2. SWMM面板基础认识
  3. Qt编写onvif搜索和云台控制工具源码
  4. python调用海康人脸相机登录等接口(开发环境Linux)
  5. redies的复习总结
  6. 工程计算——实战:追赶法扰动分析
  7. SpringMVC-视图和视图解析器
  8. 20个必不可少的Python第三方库(存干货分享)!
  9. python第三方库的安装方式_Python第三方库的几种安装方式(小结)
  10. 进程调度:时间片轮转调度算法