众所周知,计算机因为确立了总线这种最基本的结构,大大促进了计算机的发展。总线结构使计算机能够方便的组件化,总线上跑数据,一个一个的设备接入总线,从总线上获取它所需要的数据,通过总线把它想发送出去的数据发送到合适的单元,就好比人身体上得血管神经网络,大大小小的器官接入他们从血管里获取养分,并排除废物,从而组成了人体这个复杂的物体,这是化繁为简,造物主经典之作。我这儿要说的是软件设计的总线结构,软件设计时设计一套总线用来跑数据,各个模块接入这个总线,这个是很多中间件标榜的一个特性。

       还是说回来,事情的起因是这样,最近公司项目经过几年的发展,日均并发人数达到了300w,并且还会快速增长;越来越多得新特新加入进去,系统也越来越复杂,模块已经达到了30多个,模块间的关系也越来越像蜘蛛网;通过分析发觉是使用基础框架的总线结构惹的祸,目前的总线实际上是创建一堆共享内存,即在程序运行前就确立了谁要跟谁通信并创建好以两边bus id为标示的共享内存。这是好几年前的设计思想,设计思路,当程序不复杂时,这种思路可以很好的解决通信问题,可以提高模块的开发效率,但是随着系统越来越复杂,这种对应关系也越来越难维护。后续修改思路:设置一个命名中心,当服务启动时注册自己的信息到这个命名中心,当需要访问服务时,通过带上名称访问该命名中心获取真实的标示,从而建立通信。这个命名中心可以自己开发或者使用开源的zookeeper。

       那么如果我们要设计一个可靠地bus该怎么来做呢,bus中除封装消息发送和接受的功能外,还需封装命名中心查找以及模块状态的功能,方便动态扩展;A模块要介入,A调bus的一个接口,向bus注册自己的信息;当B要给A发消息时,调bus的一个接口,说要发给谁谁(可以是名字也可是具体的唯一标示id),当目标标示为一个名称时,bus向自己的命名中心查找真实的id,而建立通信,bus要避免把具体的唯一标示作为通信的标示暴露给上层。