软件系统架构设计必须掌握的4步流程

一. 识别系统复杂度

软件系统架构设计必须掌握的4步流程_第1张图片

架构设计的本质目的是为了解决软件系统的复杂性,所以在我们设计架构时,首先就要分析系统的复杂性。只有正确分析出了系统的复杂性,后续的架构设计方案才不会偏离方向;否则,如果对系统的复杂性判断错误,即使后续的架构设计方案再完美再先进,都是南辕北辙,做得越好,错得越多、越离谱。架构的复杂度主要来源于“高性能”、“高可用”、“可扩展”等几个方面,架构师在具体判断复杂性的时候,不能生搬硬套,认为任何时候架构都必须同时满足这三方面的要求。实际上大部分场景下,复杂度只是其中的某一个,少数情况下包含其中两个,如果真的出现同时需要解决三个或者三个以上的复杂度,要么说明这个系统之前设计的有问题,要么可能就是架构师的判断出现了失误,即使真的认为要同时满足这三方面的要求,也必须要进行优先级排序。

二. 设计备选方案

软件系统架构设计必须掌握的4步流程_第2张图片

架构设计备选方案的工作更多的是从需求、团队、技术、资源等综合情况出发,对主流、成熟的架构模式进行选择、组合、调整、创新。设计备选方案应注意的几个事项:

① 备选方案不要过于详细。备选阶段解决的是技术选型问题,而不是技术细节。

② 备选方案的数量以 3~5个为最佳。

③ 备选方案的技术差异要明显。

④ 备选方案不要只局限于已经熟悉的技术。

三. 评估和选择备选方案

软件系统架构设计必须掌握的4步流程_第3张图片

评估和选择备选方案,需要重点关注质量属性。质量属性包括性能、可用性、安全性、可扩展性等。这些属性在我往期的文章中有讲过,大家可以查阅。在评估这些质量属性时,需要遵循架构设计原则“合适原则”和“简单原则”, 避免贪大求全,基本上某个质量属性能够满足一定时期内业务发展就可以了。在评估和选择备选方案时,常用的做法,可以列举这些重要的质量属性,然后一一把它放到每一个方案中进行打分,打分时要充分考虑到团队目前的技术能力、资源分配、项目成本、外部风险等因素,最终把每一项分值加起来进行权衡,从而选出一个最优的方案。

四. 详细方案设计

软件系统架构设计必须掌握的4步流程_第4张图片

详细方案设计就是将最终确定的备选方案进行细化,使得备选方案变成一个可以落地的设计方案。详细方案设计包含以下几个方面:

1. 数据存储设计。需要根据业务评估一下5年内业务数据量,然后考虑数据库技术选型、针对一些数据增加比较快的业务考虑是否采用分表分库或大数据的方式进行处理。另外,需要考虑数据库的备份及容灾、高并发场景下的可用性、一致性解决方案。

2. 通信协议设计。通信协议设计,需要根据业务特点、业务性能要求、业务安全性来决定采用什么协议?比如一个物联网系统,设备端与服务端通信通常采用MQTT或COAP协议,微服务架构中,服务间内部调用通常使用HTTP(S)或RPC协议等等。作为一名架构人员,这些协议的优缺点及原理一定要搞清楚。另外通信协议设计中,对于报文的设计也有要求,报文的大小、报文的数据结构都是要重点考虑的,因为在高并发下场景下,这些细节可能会影响到系统的整体性能。

3. 接口设计。接口设计主要体现在几个方面,一是接口的友好性,指的是入参和返回值命名规范、接口参数说明、调用示例等;二是接口的隔离原则,记住一个接口只干一件事情;三是接口的安全性,这点很重要,一般会被很多人忽略掉。接口的安全性保障一般采取令牌访问机制、数据签名/验签、白名单访问机制等。

4. 缓存和消息队列设计。缓存和消息队列设计时,一定要根据业务特点选取合适的组件,目前业界有很多这方面的开源组件,在选型时千万不能盲从。另外缓存和消息队列设计时,需要考虑缓存和消息队列自身单点故障问题。

好了,这篇文章就讲这么多,大家好对架构设计流程有个初步的认识。大家有问题可以在评论区留言,陆续分享更多架构方面的知识,感兴趣的同学别忘了加关注哟!

你可能感兴趣的:(架构设计,架构)