Ozone Multi-Raft机制对于更大throughput处理量的支持

前言


在前面介绍Ozone文章内容中,笔者多次提及Ozone使用的是Raft一致性协议来做副本间的数据一致性的。Ozone使用的是Raft的Java实现库Apache Ratis实现的,在早期Apache Ratis实现里,它需要传入一个Pipeline节点作为命令操作的对象。并且每个Pipeline之间是不能带重复节点。简单来说,这些Pipeline之间是不交叉的。我们可以理解早期Ozone这种Raft的使用是单一的Raft。每个独立Pipeline作为一个Raft Group,集群总节点数的多少直接决定了Pipeline的最大数量,进而决定整个集群Container操作的throughput。单一独享节点的Raft方式的问题在于它没有更好地利用Datanode的节点的资源。倘若一个节点能够被多个Pipeline组所复用,无疑将会提升SCM Pipeline的总数,进而提升Container的请求处理量。Apache Ratis在RATIS-91: Add multi-raft support中实现了Multi-Raft的支持,Ozone基于此改进同时也同时在做Ozone的Multi-Raft的实现,即Pipeline交叉复用Datanode的实现。本文笔者就来讲述讲述Ozone对此的改进实现。

Multi-Raft的支持到Ozone多Pipeline的节点复用支持


有些同学可能还没太理解上下文的关联,从Multi-Raft的支持如何会演变到多Ozone Pipeline的多节点复用呢?

这里的过程是这样的:
Ozone内部基于Raft协议做一致性的实现,使用的依赖库为Apache Ratis。Ratis在内部实现中,定义了Raft Group作为操作的执行单元,意为它的每次命令处理对这个Raft Group内的节点能够保持一致性。Ozone在这边是通过创建Pipeline来作为节点信息传入Raft Group的。但是在早期Apache Ratis的实现中,一个节点只能成为一个Raft Group的一部分,不能被多Raft Group所共享。这在一定程度上就限制了集群总Pipeline(Raft Group)的数量了。也同时减少了集群Pipeline的并发处理量了。

但是后面Ratis能够支持了一个节点能时成为多个Raft Group 的一部分了,那么在Ozone这边就能够支持做到复用Datanoed节点的Pipeline创建了。然后在Ozone这边可以创建出更多的Pipeline进行使用了。

这里进行一个简单的Single Raft的互斥Pipeline,到Multi-Raft的多Pipeline复用节点模式的对比:

原始方式,互斥不交叉Pipeline,6个节点只能分成2个Pipeline:
在这里插入图片描述
但是在复用节点模式下,能够创建出远超出2个的Pipeline,比如下图所示的4(还不是最大值)个,
在这里插入图片描述

Pipeline间的节点复用支持带来的改进


Ozone Pipeline节点的复用能够带来集群操作请求throughput的提升,同时能够提升集群请求的处理效率。这里的效率提升从何谈起呢?

Ozone的Pipeline在节点失败或者网络原因导致节点无法连接时,会进行Pipeline的destroy操作。而Pipeline在destroy的操作过程中,代价是十分高的,它会进行此Pipeline内所有Container的close操作。SCM会发送各个Container所属的Datanode Container close的命令。这一整个Pipeline的摧毁重建动作需要耗费甚至达分钟级别,显然这不是一个高效的操作。但此时,假如我们能够拥有更多数量的Pipeline数,就可以大大减少这种类似节点或外来因素故障导致的Pipeline重建操作开销。

Pipeline总数的限制


Pipeline间的节点能够复用,还意味着集群内的总Pipeline数的急剧膨胀。为了避免由于过多数量Pipeline的创建,导致集群处于一种overhead的情况。

扫描二维码关注公众号,回复: 9138401 查看本文章

Ozone在实现的过程中额外增加了以下2点的Pipeline数的限制:

  • 节点级别限制,一个节点上最大能够创建的Pipeline数,即一个节点最多能被多少个Pipeline所包含。
  • 总数级别限制,一个集群最多能够用于使用的Pipeline的总数。

另外,Ozone在实现Multi-Raft的过程中,还实现了在Pipeline级别的rack awareness,将集群的network topology传入Pipeline manager,然后Pipeline manager在创建Pipeline选节点时,遵循rack awareness规则进行选择。 相比于HDFS将这种数据块的节点位置保存为文件信息的属性,Ozone将其进行拆分管理的方式,能够使得数据的位置分布管理变得更加的灵活。

引用


[1].https://issues.apache.org/jira/browse/HDDS-1564 . Ozone multi-raft support

发布了383 篇原创文章 · 获赞 408 · 访问量 206万+

猜你喜欢

转载自blog.csdn.net/Androidlushangderen/article/details/104242214
今日推荐