分布式实时处理系统:原理、架构与实现
上QQ阅读APP看书,第一时间看更新

1.3.2 高可扩展性

高可扩展性是指系统能够在运行过程中自由地对系统内部节点或现有功能进行扩充,而不影响现有服务的运行。传统的软件系统或单机软件在更新过程中,往往会先停机,然后升级,当一切更新配置都结束后,最后重新启动应用程序。另外,很多传统的系统是“闭环系统”这里的闭环系统指的是那些完全通过内部通信,而不需要和外部通过协议进行数据交换的系统。,其扩展能力非常有限,它们绝大多数使用私有协议进行消息通信,缺乏开放的API也是导致系统扩展能力低下的主要原因之一。因此,在对现有系统进行扩展的过程中,由于私有接口的局限性和不完善性,扩展工作变得异常复杂,有时甚至需要对接口进行更新和定义,才能满足需求,而与其他系统进行集成则变得更加困难:没有开放接口,需要中间层做转换。这些原因都导致了系统在扩展性方面存在难度大和成本高的问题。

我们来看一个现代分布式系统设计的案例:Storm实时处理系统(以下简称Storm)。在Storm中,节点主要由Spout和Bolt两大类组成,我们可以把这种关系类比到MapReduce过程,Spout作为消息源会将搜集到的数据发送到Storm计算拓扑中,再通过一系列消息处理单元Bolt进行分布式处理,最终将处理结果合并得到最终结果。在这里,消息处理单元Bolt是分布式数据处理的核心组件,每当消息处理单元的数据处理完成后,它就会把当前阶段处理的数据发送给下一级消息处理单元做进一步处理。那么,这些消息处理单元之间的元组数据则主要通过开源JSON格式进行传递。利用这种机制,我们看到了一个很好的现象,那就是我们可以随意在消息处理单元后进行扩充,如果数据处理的结果还达不到我们的需求,只需在Storm计算拓扑中继续追加新的消息处理单元,直至满足我们的需求。Storm使用JSON作为节点之间元组数据发送的纽带,一方面解决了私有接口难以扩展和集成的问题,另一方面解决了Storm拓扑结构的后续节点扩充问题。图1-1所示为基本的Storm实时处理系统拓扑结构图,其中每个方框都是一个节点。

图1-1 基本的Storm实时处理系统拓扑结构

因此,在设计和开发我们自己的实时处理系统的过程中,高可扩展性是必须考虑的问题之一,我们会在后续章节进行编程实战的时候对此问题做深入分析。