软件系统架构设计必须掌握的4步流程
一. 识别系统复杂度
架构设计的本质目的是为了解决软件系统的复杂性,所以在我们设计架构时,首先就要分析系统的复杂性。只有正确分析出了系统的复杂性,后续的架构设计方案才不会偏离方向;否则,如果对系统的复杂性判断错误,即使后续的架构设计方案再完美再先进,都是南辕北辙,做得越好,错得越多、越离谱。架构的复杂度主要来源于“高性能”、“高可用”、“可扩展”等几个方面,架构师在具体判断复杂性的时候,不能生搬硬套,认为任何时候架构都必须同时满足这三方面的要求。实际上大部分场景下,复杂度只是其中的某一个,少数情况下包含其中两个,如果真的出现同时需要解决三个或者三个以上的复杂度,要么说明这个系统之前设计的有问题,要么可能就是架构师的判断出现了失误,即使真的认为要同时满足这三方面的要求,也必须要进行优先级排序。
二. 设计备选方案
架构设计备选方案的工作更多的是从需求、团队、技术、资源等综合情况出发,对主流、成熟的架构模式进行选择、组合、调整、创新。设计备选方案应注意的几个事项:
① 备选方案不要过于详细。备选阶段解决的是技术选型问题,而不是技术细节。
② 备选方案的数量以 3~5个为最佳。
③ 备选方案的技术差异要明显。
④ 备选方案不要只局限于已经熟悉的技术。
三. 评估和选择备选方案
评估和选择备选方案,需要重点关注质量属性。质量属性包括性能、可用性、安全性、可扩展性等。这些属性在我往期的文章中有讲过,大家可以查阅。在评估这些质量属性时,需要遵循架构设计原则“合适原则”和“简单原则”, 避免贪大求全,基本上某个质量属性能够满足一定时期内业务发展就可以了。在评估和选择备选方案时,常用的做法,可以列举这些重要的质量属性,然后一一把它放到每一个方案中进行打分,打分时要充分考虑到团队目前的技术能力、资源分配、项目成本、外部风险等因素,最终把每一项分值加起来进行权衡,从而选出一个最优的方案。
四. 详细方案设计
详细方案设计就是将最终确定的备选方案进行细化,使得备选方案变成一个可以落地的设计方案。详细方案设计包含以下几个方面:
1. 数据存储设计。需要根据业务评估一下5年内业务数据量,然后考虑数据库技术选型、针对一些数据增加比较快的业务考虑是否采用分表分库或大数据的方式进行处理。另外,需要考虑数据库的备份及容灾、高并发场景下的可用性、一致性解决方案。
2. 通信协议设计。通信协议设计,需要根据业务特点、业务性能要求、业务安全性来决定采用什么协议?比如一个物联网系统,设备端与服务端通信通常采用MQTT或COAP协议,微服务架构中,服务间内部调用通常使用HTTP(S)或RPC协议等等。作为一名架构人员,这些协议的优缺点及原理一定要搞清楚。另外通信协议设计中,对于报文的设计也有要求,报文的大小、报文的数据结构都是要重点考虑的,因为在高并发下场景下,这些细节可能会影响到系统的整体性能。
3. 接口设计。接口设计主要体现在几个方面,一是接口的友好性,指的是入参和返回值命名规范、接口参数说明、调用示例等;二是接口的隔离原则,记住一个接口只干一件事情;三是接口的安全性,这点很重要,一般会被很多人忽略掉。接口的安全性保障一般采取令牌访问机制、数据签名/验签、白名单访问机制等。
4. 缓存和消息队列设计。缓存和消息队列设计时,一定要根据业务特点选取合适的组件,目前业界有很多这方面的开源组件,在选型时千万不能盲从。另外缓存和消息队列设计时,需要考虑缓存和消息队列自身单点故障问题。
好了,这篇文章就讲这么多,大家好对架构设计流程有个初步的认识。大家有问题可以在评论区留言,陆续分享更多架构方面的知识,感兴趣的同学别忘了加关注哟!
软件系统架构设计必须掌握的4步流程相关推荐
- 软件系统架构设计的六大原则
软件系统架构设计的六大原则 1.单一职责原则(SRP) 2.开放封闭原则(OCP) 3.里氏替换原则(LSP) 4.最少知识原则(LKP) 5.接口隔离原则(ISP) 6.依赖倒置原则(DIP) 1. ...
- [转]应用软件系统架构设计的“七种武器”
作者:张明星 出处: dev2dev.bea.com.cn 对于软件架构这一概念,有太多的版本,目前在业界由大师级人物或组织提出的对这一概念的阐述就超过十种以上,我个人比较赞同RUP(Ra ...
- 应用软件系统架构设计的“七种武器”
对于软件架构这一概念,有太多的版本,目前在业界由大师级人物或组织提出的对这一概念的阐述就超过十种以上,我个人比较赞同RUP(Rational Unified Process)中对软件架构的定义,即软件 ...
- 转载:应用软件系统架构设计的“七种武器”
本文章转载自:应用软件系统架构设计的"七种武器"(http://space.itpub.net/12639375/viewspace-167369) 在此向原作者本人表示感谢. ( ...
- 【转帖】应用软件系统架构设计的七种武器
[意]:本文为转帖,纯属学习之用,如侵犯了您的权利,请通知本人立即删除 来源:http://biostar.blog.sohu.com/80149258.html 对于软件架构这一概念,有太多的版本, ...
- 数据可视化大屏设计步骤,有3步流程
数据可视化大屏设计步骤,有3步流程 大屏工程师经常碰到那样的窘境:竭力设计方案的大屏,数据精确.視覺酷炫,可是用户满意度一般.究竟哪些的大屏才算是客户必须的呢?回答是:重点突出.层级清楚.怎样设计那样 ...
- 嵌入式软件架构设计----中控机NIOS软件系统架构设计说明书
下面文档系本人开发的流媒体数字会议系统中控机的软件架构,有写的不好的地方,欢迎拍砖 1 .引言 1.1编写目的和使用范围 1.1.1 编写目的 本文档用来确定Nios的软件架构,以便帮助软件工程师更好 ...
- 如何进行软件系统架构设计?
基于体系架构的软件设计模型把软件过程划分为体系架构需求.设计.文档化.复审.实现和演化6个子过程,现逐一简要概述如下. 1.体系架构需求.即将用户对软件系统功能.性能.界面.设计约束等方面的期望(即& ...
- 微服务架构设计总结实践篇,10 步搭建微服务
一.微服务架构介绍 二.出现和发展 三.传统开发模式和微服务的区别 四.微服务的具体特征 五.SOA和微服务的区别 六.如何具体实践微服务 七.常见的微服务设计模式和应用 八.微服务的优点和缺点 九. ...
最新文章
- CRF和HMM区别不仅仅前者是判别模型后者是生成模型
- Java并发编程(2):线程中断(含代码)
- 联想云:借助云计算助力中国企业数字化转型
- Codeforces Round #741 (Div. 2) E. Rescue Niwen! 字符串 + dp
- 创意or鸡肋?亚马逊想让智能音箱“手机”化
- Python-体育竞技模拟
- netcore docker_深入浅出 ASP.NET Core 与 Docker 入门课程目标说明
- Python 爬虫---(5)Requests库的使用
- 从word得到表格数据插入数据库(6位行业代码)
- 还有不会用 SQL 的程序员吗?
- 【原创】C#实现视频远程监控(下载)
- override java field_JAVA方法的重载(overload)和覆盖(override)
- SQL Prompt
- Qt学习之资源文件(qrc)的添加以及使用
- 安卓dj专业打碟机软件_Mac平台上的专业DJ打碟软件
- kettle复杂表头的Excel数据源处理
- C++求一个数的最大奇数约数
- 2014年度大疆创新笔试题心得
- linux的一些命令
- Github国内镜像网站