对于复杂的大型应用系统,正如一座大型建筑一样,不能直接开干,需要进行反复设计验证。包括整体框架设计,以及子系统或组件可以适用的代码框架(技术选型),框架下诸多类和对象的创建和使用,复合关系及行为交互等的一些套路(设计模式)的使用。
1 什么是架构设计
架构(Architecture)设计是系统的顶层设计,是软件整体结构与组件的抽象描述,涉及到子系统划分与交互,包括系统如何纵向分层、横向模块划分,组件如何交互等设计,设计的系统要求有高性能与安全性、易于维护与扩展。
如一个电子商城系统,可以按其业务逻辑(用户实现一个功能的最小的闭环,包括流程环节、人机交互、数据交互)进行划分:
1 商家卖货
1.1 订单系统
订单生成
用户下单、商品信息、优惠信息、会员权益、库存减少、运费计算
支付订单
用户信息、支付信息
商家发货
商家发货、仓库调拔、订单分拣、商品包装、订单出库、快递配送
确认收货
物流追踪、用户签收
交易完成
用户评价、订单售后
1.2 物流系统
1.3 文件系统
2 买家买货
2.1 直播系统
2.2 红包雨系统
2.3 秒杀系统
架构设计的一些常用套路称为架构模式,如,MVC模式、分层模式、CS模式、主从模式、管道过滤模式、代理模式、P2P模式、事物总线模式、解释器模式、微内核架构(插件架构)、基于空间的架构(云架构)、微服务架构等。
在软件系统中,架构是非常重要的一部分,它统领各个模块的开发和合作,项目从研发到上线运营,我们要在不同的方案中选择合适的架构,比如,我们服务器使用什么操作系统?使用什么语言开发?数据如何获取和存储?客户端使用什么框架开发?
这些问题的方案组合在一起就是一种软件开发架构,项目组的每个子系统都要有自己的方向,把子系统的决策方向合起来再加入它们之间的关联调用就构成了一个完整的架构,每个系统、组件、模块都是软件系统架构的一部分。
2 什么样的架构才是好架构?
一个好的架构设计需要有好的承载力、扩展性、易用性、伸缩性和容错性。
2.1 承载力
一个架构能承载多少个业务系统或功能系统,能承载多少代码行数,在达到规定的代码量时是否能有效正常的运行。
对于服务器来说,服务器的架构能承载多少人同时访问,能承载的日均访问量是多少,这就是它承载力的体现。
对于客户端来说,它能显示多少个UI功能,可以同时渲染多少个模型,分辨率可以达到多少,则是它的承载力体现。
2.2 扩展性
可扩展性的关键就在于,在添加新系统新功能的时候,会不会影响其他系统,添加这个新系统的代价大不大,会不会导致系统整体性能问题。
2.3 易用性
易用性其实很简单,就是你这个产品设计的好不好用,是不是方便使用。
易用性也决定了软件的整体开发效率,因为一个好的架构,会让团队成员容易上手,子系统容易对接,开发效率高,各模块和各系统的编写只需要关注系统的设计和编码工作,其他模块通信方面的事情,架构可以提供很好的兼容。
2.4 伸缩性
什么是伸缩性?其实就是你设计的这个方案或系统是否可以根据需求适配不同数量的功能或子系统,在我们设计的软件系统中,架构的可伸缩性决定了架构的可适配性,比如,当这个系统使用人数较少的时候,是否支持减少一些服务器来支撑服务端的运行,当系统使用的人数较多时,访问量较大时是否支持添加服务器来增强系统的支持。
2.5 容错性
如果软件中某个系统出现了一点小BUG导致整个系统使用不了,那这个架构容错性就很差,软件中的一些BUG很常见,我们无法避免,但是我们应尽量保证这个BUG的影响范围最小。
同时,若出现系统无法使用的情况,应该有备份方案,比如自动启动或者自动保存数据等功能,也应该能够让开发人员及时知道问题的发生,以及问题所在的位置并记录错误信息。
在架构设计中,以上五项基本能力缺一不可,某项能力的突出并不能带动其他项,也不能决定整个系统的好坏。
但是如果某一项能力比较弱,随着时间的推移,问题会越来越大,甚至系统崩溃。就像木桶原理那样,一个木桶的容量不是取决于最长的那根木板,而是取决于最短的那根。
我们需要一个坚固的、多样化的、好用的、可伸缩的、容错性强的房子,这也是我们设计架构所追求的目标。
3 框架(Framework)
框架是某一架构模式的某一基础组件的代码化,表现为类库或工具。
例如MVC是一种架构模式,其具体的网络开发框架有:
Python Django 框架
Java Spring 框架
Ruby on Rails框架
不同的编译语言有不同的框架来实现不同的架构设计:
C:ACL
C++:QT、MFC
Python:PyQt
JavaScript:Node.js、React.js
SSM框架是Spring+SpringMVC+MyBatis三个框架整合而成的,在SpringBoot出现之后,SpringBoot慢慢开始占据了主流地位,另外在SSM之前还有一个业内流行的SSH框架(Struts、Spring和Hibernate0。
4 设计模式
一个系统可以选择不同的架构设计模式,一种架构设计模式可以选择不同编程语言的不同框架或框架组合,而不同的框架下的代码开发可以使用不同的面向对象的设计模式(Design Pattern)来实现不同对象之间的关系及行为交互,包括对象的创建与使用分离,以降低系统的耦合度。
5 编程语言及相关内容
所以,学习一门编程语言往往不仅限于编程语言本身:
① 计算机组成原理
② 汇编语言
③ 编程语言本身
④ 标准库
⑤ 编程语言相关的某操作系统的API
⑥ 编程语言相关的数据结构(如C++的STL,Java的Collection)
⑦ 通用数据结构与算法
⑧ 数据库、网络
⑨ 框架、工具
立即咨询: 13716188458 / 18588225959,助您抢占市场先机。项目经理在线