Ozone SCM基于Container/Pipeline管理的架构模式

前言


前面笔者写了很多篇关于Ozone OM的相关文章,本文笔者介绍另外一个与此紧密管理的服务SCM服务,一个提供基于Datanode Container容器的中心管理服务。简单地来比喻,现有的HDFS NN服务的角色功能在Ozone中,被完美地拆成了OM+SCM服务的模式。而且这样拆分之后,SCM提供的Container存储服务能够做到更加通用,不仅仅适用于K-V的对象存储模式。不过这里假定大家已经有了对于SCM服务的基本概念了解,这样能够帮助大家理解本文下面将要阐述的内容。

SCM内部的服务模块划分


SCM,全称为StorageContainerManager,它也是一个中心管理服务,管理的对象为其下Datanode中的所有Container。Container内部则存储的是实际的Block Chunk文件(这部分内容笔者在前面文章中已经阐述过很多次了,感兴趣的同学可自行阅读前面相关文章)。

因此在这里我们可以直接能够想到的是:SCM至少会有节点管理以及Container容器管理两部分服务。不过在真实SCM服务中,它所包含的服务要远比这2个服务多,它包含了以下4个模块的服务:

  • Endpoint Server,适用于外部SCM Client的请求调用,包括Container的allocation等等。
  • State Manager,状态管理服务,此模块服务即包含了上面提到的Container管理,Node的Manager。另外的,这里还有Pipeline的管理,Pipeline在这里提供的是Container存储节点的位置信息,意为Container将会存储在Pipeline内的那些节点内。因此Container信息中会带有PipelineId。在SCM中,Pipeline也是需要被创建出来并作为原信息被持久化出去的。Pipeline还能够被多Container复用。被复用的意思即不同Container,它的副本位置是完全一样的。
  • Other Manager,SCM中还运行有其它一些服务,比如Container的ReplicationManager,用以定期检测Container的副本情况,副本不够则触发Datanode Container Replication的操作。另外还有,SCM Safemode Manager服务等等。
  • Metric/MXBean,额外的还有SCM各服务相关的Metric监控和展示。

下图为SCM服务的内部模块分类图:
在这里插入图片描述

SCM服务和OM服务的交互过程


下面内容笔者额外简单阐述下SCM如何向外部服务提供其Container容器存储的服务的,Ozone的OM目前是其主要的服务对象。

下图为SCM提供Container服务的过程图,
在这里插入图片描述
这里比较结合上述步骤流程进行阐述:

  • 1)OM的KeyManager服务准备要进行K-V的存储,向SCM服务申请某个key的Block。在OM的层面来看,它所看到的Block就是[key, List]的mapping。而在SCM中,则是[Container, List]。
  • 2)随后这个请求被SCM中的BlockManager所处理。
  • 3)它首先会调用PipelineManager的createPipeline方法进行Pipeline的获取。ContainerManager随后进行db文件的Container记录的更新。
  • 4)Pipeline有了之后,BlockManager又会调用ContainerManager的的crate Container操作进行Container的获取。ContainerManager随后进行db文件的Container记录的更新。
  • 5, 6)BlockManager将ContainerId以及Pipeline信息包含在了一个新的返回对象AllocatedBlock实例中,然后返回给OM。
  • 7)OM的KeyManager拿到返回Block信息后,将其中的部分信息提取转化为OmKeyInfo,然后存储到Key table表里面。在OmKeyInfo中,它保存有2个关键的信息:
    • 一个是此Block所属的Container是哪个,通过保存ContainerId
    • 另一个是Pipeline信息,通过Pipeline信息就能够知道这些Block实际存储的节点位置信息了。可能是出于减少OM向SCM查询Block的位置信息,OM在KeyInfo中额外存了Pipeline的信息,实际上只存储一个Container其实就足够了。因为SCM所维护的Container,Pipeline信息中可以通过ContainerId进而查到其Pipeline信息。

通过OM和SCM服务的交互合作过程,我们可以看到只要基于SCM Container存储服务之上,只要设计好文件Key与Block的映射组织关系,我们可以构建出别的新型的存储行为系统,不仅仅限于K-V对象存储模式。

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

猜你喜欢

转载自blog.csdn.net/Androidlushangderen/article/details/104106897