架构这个词我们在学习的过程中经常听到,架构是什么,或者给架构一个定义,本身就是一个难以回答的问题。每个从事软件行业的人对架构都有着自己的理解。要想了解什么是架构,我们首先要知道架构是怎样形成的。

        假如一个人,他的衣食住行都是靠自己解决,每个人都是独立的个体。显然是不需要与其他人合作的。然而,当出现了一个人解决不了的问题时,就需要一起解决。当人数增多、需求变大的时候,就出现了合作。由于每个人的精力是有限的,而且不同的人所擅长的事情有所不同。比如说有的人擅长种地,有的人擅长制作工具,那么就形成了群体和分工。每个人通过不同的分工和互相的联系与交易共同维护了团体的存在。而此时,一个简单的社会架构就形成了。

       由此我们可以总结出什么是架构:

  1. 根据要解决的问题,对目标系统的边界进行界定。
  2. 并对目标系统按某个原则的进行切分。切分的原则,要便于不同的角色,对切分出来的部分,并行或串行开展工作,一般并行才能减少时间。
  3. 并对这些切分出来的部分,设立沟通机制。
  4. 根据3,使得这些部分之间能够进行有机的联系,合并组装成为一个整体,完成目标系统的所有工作

       作为软件工程师或者架构师,我们大部分时间是要去解决别人的问题。对于架构师来说,发现问题永远都比解决问题来的更加重要。

      我们知道了什么是架构,接下来就是如何做好架构。做好架构首先要识别需要解决什么问题。找到真正的问题,那么问题就解决了一大半。

     在处理问题的时候我们会遇到一些错误:

  1. 被告知要处理一个问题,但是交过来的实际上是一个解决方案,不是问题本身。
  2. 被告知要处理一个问题,直接通过直觉就有了一个解决方案,马上考虑解决方案如何落地,或者有几种解决方案,选哪个合适。

      如何识别出真正的问题,首先要搞清楚问题的主体是什么。问题的主体是问题的隐含边界,边界不确定下来,问题就是不确定的。一旦确定了主体,剩下的就是去搞明白主体有哪些问题,然后就是针对这些问题一一解决。

       因此,要正确的认识问题,需要问两个问题:

  1. 这是谁的问题?
  2. 有什么问题?

       架构师的能力大部分会体现在对问题主体的识别上。

       当正确识别出问题之后,大部分都能迎刃而解。然而总还有一部分问题的产生,需要做出些调整。这个调整就是架构的切分。

随着社会的发展,分工是必然的。利益就是推动分工的基本动力。所有的切分调整,都是对相关人员利益的调整让自己的利益最大化,使我们每个人的本性。相关人员的利益往往会产生以下的问题

  1. 某个或者某些利益相关人负载太重。
  2. 时间上的负载太重。
  3. 空间上的负载太重,本质上还是时间上的负载太重。
  4. 某个或者某些利益相关人的权利和义务不对等。

       架构切分的主要原因就是利益相关人员的负载太重。切分的标准是权利义务相对等。架构切分的最终结果都会体现在组织架构上,只有这样才能够让架构落地并推进。架构切分的结果一定是一个树状,这也是为什么会产生分层。层数越多沟通越多,效率越低,分层要越少越好。尽可能变成一颗平衡树,才能让整个系统的效率最大化。

       可以总结出切分的原则有几点:

  1. 必须在连续时间内发生的一个活动,不能切分。
  2. 切分出来的部分的负责人,对这个部分的权利和义务必须是对等的。
  3. 切分出来的部分,不应该超出一个自然人的负载。
  4. 切分是内部活动,内部无任怎么切,对整个系统的外部应该是透明的