原来通过阅读《大型网站架构》的阅读,对架构的原则和特点有了了解,但对于为什么要进行架构以及如何真正实现架构还并没有真正的了解。这几天我通通过阅读由资深架构师王概凯执笔的系列专栏——架构漫谈,让我对什么是架构、怎样做好架构、软件架构如何落地、如何写好程序等问题有了更深刻的认识。
软件架构实际上包括了:代码架构,以及承载代码运行的硬件部署架构。实际上,硬件部署架构最终还是由代码的架构来决定。因为代码架构不合理,是无法把一个运行单元分拆出多个来的,那么硬件架构能分拆的就非常的有限,整个系统最终很难长的更大。经常会听说,重写代码,推翻原有架构,重新设计等等说法,来说明架构的进化。这实际上就是当初为了完成任务,没有充分思考所带来的后果。这也并不是架构进化的事情,而是个人对问题领域的逐渐深入理解的过程。
认识架构是理解架构的基础,架构的实质是解决人的问题。在软件架构阶段,有效的去认识概念,明白概念背后的含义,以及利用对概念的理解,快速的进行学习至关重要。找到真正的问题,这个能力决定了架构师的水平。找出问题的主体,是做架构的首要问题。如何正确的认识问题,这需要问两个问题: (1)这是谁的问题? (2)有什么问题?当得到的回答是支支吾吾的时候,我们就知道正确的方向在哪儿,以及需要做哪些事了。能够清晰的定义问题,是解决问题的第一步。
在认识问题后是如何解决问题。软件开发的过程一般都是团队合作,这就涉及到了利益的切分。架构的切分的导火索是人、时间的负载太重。每个人的能力有限,或者单个人来做的话,时间太长。架构的切分实际就是对系统的利益相关人的利益进行切分或合并,使得每个系统的利益相关人的权责是对等的,每个系统的利益相关人可以为自己的利益负责。架构切分的最终结果都会体现在组织架构上,只有这样才能够让架构落地并推进。架构切分的结果一定是一个树状,这也是为什么会产生分层。层数越多沟通越多,效率越低,分层要越少越好。尽可能变成一颗平衡树,才能让整个系统的效率最大化。
我们做过软件,但什么是软件这个并不能很好的给出解释。。在硬件上编写出的程序,就是软件,是用来控制硬件的行为的。在有软件之后我们将生活的事情虚拟到计算机。其实软件架构师的出现与软件的的发展着实相似,从开始写软件到切分,演变成不同的架构这个演变的动力就是提高人的利益,降低成本。
软件架构师的本质是发现问题。软件架构实际上包括了代码架构以及重载代码运行的硬件部署架构。软件架构是否真的需要这取决于任务的大小,若一个人就可以很好的开发何必架构。当访问的流量越来越大,机器就会越来越多,代码的部署单元就会拆分的越来越多。这是就需要软件架构了,这也是软件架构的意义所在,解决多人开发的问题。
软件架构过程可以明确地拆分为两个不同的责任:其一,表达业务逻辑的代码,很多人把这部分叫做Domain Logic,或者叫Domain Model。这部分实际是来源于生活的,必须保持和现实生活中的切分一致,并非人为的抽象而成。其二,对用户提供访问并保存业务逻辑运行结果的代码。计算机的状态保存有一个缺陷,本机保留业务运行结果有很大的问题,一般都在外存储设备上保存,也便于扩展。众所周知,service的代码是最复杂的,需要服务于三方,为了把这三方的变化对service的影响降到最低,对于service进一步的拆分为三个部分,他们分别是Service、Glue Code、Business,让每一个部分都能够独立的变化,这样这三方的变化就不会产生连锁响应,降低成本。这就是软件架构的本质思想,由于我还为进行过项目的架构的使用,对架构如何在项目中实现还不是很明白。
该怎么处理业务、技术还有架构的关系也是一门学问,技术总是在人类解决对业务的要求不断提高的情况下产生,目的也是为了获取更大更好的利益。所以,准确识别采用什么技术的能力,也是架构师所要具备的能力之一。通过对这本书的阅读,从整体的角度对软件架构有深层侧的理解,这是在进一步进行实际项目的开发中应具有很重要能力。