从0开始学软件架构
在极客时间上定了一个专栏,讲软件架构的,昨天开始学习,一口气看了10章,讲得真不错,把架构相关的背景、概念、原则梳理得很清晰,再结合一些实际开发的案例,让人很容易就吸收了,在这里做一个笔记,加深理解。
什么是软件架构:
要理解架构,首先要知道什么是系统,看看看维基百科定义的“系统”:
系统泛指由一群有关联的个体组成,根据某种规则运作,能完成个别元件不能单独完成的工作的群体。
概念里有几个关键点:
1.关联,个体之间要有关联,没有关联的个体组不能组成系统。一个轮胎和一个显示器放一起,没有任何意义。
2.规则,个体之间要按照一定规则协同配合,比如一台电脑,显示器用来输出,键盘用来输入,主机用来计算,它们之间按照一定的规则配合起来才能形成一个整体。
3.功能,个体按照一定规则关联起来,就能完成个体无法实现的功能,把一堆汽车零件组装好,加上油,就可以上路了,而任何单个零件是跑不起来的。
理解了系统,我们再来看什么是架构:
架构就是软件系统的顶层结构,用建筑打比方,架构就是构造软件系统的图纸。
架构设计的真正目的
架构设计的真正目的是为了解决软件系统复杂度带来的问题。
人们经常拿建筑和软件系统做对比,其实软件系统比建筑复杂的多,一个建筑按照图纸做完之后,基本上不会再变了。而软件系统是一直处于变化之中的,业务需求在不断变化增加,软硬件技术在持续升级,数据也在不停累积,这就导致软件系统的复杂度非常高,架构设计的目的就是为了解决这一问题。
软件系统复杂度的来源
1.高性能要求,为了提高性能,现在的计算机都是多核多线程的,同时为了应付大规模的用户访问,还要把单台计算机联合起来,组成分布式的集群,这都为软件架构设计带来了困难。
2.高可用的要求,高可用是指软件系统对外服务的能力,比如银行系统对高可用有着极高的要求,一年之内停机的时间不能超过几小时。为了达到这一要求,在架构时需要考虑很多问题:计算高可用、存储高可用以及状态决策高可用。
3.可扩展性的要求,对一个软件系统来说,唯一不变的就是变化,我们在设计一个系统时,就要考虑到未来的发展,这需要我们能预测到变化,同时想好如何应对变化,其中的难度可想而知。
4.低成本、安全、规模的要求。我们希望构建完美的软件系统,但是资源是有限的,我们如何用有限的成本保证系统的安全可靠。还有随着系统规模越做越大,功能越来越复杂,如何保证系统的性能和可维护性,也是一个难点。
架构设计三原则
合适原则:合适优于业界领先
适合自己的才是最好的,结合公司实际的情况和资源,做出当下最优的选择即可。
简单原则:简单优于复杂
复杂意味着容易出错,不易维护,简单意味着灵活易修改
演化原则:演化优于一步到位
软件设计最忌讳过度优化,往往是浪费资源,应该随着需求和技术发展慢慢演化,不断丢弃错误的设计,保留好的精髓,持续完善软件系统。
先记录这些,未完待续。