alluxio源码解析-层次化存储(4)
层次化存储-特性介绍:
https://www.alluxio.org/docs/1.6/cn/Tiered-Storage-on-Alluxio.html
引入分层存储后,Alluxio管理的数据块不只在内存中,可存放于任何可用的存储层。Alluxio使用分配策略和回收策略管理块的存放和移动。Alluxio根据I/O性能的高低从上到下配置存储层。因此,这种配置策略决定了最顶层存储是MEM,然后是SSD,最后是HDD。
可以配置多个存储目录,不同的存储介质
写数据
读数据
固定文件
分配策略
- 贪心分配策略分配新数据块到首个有足够空间的存储目录。
- 最大剩余空间分配策略分配数据块到有最大剩余空间的存储目录。
- 轮询调度分配策略分配数据块到有空间的最高存储层,存储目录通过轮询调度选出。
回收策略
- 贪心回收策略移出任意的块直到释放出所需大小的空间。
- LRU回收策略移出最近最少使用的数据块直到释放出所需大小的空间。
- LRFU回收策略基于权重分配的最近最少使用和最不经常使用策略移出数据块。如果权重完全偏向最近最少使用,LRFU回收策略退化为LRU回收策略。
- 部分LRU回收策略基于最近最少使用移出,但是选择有最大剩余空间的存储目录(StorageDir),只从该目录移出数据块。
层次化存储-架构位置
层次化存储是作为分布式缓存的最为核心的特性,加速读取/写入
层次化存储也是worker组件最重要的功能,同时支持横向扩展
层次化存储-代码解析
接上文https://www.cnblogs.com/victor2302/p/10491974.html,我们讲到了BlockWorker接口
该接口的实现实现类:DefaultBlockWorker
DefaultBlockWorker
主要负责几种功能:
- PinListSync,定时获取pinned列表
- BlockMasterSync周期性的工作,例如:与master的心跳交互
- 报告计量相关指标至master
- 所有块相关存储操作的逻辑
成员变量如下:
/** Runnable responsible for heartbeating and registration with master. */ 和master节点的心跳任务 private BlockMasterSync mBlockMasterSync;/** Runnable responsible for fetching pinlist from master. */ 获取master pin列表的任务 private PinListSync mPinListSync;/** Runnable responsible for clean up potential zombie sessions. */ private SessionCleaner mSessionCleaner;/** Client for all block master communication. */ 与block master通讯 private final BlockMasterClient mBlockMasterClient; /*** Block master clients. commitBlock is the only reason to keep a pool of block master clients* on each worker. We should either improve our RPC model in the master or get rid of the* necessity to call commitBlock in the workers.*/ private final BlockMasterClientPool mBlockMasterClientPool;/** Client for all file system master communication. */ 与file system交互的客户端 private final FileSystemMasterClient mFileSystemMasterClient;/** Block store delta reporter for master heartbeat. */ 报告者 private BlockHeartbeatReporter mHeartbeatReporter; /** Metrics reporter that listens on block events and increases metrics counters. */ 报告者 private BlockMetricsReporter mMetricsReporter; /** Session metadata, used to keep track of session heartbeats. */ private Sessions mSessions; /** Block Store manager. */ mBlockStore是TieredBlockStore,为多级存储block存储管理器 private BlockStore mBlockStore; private WorkerNetAddress mAddress;/** The under file system block store. */ ufs管理器 private final UnderFileSystemBlockStore mUnderFileSystemBlockStore;/*** The worker ID for this worker. This is initialized in {@link #start(WorkerNetAddress)} and may* be updated by the block sync thread if the master requests re-registration.*/ private AtomicReference<Long> mWorkerId;
涉及到交互的方法 | 代码 | 注释 | |
commitBlock | blockMasterClient.commitBlock | 提交bolock | |
start | mBlockMasterClient.getId(address) | 获取workerId | |
心跳类方法 | 代码 | 注释 | |
PinListSync |
Set<Long> pinList = mMasterClient.getPinList();
mBlockWorker.updatePinList(pinList);
|
更新本地的pin列表 | |
SessionCleaner |
for (long session : mSessions.getTimedOutSessions()) {
mSessions.removeSession(session);
for (SessionCleanable sc : mSessionCleanables) {
sc.cleanupSession(session);
}
}
|
清除session | |
SpaceReserver | 太多 | 各存储层空间检查 | |
BlockMasterSync |
cmdFromMaster = mMasterClient.heartbeat(mWorkerId.get(), storeMeta.getUsedBytesOnTiers(),
blockReport.getRemovedBlocks(), blockReport.getAddedBlocks(), metrics);
handleMasterCommand(cmdFromMaster);
|
向blockmaster发送心跳,并处理返回的消息 |
TieredBlockStore
该类负责分层存储逻辑,与不同介质的缓存存储模块进行交互
维护读写锁,保证block操作的线程安全
该类拥有前文提到过得申请和驱逐策略以及 pinned列表
备注:申请和驱逐策略,就是关于不同介质的缓存存储模块如何进行分配以及管理的策略
//申请策略接口 private final Allocator mAllocator; //驱逐策略接口 private final Evictor mEvictor;private final Set<Long> mPinnedInodes = new HashSet<>();
转载于:https://www.cnblogs.com/victor2302/p/10506408.html
alluxio源码解析-层次化存储(4)相关推荐
- Ocelot简易教程(七)之配置文件数据库存储插件源码解析
作者:依乐祝 原文地址:https://www.cnblogs.com/yilezhu/p/9852711.html 上篇文章给大家分享了如何集成我写的一个Ocelot扩展插件把Ocelot的配置存储 ...
- Redis源码-String:Redis String命令、Redis String存储原理、Redis String三种编码类型、Redis字符串SDS源码解析、Redis String应用场景
Redis源码-String:Redis String命令.Redis String存储原理.Redis String三种编码类型.Redis字符串SDS源码解析.Redis String应用场景 R ...
- Android Hawk数据库的源码解析,Github开源项目,基于SharedPreferences的的存储框架
今天看了朋友一个项目用到了Hawk,然后写了这边文章 一.了解一下概念 Android Hawk数据库github开源项目 Hawk是一个非常便捷的数据库.操作数据库只需一行代码,能存任何数据类型. ...
- Android Hawk的源码解析,一款基于SharedPreferences的存储框架
转载请标注:http://blog.csdn.net/friendlychen/article/details/76218033 一.概念 SharedPreferences的使用大家应该非常熟悉啦. ...
- libev源码解析——定时器监视器和组织形式
我们先看下定时器监视器的数据结构.(转载请指明出于breaksoftware的csdn博客) /* invoked after a specific time, repeatable (based o ...
- Simple Dynamic Strings(SDS)源码解析和使用说明二
在<Simple Dynamic Strings(SDS)源码解析和使用说明一>文中,我们分析了SDS库中数据的基本结构和创建.释放等方法.本文将介绍其一些其他方法及实现.(转载请指明出于 ...
- 彻底理解OkHttp - OkHttp 源码解析及OkHttp的设计思想
OkHttp 现在统治了Android的网络请求领域,最常用的框架是:Retrofit+okhttp.OkHttp的实现原理和设计思想是必须要了解的,读懂和理解流行的框架也是程序员进阶的必经之路,代码 ...
- Java集合---LinkedList源码解析
一.源码解析 1. LinkedList类定义 2.LinkedList数据结构原理 3.私有属性 4.构造方法 5.元素添加add()及原理 6.删除数据remove() 7.数据获取get() 8 ...
- java treeset原理_Java集合 --- TreeSet底层实现和原理(源码解析)
概述 文章的内容基于JDK1.7进行分析,之所以选用这个版本,是因为1.8的有些类做了改动,增加了阅读的难度,虽然是1.7,但是对于1.8做了重大改动的内容,文章也会进行说明. TreeSet实现了S ...
最新文章
- 3.8	采购协议管理
- 关于导入springboot配置文件相关问题
- float16/32/64对神经网络计算的影响
- SAP发布S4/HANA 意义超过R3
- FreeRTOS系列第2篇---FreeRTOS入门指南
- 警告:Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2 FMA(亲测)
- Equation漏洞混淆利用分析总结(下)
- boootstap-面包屑-下拉菜单
- 像人类一样理解言外之意,阿里AI最新研究成果被国际顶会收录
- 【matlab】元胞数组的创建
- vba 添加outlook 签名_利用VBA发送附件电子邮件
- mysql安装教程_mysql8.0.20安装教程,mysql下载安装教程8.0.20
- Atitit 函数式编程与命令行语言的区别与优缺点 目录 1. 常见的函数式语言	2 1.1. 命令行 bat	2 1.2. Sql h5 css 正则表达式	2 1.3. 工作流语言 anno注
- 故障解决:发生系统错误 67 找不到网络名
- js获取UEditor富文本编辑器的内容
- 在一个字符串中找出元音字母a,e,i,o,u出现的次数
- uni-app获取用户手机号
- R语言高分辨率遥感卫星数据处理
- 计算机交互媒体应用范围,交互媒体
- bugzilla安装详解_for_winXPSP2
热门文章
- 一个插件让你在 Redux 中写 promise 事半功倍
- hive操作create,alter等
- http缓存机制和原理详解
- JQUERY获取text,areatext,radio,checkbox,select值
- Lucene.net多字段(Fields)、多索引目录(IndexSearcher)搜索
- SQL Server数据库开发的二十一条军规
- 用cmake编译caffe
- 泛读:CVPR2014:Discriminative Deep Metric Learning for Face Verification in theWild
- 【LDA学习系列】Beta分布Python代码
- linux查看服务器设备信息命令dmidecode