如果你有什么行业相关知识不太明白的,这时候你去看百度百科,你会发现,百度百科上边写的东西根本不是人看的,因为根本看不懂。《架构漫谈》的作者则使用通俗易懂的方式向我们解释了,到底什么是架构。架构这个词最早是产生在软件行业,后来才用到了软件行业里。
#什么是架构?
当产生分工时,大家需要通过一个机制联系在一起,来让每个人完成自己的任务。把一个整体(完成人类生存的所有工作)切分成不同的部分(分工),由不同角色来完成这些分工,并通过建立不同部分相互沟通的机制,使得这些部分能够有机的结合为一个整体,并完成这个整体所需要的所有活动,这就是架构。
1.先根据要解决的问题对目标系统的边界进行界定
2.然后对目标系统进行切分,设立沟通机制
3.让部分可以有机的结合在一起成为一个整体,完成目标系统的工作
架构实际上就是指人们根据自己对世界的认识,为解决某个问题,主动地、有目的地去识别问题,并进行分解、合并,解决这个问题的实践活动。
#认识概念是做好架构的基础
什么才是相?相指的不是一个具体的事物,而是这个事物所起的作用,而这个作用的目的是解决人的问题,
抽象实际上是一个分类的过程
做好架构首先必须具备的能力是能够正确的认识概念,能够发现概念背后所代表的问题,进而才能够认识目标领域所需要解决的问题,这样才能够为做好架构打好基础。
#找出问题的主体,是做架构的首要问题
要把关注点放在如何解决问题上,而不是如何完成任务
架构师在解决问题时,要明确问题的主题是什么,自己在解决谁的问题,只有明白了问题的主体,问题才有了边界,我们才能真正地完成自己的任务,真正地把自己的问题解决掉。
有的时候,你得到的不是问题是什么,而是一个问题的解决方案,这个方案你可能理解上有问题,也可能方案本身就是不合理的,你只有明白了问题的本质是什么,才能真正解决问题。
#架构切分
为什么要切分? 人的负载太重。切分的根本原因是人都为自己的利益着想,切分就是为了提升参与的人的利益。
所有的切分调整,都是对相关人的利益的调整。
切分的原则:(1)必须在连续时间内发生的一个活动,不能切分。比如孕妇怀孕,必须要 10 月怀胎,不能够切成 10 个人一个月完成;(2)切分出来的部分的负责人,对这个部分的权利和义务必须是对等的。否则损害整体的利益,违背提升整体利益的初衷;(3)不能超负荷切分;
切分的过程就是建模的过程,每次对大问题的切分都会生成很多小问题,每个小问题就形成了不同的概念。
架构切分的结果一定是一个树状,这也是为什么会产生分层。层数越多沟通越多,效率越低,分层要越少越好。尽可能变成一颗平衡树,才能让整个系统的效率最大化。
#什么是软件
在硬件上编写出的程序,就是软件,是用来控制硬件的行为的。
软件的主要目的,还是把人类的生活模拟化,虚拟化提供更低成本,高效率的新的生活。
#软件架构到底要解决什么问题?
软件要把现实生活模拟到计算机中,并且在计算机的硬件中运行起来的需要解决两个问题:
业务问题:具体的现实生活状态下,没有软件的时候,所解决的问题的主体是谁,解决的是什么问题,是如何解决,如何运作的?
计算机问题:如何把现实生活用软件来模拟?
分别是谁的问题呢?
1.业务的owner需要提升业务的效率,降低业务的成本,这是动机。这个实际上就是业务的问题,所以一般软件开发的出发点就在这里。
2.是软件工程师的问题,要解决业务owner把业务虚拟化的问题,并且要解决软件开发和运营的生命周期的问题。
什么是软件架构
1.部署的架构:软件因为流量增大而分拆成不同的运行单元,在不同的机器上部署所形成的架构,属于软件架构。
2.代码的架构:每个运行单元为了让不同角色的人,比如前端,业务,数据存储等能够并行工作,所分成的代码架构,也属于软件架构。
#什么是架构师
架构师是要去平衡别人的利益,甚至会调整别人的利益的,是一个leader。
架构师必须是一个组织的领导人,有权利调动这个组织的架构,才能够更好的发挥架构师的作用,更好的把利益的调整落到实处。
架构师必须能够超越对时间的恐惧 -- 也就是说必须具备了一定程度的自信,哪怕是装的,去真正的发现问题的主体,识别真正的问题,并把这个行为变成为自己面对问题的第一反应。架构师还必须要明白,所给出的解决方案 -- 架构的分拆、合并方案,只有让问题的主体的权责对等,才能够真正的解决别人的问题。
对于架构师,一门技术或语言只是解决问题的工具。