百度网盘背后的存储系统atlas
百度网盘免费提供2TB存储, 它的存储量一定是惊人的, 支持它的存储系统atlas也是相当不错的。 atlas是一个KV存储, 支持GET/PUT/DELETE三个接口, 看起来接口简单, 但要做好这么一个大规模系统非常不易, 我们来看看atlas到底长啥样。
atlas基于如图所示arm存储机, 2U放6个机器, 每个机器4核、4GB内存、4个3T硬盘, 2U总共72TB存储, 相比普通机架服务器,存储密度提升1倍。arm存储机的内存量过小, 而文件系统产生的元数据过大, 考虑性能原因不能把文件存储成文件。 甚至也不能采用haystack存储方式, haystack元数据虽然小, 但也超过ARM存储机的内存量。
atlas架构如上图所示, altas采用分布式元数据管理机制, 根据哈希策略将对象元数据切片成N个slice, 这些slice交由PIS(Patch and Index Server)集群管理, 每个PIS节点负责管理多个slice。 slice到PIS的映射表通过元数据服务器管理(图中未画出), 映射表较小,能被客户端全量缓存。
PIS的结构如上图所示, replication模块以主从复制方式保证slice三副本一致性。 写请求发往主节点, 主节点生成唯一请求ID之后将ID和请求转发给从节点, 从节点接收到请求之后, 追加到patch模块维护的log文件。 请求ID的作用是串行化写, 即从节点按照ID排序串行化执行请求。 主节点至少收到一个从节点的响应后, 将KV写入本地, 并告诉客户端写成功。 (如何保证一致性?)。 patch文件长度达到64MB时, PIS新开一个patch文件处理写请求, 调用RBSClient将满64MB的块写入到RBS系统中, 并将对象元数据(即对象的key,以及对象的存储位置:RBS块,偏移,长度)记录到Index中。
RBS(RAID-like Block System), 是一个64MB大块存储系统, 支持随机读取, 整块写入和删除, 不支持随机写。 PartServer负责数据存储, RBS Master负责记录块的位置信息, 并负责集群管理和数据恢复工作, 而RBSClient是提供给应用的开发包。 RBS采用纠删码技术保障数据可靠性, 写入数据时, RBSClient将64MB大块切分为8个8MB part,用RS纠删码生成另外4个8MB 校验part, 保存这12个part到PartServer。
对象读取流程。 对象数据是先进patch后转移到RBS, 所以读也是要先读patch, patch命中则直接返回, 若不命中则查index得到对象位置信息, 再根据位置信息从RBS读取数据。
删除和垃圾回收。 如果对象在patch中则直接删除,反之若对象在RBS中,则从index中删除对象元数据, 删除对象空间不会马上回收, 而是留在RBS中形成垃圾数据。 垃圾回收的思路是使用map-reduce扫描所有index数据, 计算RBS块的空间率, 针对空闲率大于一定阈值的块, 读取有效数据,写回到RBS, 更新index, 最后删除块。
atlas是优秀的KV存储系统, 非常适合于网盘类应用。其最大的特色是软硬件协同设计, 基于arm存储和纠删码极大降低了存储成本。 atlas垃圾回收的成本较高, 删除较多的应用场景下效率可能会有问题。
文献atlas: baidu’s key-value storage system
http://www.open-open.com/lib/view/open1437919655143.html
百度网盘背后的存储系统atlas的更多相关文章
- 使用百度网盘+Git,把版本控制托管到云端
之前公司的一个项目使用SVN来做的版本控制,服务器设在我这台电脑上.然后是出于某些原因,我的电脑IP变了多次,每变一次就要重新绑定静态ip,甚是烦人.同时SVN这种集中式的版本控制服务在我关闭了我的电 ...
- Linux命令行上传文件到百度网盘
利用bpcs_uploader你可以自动将VPS主机上的文件上传到百度网盘中,同时也可以从百度网盘中下载文件到VPS主机上,让你的文件安全地"住"在百度云中.[font=Tahom ...
- 百度网盘采集源码 ,直接采集网盘添加cookies功能
名称:百度网盘采集源码 程序语言:php 数据库:mysql 程序介绍: 1.直接采集百度网盘url 2.前端基于bootstrap 3.搜索考虑到后期上亿数据,是基于coreseek,搜索时间毫秒级 ...
- .NET破解之百度网盘批量转存工具
在百度网盘上看到好的资源,总想转存到自己的网盘,加以整理.由于分享的规则原因,手动转存非常麻烦,于是百度批量转存工具.最先搜到的是小兵的百度云转存助手,无需注册,试用版用户一次只能操作10个,而捐助用 ...
- Android 开发环境下载地址 -- 百度网盘 adt-bundle android-studio sdk adt 下载
最近 Google 被墙了, 上传一下自己收集的 Android 开发环境, 下面给出的官网链接也可以下载; http://www.androiddevtools.cn/ 1. 百度网盘下载地址 An ...
- 用php实现百度网盘图片直链的代码分享
第一种代码:代码量较少通过正则表达式获取百度网盘的文件真实地址,来实现直链的效果 将下面的代码保存为downbd.php 复制代码代码如下: <?php $canshu=$_SERVER[&qu ...
- 推荐一个百度网盘搜索工具www.sososo.me
推荐一个百度网盘搜索工具 http://www.sososo.me
- 核心思想:百度网盘怎么盈利(互联网的高速更新决定了:亏钱你还有点机会,放弃连门都进不了),战略预备队 good
百度做网盘很大程度就是为了防止别人依靠网盘做大和积累点技术储备.腾讯邮箱怎么赚钱?腾讯影音怎么赚钱?互联网的高速更新决定了,一些你看不起眼的软件很可能就会席卷整个市场,所以互联网大佬宁愿一些项目亏钱也 ...
- 百度网盘,前几天刚从百度云改名过来,百度云这个名字给之前的百度开放云(同步盘用户比较小众)good
作者:黑郁金香链接:http://www.zhihu.com/question/51803053/answer/127562835来源:知乎著作权归作者所有,转载请联系作者获得授权. 在8月网盘大面积 ...
随机推荐
- Swagger 专题
随着互联网技术的发展,现在的网站架构基本都由原来的后端渲染,变成了:前端渲染.前后端分离的形态,而且前端和后端在各自的技术道路上越走越远. 前端和后端的唯一联系,变成了API接口:API文档成了前后端 ...
- 【心情】2016ICPC青岛站打铁记
Day0 下午到的青岛; 然后就在下面这两个地方转了很久:一直找不到公交站台 路上还看到了一个类似堡垒的东西:感觉屌屌的. 然后在落日的余晖下:我们找到了公交站台; 路上不知道他们在讨论什么:GPS什 ...
- 多线程中的lock,Monitor.Wait和Monitor.Pulse
我们知道lock实际上一个语法糖糖,C#编译器实际上把他展开为Monitor.Enter和Monitor.Exit,即: lock(lockObj) { //... } ////相当于(.Net4以前 ...
- jQuery在线选座订座(高铁版)
除了电影院在线选座,我们还会接触到飞机机舱选座,当然也有汽车票火车票选座的.假如有一天买火车票也提供在线选座,那么今天我来给大家介绍下如何使用jQuery选座插件完成高铁列车座位布置.选座.不同等级座 ...
- WPF依赖属性(续)(3)依赖属性存储
原文:WPF依赖属性(续)(3)依赖属性存储 在之前的两篇,很多朋友参与了讨论,也说明各位对WPF/SL计数的热情,对DP系统各抒已见,当然也出现了一些分歧. 以下简称DP为依赖属性 ...
- QWidget居中显示(qt窗口坐标原点是在”左上角”的,有图)
转载请说明出处, 并附上原文链接http://blog.csdn.net/qq907482638/article/details/72189014. 问题描述 在Qt学习过程中,在让QDialog居中 ...
- Extensible Access Control List Framework
Methods, systems, and products for governing access to objects on a filesystem. In one general embod ...
- Opencv决策树分类器应用
机器学习在数据挖掘.计算机视觉.搜索引擎.医学诊断.证券市场分析.语言与手写识别等领域有着十分广泛的应用,特别是在数据分析挥着越来越重要的作用.在机器学习中,决策树是最基础且应用最广泛的归纳推理算法之 ...
- Mybatis缓存 缓存配置文件 good
一.MyBatis缓存介绍 正如大多数持久层框架一样,MyBatis 同样提供了一级缓存和二级缓存的支持 一级缓存: 基于PerpetualCache 的 HashMap本地缓存,其存储作用域为 Se ...
- win7在USB该解决方案不健全音箱
Win7安装后,原XP在正常工作USB小喇叭不工作,重新安装声卡驱动程序仍然是相同的.后来,通过以下的得心应手最后一次尝试. 1.右键右下角喇叭button. 2.点击"播放设备" ...