在架构设计里,什么叫做“总线”

发表于2017-06-01   6013次阅读

在架构设计里,什么叫做“总线”

以前看系统架构图,经常看到 "XXX bus" (Control Bus)的概念,感觉像是某种具有“控制中枢”特征的模块,但总是说不清楚到底是什么形态,脑子里没有清晰的定义,一遇到这样的词,总有种“不明觉厉”的感觉。今天找了些资料,整理了一下,加上自己的理解,让大家对这个概念有个较为清楚的认识。

提到“总线”,很容易联想到这是一种硬件设备,的确是这样,毕竟从计算机发展历程来看,也是先有的硬件再有的软件,至少从物理形态上来看是这样,有了硬件,软件才有运行的条件,所以我们很多软件设计的概念也是来自于硬件。

提到硬件的总线,百度百科是这样介绍的(原味解释 点击这里):

总线(Bus)是计算机各种功能部件之间传送信息的公共通信干线,它是由导线组成的传输线束, 按照计算机所传输的信息种类,计算机的总线可以划分为数据总线、地址总线和控制总线。

下面这样图可以帮助你理解什么是硬件里的总线(图片来自于网络):

所以说,总线的作用是用来连接组件和传输数据的,数据总线是用来传输数据的,地址总线是用来传输地址信息的,控制总线是用来传输控制信号的。为什么总线叫做“bus”有个解释非常形象,如果说主板(Mother Board)是一座城市,那么总线就像是城市里的公共汽车(bus),公共汽车上的乘客就是数据(Bit)。

对于软件系统来说,“总线”以为着什么呢?维基百科是这样解释的:

A software bus is a software architecture model where a shared communication channel facilitates connections and communication between software modules. This makes software buses conceptually similar to the bus term used in computer hardware for interconnecting pathways.

从这个定义来看,软件系统的“总线”是一种架构模式,总线负责关键模块之间的链接和通信。在PC时代,曾经有个概念叫做“ESB(Enterprise Service Bus)”,既企业服务总线,是从面向服务体系架构(Service-OrientedArchitecture,SOA)发展而来,就是把企业不同的固有系统采用通用的标准链接起来,让异构系统利用率最大化,这是一种类似中间件的思路(按照云溪社区的定义,ESB也是一种中间件,详情点击这里),不同的系统(或组件)之间有可能不同的通信方式,甚至都是不同语言实现的。系统(或组件)之间如何进行通信,让你的功能为我所用,就需要使用统一的语言进行翻译,在我们现实世界,英语就是这种中间语言,在软件世界里,类似于 WebService 这样的标准就可以作为一种翻译语言,大家都认,大家就可以实现互通理解互通有无了。

关于总线的感念,阿里云有一个应用实例,叫做”云服务总线 CSB(Cloud Service Bus)“,官方解释如下:

云服务总线(Cloud Service Bus,简称CSB)是一个基于高可用分布式集群技术构建的服务API开放平台,帮助企业打通内外新旧系统,实现跨技术平台、跨应用系统、跨企业组织的服务能力互通,通过对互通服务的一致组织和管控,以服务API的形式,构建企业内部以及与上下游、第三方企业之间融合、重塑、创新的合作平台。

所以总结下来,软件世界里的“Bus”是负责软件各个模块或者各个子系统之间的通信和链接的,可以以一种标准形式存在,各个子系统或者模块之间都遵循这个标准,这样就可以实现模块间消息通信、数据传输。也可以以一种软件实体存在,负责解析某个模块的数据再翻译成另一个模块理解的信息。就像我们现实世界中的跨语言交流,我是中国人,你是韩国人,但我们都懂英语,我们之间就可以进行交流,这时“英语”就是统一的标准,就是所谓的传递信息的“总线”。另外,如果我们之间都不懂英语,还可以找翻译社帮我们翻译,这时“翻译社”就是一种实体存在的总线。

可见,总线是中间件的一种(关于中间件的解释可以参考这里《什么叫做“中间件”》)。