文章目录
前言
在分布式系统中,尤其是存储系统中,我们经常会看到类似“系统返回一个最近的数据”这样的句子”。当我们谈到一个数据“远近”的问题时,你可以说这是在谈数据locality的问题,但从更宏观的角度来看这个问题,它其实谈的是Topology Awareness(拓扑架构感知)的事情。本文笔者来简单聊聊这个话题,其实我们平时更多的是用另一个词–Rack-Awareness(机架感知)来指代这个问题。
为何要考虑Topology Awareness
其实在小规模,小体量集群环境中,是确实可以不用考虑拓扑结构感知的问题的。这里的结构可理解为是它的网络结构(/data center/rack/node)。但是当集群规模变大,甚至有了不同的数据中心,机房时,这里面就要考虑网络数据通信的问题。也就是我们需要开始重视这里面的网络结构的问题,总不能每天把机房带宽打满吧。基本原则是优先访问本地(可以同节点,rack,datacener)数据,尽可能避免远程数据传输。所以Topology Awareness要解决的就是这样的一个问题,避免的是一个resource消耗的问题。
Topology Awareness的一般实现思路
结合HDFS内部的NetworkTopology实现以及最近Ozone的Topology Awareness设计实现,笔者来简单概括下其中的设计思想,还是有很多通用的地方可以借鉴借鉴的。
Step1: Node Location赋予
节点的拓扑结构位置赋予是Topology Awareness的一个初始前提。一般情况下,我们会将节点实际的网络位置情况作为它的实际位置值,比如如下:
/data-center/rack/node
或者说