CMDB在企业中,一般用于存放与机器设备、应用、服务等相关的元数据。当企业的机器及应用达到一定规模后就需要这样一个系统来存储和管理它们的元数据。有一些广泛使用的属性,例如机器的IP、主机名、机房、应用、region等,这些数据一般会在机器部署时录入到CMDB,运维或者监控平台会使用这些数据进行展示或者相关的运维操作。
在服务进行多机房或者多地域部署时,跨地域的服务访问往往延迟较高,一个城市内的机房间的典型网络延迟在1ms左右,而跨城市的网络延迟,例如上海到北京大概为30ms。此时自然而然的一个想法就是能不能让服务消费者和服务提供者进行同地域访问。我们在集团内部的实践中,这样的需求是通过和CMDB打通来实现的。在Nacos的服务发现组件中,对接CMDB,然后通过配置的访问规则,来实现服务消费者到服务提供者的同地域优先。
image.png | center | 448x330
图1 服务的同地域优先访问
这实际上就是一种负载均衡策略,在Nacos的规划中,丰富的服务端的可配置负载均衡策略是我们的重要发展方向,这与当前已有的注册中心产品不太一样。在设计如何在开源的场景中,支持就近访问的时候,与企业自带的CMDB集成是我们考虑的一个核心问题。除此之外,我们也在考虑将Nacos自身扩展为一个实现基础功能的CMDB。无论如何,我们都需要能够从某个地方获取IP的环境信息,这些信息要么是从企业的CMDB中查询而来,要么是从自己内置的存储中查询而来。
CMDB插件机制
先不考虑如何将CMDB的数据应用于负载均衡,我们需要首先在Nacos里将CMDB的数据通过某种方法获取。在实际使用中,基本上每个公司都会通过购买或者自研搭建自己的CMDB,那么为了能够解耦各个企业的CMDB具体实现,一个比较好的策略是使用SPI机制,约定CMDB的抽象调用接口,由各个企业添加自己的CMDB插件,无需任何代码上的重新构建,即可在运行状态下对接上企业的CMDB。https://www.cnblogs.com/yunqishequ/p/10266700.html