“标签化”思想在分布式系统中的应用
前言
最近一周在研究YRAN的Node-Label功能特性,进行了一个简单的测试,然后顺便看了它的原始设计文档。后来发现,这个特性跟HDFS里的异构存储原理有异曲同工之妙。其中都体现出的一个核心点:“标签化”。所以本文,笔者来聊聊“标签”在分布式系统领域内的应用,应用场景是绝对有的。
“标签化”的缘由
说到标签化,很明显,它其实间接表明了另一个现象:“差异化”。一个很简单的例子,一个班集体里面,总有几个同学,性格怪异,或性格活泼,热情,那这些同学,就会被大家在心里贴个标签:活泼的,性格古怪的等等类型。而对应到分布式系统领域,这种差异体现的层面就有很多方面了。比如存储这块,存储媒介的不同,SSD,普通磁盘,或是磁带。计算这块,就是大内存机型,高CPU核数机型等等。
当系统中有一些明显带有不同属性的个体出现时,当然有必要将它们标明出来,否则就会被当成普通个体了。被当成普通个体后,它的功效以及适用场景就会大打折扣了。所以我们需要将它们标签化。
“标签化”的作用(适用场景)
现在问题来了,到底“标签化”在分布式系统领域有什么用呢?换句更简单地说法,它有哪些适用场景呢?
第一,硬件资源隔离。在存有很多异构环境的集群内,可以有效的将这些资源区分出来,让系统知道,然后,在这些异构环境的节点上,只跑对应特点的任务。这个使用场景是比较普遍会容易想到的。
第二,任务层面的隔离。通过管理员主观的划分出标签,然后让任务提交到不同标签对应的资源上,从而保证不同用户的任务不会相互影响。这里其实是利用标签将系统资源进行了逻辑意义上的分隔。
第三,分片互斥的资源使用。相较于原始统一化的共享一整个资源来比,通过对系统资源打上标签,可以有很多种不同的使用方式。一个节点被一个标签独有或拥有多个标签属性。标签在这里在系统资源上进行了一层逻辑上的抽象,这样可以更高的提高系统资源的使用率。
“标签化”过程如何在系统中执行
不论是在HDFS的异构存储功能中,还是在YARN的Node-Label中,标签化的核心实现思路大体上差异不大。归结起来是下面几个步骤:
- 管理员主动给系统资源打上标签,这些标签信息将会被主控制节点所记录。
- 用户提交应用(请求),设置特定的标签。
- 系统接收到标签任务(请求),将任务(操作)执行(作用)到对应标签的资源上。
这里注意一点,这里所有的标签还是需要人为设定的,而不是说系统很“聪明”地自己识别号了标签资源。