《代码阅读方法与实践》阅读笔记三
从系统的源代码看出系统的架构不是一件容易做到的事,然而在识别出重要的架构元素之后,在浏览整个系统,了解系统的结构和属性以及规划增加修改和重构活动就会变得更加容易。这是因为一旦提取出系统的架构特征,我们就会与系统的创建者共享一套语义丰富的词汇。这还能够帮助我们了解交互的类型、通信模式以及代码结构。有人说架构是老人的艺术,在实际工作中,经验丰富的设计者更可能预知特定的设计如何处理具体的问题,以及哪些架构性的解决方案可以组合起来形成一个功能体。
常见的结构可以归类为少数不同的结构类型:集中式储存库、数据流、面向对象或分层构架。这些类型常常结合成一个层次结构,来控制大型系统的复杂性。集中式储存库的架构依赖于一个中心过程或数据结构,他在系统中担任控制或信息的集线器。在大规模的系统中,协同的任务可能会分配给多个集线器进程。比如说窗口管理器、文件和打印服务器以及网络资源管理程序都是运用了此种结构。分布式架构的一个要素就是底层的通信协议,更通用的方法式使用远程过程调用或远程方法调用的概念来执行。
当处理过程可以建模、设计和实现成一系列的数据交换时常常会使用数据流架构。虽然数据流架构好像会有很多限制,单数据流架构常常模拟现实的过程和人们实际的工作方式。在开发应用数据流架构的系统时,既可以顺序地进行,亦可以并行地进行。最后以实现的数据交换可以被复用。它的明显征兆是,程序中使用临时文件或流水线在不同进程间进行通信。面向对象结构的系统,将他们的设计建立在维护自身状态并互相作用的对象上,系统的架构 有不同的类或对象之间的关系,以及对象交互的方式来定义。现实世界中的系统可能会有数百个不同的类组成。在分析现实系统的代码时,会将他的一般结构建模为一个类图或对象图,属性和操作用符号表示。UML类图展示了一系列的接口、类、协作和关系,有助于我们理解系统构架在结构上的特征。
分层架构适用于拥有众多同级子系统的系统,在这类构架中,每个独立的层对它上面的层提供明确的接口,并使用另一种不同但规范的接口与它下面的层进行通信。在这种框架中,每个层可以使用不同的技术和方法来实现,不会影响整体的架构完整性。计算机网络的操作以及操作系统都遵循这样的方法,物理层上不会影响其上传递的数据格式。它的一个重要规则是较低的层不能使用较高的层,加入任意层可以使用任意层,那就不能容易地替换或拿走这些层。构建和理解复杂的架构的核心要素是层次分解的概念。层次分解常常与系统的架构特征无关;架构既可以以层次的方式定义,也可以定义为一个或多个相互正交、相互影响的不同层次,重要的是了解系统可以使用不同的独特的层次分界模型跨各种坐标轴进行组织。
随着网站访问流量的不断增加,大多的网络服务都是以负载均衡集群的方式对外提供服务,随之集群规模的扩大,原来基于单机的服务器管理模式已经不能够满足我们的需求,新的需求必须能够集中式的、分组的、批量的、自动化的对服务器进行管理,能够批量化的执行计划任务。在分布式服务器管理系统软件中有一些比较优秀的软件,其中比较理想的一个是Cfengine。它可以对服务器进行分组,不同的分组可以分别定制系统配置文件、计划任务等配置。它是基于C/S 结构的,所有的服务器配置和管理脚本程序都保存在Cfengine Server上,而被管理的服务器运行着 Cfengine Client 程序,Cfengine Client通过SSL加密的连接定期的向服务器端发送请求以获取最新的配置文件和管理命令、脚本程序、补丁安装等任务。