文章目录
前言
当面对一个复杂的分布式系统时,如果我们想了解其内部运行的情况,我们通常的做法是进行内部指标metric的收集和暴露。但是如果我们遇到一些内部指标的统计需要进行系统服务内部逻辑的大规模改动或者目标metric的指标收集操作会影响到服务的正常请求处理,那么这个时候我们有没有好的办法呢?最完美的方法无疑是搭建出一个元数据完全一致的READ-ONLY模式的系统,注意了这里指的是一个独立的服务。本文笔者将以Ozone的Recon服务为例,来聊聊这个只读模式的系统应该如何来做。
Ozone Recon模式的运作原理
在Ozone中,就做了这么一个只读模式的SCM服务,名字叫Recon服务。Recon用来做SCM内的Container情况的分析。
Recon作为只读模式的SCM,它理应持有完全一致的Container信息,这样才能做准确的模拟分析。但这里有个问题,Recon不能处理来自外部的Container写请求操作的。对于这种情况的处理,Recon采用了下面的办法:
- 1)Recon从SCM服务节点上同步一份初始Container db文件。
- 2)Datanode额外配置Recon的地址作为Container Report的另外一个心跳报告地址。
- 3)Recon和SCM一样,同样接受下面Datanode的Container报告信息,进行内部Container状态的更新。
- 4)当Recon接受到新的Container时,它需要额外向SCM服务查询,此Container是否是有效的Container,如果是,则添加到自身内存中。
- 5)Datano