读《架构漫谈》有感
上上周,在王老师的"威逼利诱"下,历时两周,总算是读完了这九篇关于架构的博客。虽然其中很多内容我还不是很理解,但是还是学到了很多,对于软件工程以及架构的概念也有了更深的理解。
首先就说说什么是架构,用《架构漫谈》中的原话来说,架构,就是:1.根据要解决的问题,对目标系统的边界进行界定。 2.并对目标系统按某个原则的进行切分。切分的原则,要便于不同的角色,对切分出来的部分,并行或串行开展工作,一般并行才能减少时间。 并对这些切分出来的部分,设立沟通机制。3.根据3,使得这些部分之间能够进行有机的联系,合并组装成为一个整体,完成目标系统的所有工作。说的再简单点,就是确定目标范围,切分目标,整合。而之所以会产生架构,是因为随着项目的规模越来越大,参与的人数越来越多,必然会产生分工,而架构的目的也是为了合理分工,最后有机结合。
在确定问题上,我们要弄清架构解决的问题是什么。架构解决的是人的问题,这是一个需要牢记的核心观念。谈到解决问题,我们需要知道两个点:1.这是谁的问题,这实际上是找问题的主体究竟是谁,如果找不对或者找不到问题的主体,那么花费再大的精力也是白费功夫,最后谁也不会满意。2.有什么问题,当我们正确的找到了问题的主体后,再在主体上去追根溯源,去挖掘有什么问题,可以通过沟通,交流,观察等等方式去找问题。所以来说,找到问题的主体是我们解决问题的一大关键。
然后再谈谈如何做好切分。在说这一点之前,先解释一下stackholder,stackholder就是相关利益人,用现代管理学语言叫:stockholder。架构切分的导火索是人的负载太重。而架构的切分实际就是对 stakeholder 的利益进行切分或合并,使得每个 stakeholder 的权责是对等的,每个 stakeholder 可以为自己的利益负责。在进行架构切分的时候,分层要越少越好,尽量形成一棵平衡树,这样才能更大的提高效率。
说了这么多,也没有提及到软件二字,接着就来说说软件架构的问题。软件架构解决的是两个问题:
1.业务问题
具体的现实生活状态下,没有软件的时候,所解决的问题的主体是谁,解决的是什么问题,是如何解决,如何运作的?
2.计算机问题
1)如何把现实生活用软件来模拟?
2)模拟出来的软件,需要哪些硬件设施才能够满足要求? 并且当访问量越来越大的时候,软件能否支持硬件慢慢长大,性能线性扩展?
3)因为硬件是可能会失效的,软件如何在硬件失效的情况下,仍然能够保证可用性,让用户能够不中断的访问软件提供的服务?
4)怎么收集软件产生的数据,为下一阶段的工作提供依据?
而如何解决问题,这里就不详细展开了。总而言之,软件架构就是满足业务在计算机中的虚拟化。
总的来说,看完10篇博客,收获不少,尽管很多东西自身还没有这些体会,很多内容还看不懂,但是对于软件架构,有了很多新的认识。