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<>();
alluxio源码解析-层次化存储(4)的更多相关文章
- alluxio源码解析-netty部分(2)
netty简介 Netty是 一个异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端. netty作为alluxio中重要的通讯组件 在常见的客户端上传,下载中,都会有n ...
- alluxio源码解析-rpc调用概述-client和worker之间的block模块的通讯架构(netty版本)(3)
(1.8版本)client和worker之间的block模块的通讯架构 block作为alluxio文件读取或者存储的最小基本单位,都是通过BlockOutStream和BlockInputtream ...
- alluxio源码解析-rpc调用概述(1)
alluxio中几种角色以及角色之间的rpc调用: 作为分布式架构的文件缓存系统,rpc调用必不可少 client作为客户端 master提供thrift rpc的服务,管理以下信息: block信息 ...
- Fresco源码解析 - DataSource怎样存储数据
Fresco源码解析 - DataSource怎样存储数据 datasource是一个独立的 package,与FB导入的guava包都在同一个工程内 - fbcore. datasource的类关系 ...
- Ocelot简易教程(七)之配置文件数据库存储插件源码解析
作者:依乐祝 原文地址:https://www.cnblogs.com/yilezhu/p/9852711.html 上篇文章给大家分享了如何集成我写的一个Ocelot扩展插件把Ocelot的配置存储 ...
- jQuery2.x源码解析(缓存篇)
jQuery2.x源码解析(构建篇) jQuery2.x源码解析(设计篇) jQuery2.x源码解析(回调篇) jQuery2.x源码解析(缓存篇) 缓存是jQuery中的又一核心设计,jQuery ...
- Spring IoC源码解析——Bean的创建和初始化
Spring介绍 Spring(http://spring.io/)是一个轻量级的Java 开发框架,同时也是轻量级的IoC和AOP的容器框架,主要是针对JavaBean的生命周期进行管理的轻量级容器 ...
- HashMap 源码解析
HashMap简介: HashMap在日常的开发中应用的非常之广泛,它是基于Hash表,实现了Map接口,以键值对(key-value)形式进行数据存储,HashMap在数据结构上使用的是数组+链表. ...
- Python2 基本数据结构源码解析
Python2 基本数据结构源码解析 Contents 0x00. Preface 0x01. PyObject 0x01. PyIntObject 0x02. PyFloatObject 0x04. ...
随机推荐
- Coderforces 633D:Fibonacci-ish(map+暴力枚举)
http://codeforces.com/problemset/problem/633/D D. Fibonacci-ish Yash has recently learnt about the ...
- Oracle数据库---序列、索引、同义词
--创建序列create sequence deptno_seqstart with 50increment by 10maxvalue 70cache 3; --为了方便演示,创建了一个和dept表 ...
- 8.秋招复习简单整理之Spring面试一般问题
1.不同版本的Spring Framework有哪些主要功能? 2.什么是Spring Framework? Spring是一个轻量级的IOC和AOP容器框架,是为Java应用程序提供基础性服务的一套 ...
- 热度3年猛增20倍,Serverless&云开发的技术架构全解析
『 作为一个不断发展的新兴技术, Serverless 热度的制高点已然到来.』 或许,Google Trends 所显示的 3 年猛增 20 倍的" Serverless " 搜 ...
- 数据结构-双向链表(Python实现)
数据结构在编程世界中一直是非常重要的一环,不管是开发还是算法,哪怕是单纯为了面试,数据结构都是必修课,今天我们介绍链表中的一种--双向链表的代码实现. 好了,话不多说直接上代码. 双向链表 首先,我们 ...
- Appium+python自动化(二十)- 猴哥失散多年的混血弟弟还是妹妹- Monkey(猴子)日志(超详解)
简介 日志是非常重要的,用于记录系统.软件操作事件的记录文件或文件集合,可分为事件日志和消息日志.具有处理历史数据.诊断问题的追踪以及理解系统.软件的活动等重要作用,在开发或者测试软系统过程中出现了问 ...
- jekyll搭建个人博客2
目录 个性化 jekyll目录结构 修改个人信息 修改头像 修改背景颜色 关于头像的效果 图片问题 域名 个性化 jekyll目录结构 个性化就是要对文件内容作出修改,使得博客外观发生变化,在修改文件 ...
- android_activity_研究(一)
android中活动的概念(activity)是一个很重要的东东.这里有很多东东值得好好研究.最好的研究来源当然是官网啦,所以本人这里写一点对官网文章的研究心得. 一.活动(activity)的概念 ...
- 对于springboot的几种注入方法的个人看法
最近在知乎上面看到一篇关于程序员面试的问题,面试官问我们一般有几种注入的方法,这几种注入的方法分别在什么时候运用比合理,当时我看到这个时候懵逼了,由于我自己也是刚刚接触springboot不久,所以就 ...
- [记录]NGINX配置HTTPS性能优化方案一则
NGINX配置HTTPS性能优化方案一则: 1)HSTS的合理使用 2)会话恢复的合理使用 3)Ocsp stapling的合理使用 4)TLS协议的合理配置 5)False Start的合理使用 6 ...