一个系统越复杂,体系结构就越重要。大体上讲,体系结构定义了一个系统中各个组件的划分、组织以及组件间的交互。此处,我们将体系结构分成两种:
- 软件体系结构:指的是一个系统中各个软件组件的逻辑组织,侧重于软件设计的风格或者说思想,而不涉及某个具体的系统。
- 系统体系结构:指的是一个系统中各个软件组件的逻辑功能、部署、交互等,每个具体的系统都有自己的结构。
软件体系结构(software architecture)。我觉得这个词用得很模糊,不怎么准确。这个主要是在说一个软件系统的设计风格,所以,体系结构风格(architectural style)可能是一个更合适的词。软件体系结构已经被软件工程等相关领域做了较为深入的研究,目前,人们也普遍认同它对于一个系统的开发和部署是十分重要的。在软件系统中,有两个概念比较重要:组件(component)和连接器(connector)。组件是一个相对独立的模块,有良好定义的两类接口:该组件运行时需要使用的接口(由别的组件或者外系统提供);该组件向别的组件提供的服务接口。在良定义的情况下,每个组件都是可替换的。系统中的连接器是一种基础服务,用于提供组件间通讯、同步的机制。常见的连接器包括消息传递、远程方法调用、字节流等。
下面是我们常见的几种体系结构风格。
分层体系结构(layered architectures)。在该风格中,组件被组织成若干个层次,第L层的组件允许请求L-1层以及更低层次组件的服务,但却不能请求更高层次组件的服务;第L层的组件向更高层组件提供服务。这种风格广泛应用与互联网中。
基于对象的体系结构(object based architectures)。这种体系结构大概是面向对象程序设计的结果。在这种风格中,对象对应于我们前面提到的“组件”,一个对象通过远程方法调用请求另一个对象的服务。对象之间没有明显地层次关系和层次约束。
以数据为中心的体系结构(data-centered architectures)。在这种风格中,存在一个共用的数据仓库(基于文件系统的或者基于数据库的),组件主要通过这个数据仓库进行通讯、协作(如通过读写文件、文件锁或者读写数据库表)。很多基于web的系统都采用了这种方式。
基于事件的体系结构(event-based architectures)。在这种风格中,组件主要是事件驱动的,组件间的通讯主要通过事件的传播进行(事件中可能携带某些数据)。在这种风格中,通常伴随着事件的publish/subscribe系统,使得某个组件可以发布(广播)事件,而这个事件会被自动传播到订阅了它的那些组件那里。基于事件的体系结构常常和以数据为中心的体系结构配合使用。
上面就是我们常见的一些体系结构风格。
系统体系结构(system architectures)。这种体系结构主要关注的是一个具体的系统中组件的划分、部署、交互流程等。也是我们通常意义上所说的系统结构。系统体系结构主要分为两大类:中心化的和无中心化的。
中心化体系结构。顾名思义,就是系统中含有某些“中央节点“。中心化有多种情况:中心化的数据(如,所有的客户数据都在一个节点上),中心化的服务(如目录服务只有一个节点提供),中心化的算法(如,某个算法的完成,必须首先收集系统中所有的相关信息到一个节点,由该节点完成计算后再分发结果)等。中心化的结构对于系统的可扩展性有较大的影响,因为那个”中心“很可能会成为瓶颈。在互联网上,中心化的结构还是比较常见的,例如,某个新闻网站。逻辑上,所有的用户都会通过访问同一个网址来获得服务。当然,这背后早就不再是一个服务器提供服务了。
无中心化体系结构。在这种结构中,不再存在某类中央节点,总体上讲,每个节点的功能都是类似的或者说对称的。这种结构也叫做peer-to-peer结构。对于无中心化结构而言,最重要的问题之一就是如何把这些节点组织到一个overlay网络中。一般而言,系统中的一个节点不可能知道系统中所有的节点,它只能知道在这个overlay网络中自己的邻居并与这些邻居直接交互。无中心化体系结构,根据系统维护的overlay网络,又可以分为两类:结构化的overlay网络和非结构化的overlay网络。
在结构化的p2p系统中,overlay网络是通过一个确定的过程建立起来的,最常见的一种组织方式就是DHT(分布式hash表),在这种系统中,overlay网络构成一个逻辑的环。
在非结构化的p2p系统中,overlay网络的建立带有更多的随机性。每个节点都维护这一个局部视图(一个包含c个节点的表),这个视图中的节点就是它的邻居。它通过与邻居不断地交换视图内容来更新自己的视图。在这里,更新视图的算法很重要,在一些节点中,应该将哪些保留在视图中,把哪些丢弃掉是需要精心考虑的。不同的策略会得到不同的overlay网络的拓扑。例如,语义网络中的节点会优先在视图中留下与自己所保存的数据语义相近的节点。在p2p结构中,节点完全对等是很难做到的,例如,由于缺少确定性算法,想要查找某个系统中文件的位置就很难,新节点的加入也很难。所以,在p2p系统中,通常有一系列节点,它们的可用性、性能都较高,承担更多的任务,如目录索引或者新节点加入,这类节点也称为super-peer,超级节点。这些超级节点也常常负责网络拓扑的组织。
在实际的使用中,中心化结构和无中心化结构都有各自的问题,所以,实际的系统通常是混合结构的。例如著名的bittorrent系统。
在体系结构中,我们关心的另外一个问题就算系统的self-managing(包括管理、配置、错误恢复、优化等)能力。为了做到这一点,通常会在系统中使用一个“反馈-控制”模型。反馈控制模型主要包含三大部分:
- 监视系统:这个系统应该可以监视整个系统的执行情况,并收集相关的信息(反馈);
- 分析系统:这个系统是反馈控制模型的核心,它用于分析收集到的系统反馈信息,综合系统当前的各种配置参数,计算得到调整后的配置参数;
- 配置管理系统:用于将新的调整后的配置参数配置到系统中并生效。
反馈-控制模型就在上面三步中不断的循环、执行,以期望得到更好的效果。所以,有时该模型也称为反馈-控制循环。
阅读(2544) | 评论(0) | 转发(0) |