Blobstore是一种持久的、断电安全的块分配器(block allocator)。它可以代替传统的文件系统,支持上层的存储服务。可以用于数据库(MySQL, RocksDB)、一些专门应用(SAN, NAS)或者分布式存储系统(ex. Ceph, Cassandra)等。Blobstore可以对块设备上一种叫“blob”的块群(groups of blocks)进行异步、非缓存(uncached)、平行的读写。blob通常很大,至少有几百KB,并且总是比块的大小要大。但是Blobstore不是为通用的存储系统设计的,它不支持POSIX。因此为了避免混淆,我们不用文件或者对象来称呼blob
Blobstore是为下一代存储设计的,这种存储设备可以快速随机读写,也不需要垃圾回收。不过目前也可以在NAND上运行。

概念

Blobstore对存储系统进行了如下抽象
notion image
    1. 逻辑块(logical block)
磁盘被划分为许多逻辑块,每个逻辑块都有自己从0到N的顺序编号,逻辑块的大小一般是512B或者4KB.
    1. 页(page)
一页由固定数量的逻辑块组成,在创建Blobstore的时候就定好了。组成页的逻辑块总是连续的。每个页也有自己的从0到N的顺序编号。一页的大小一般是4K,所以实际中一般由1~8个块组成。SSD起码要能对页面大小的逻辑块进行原子读写操作。
    1. 集群(cluster)
一个集群由固定大小的页组成,在创建Blobstore的时候就定好了。组成集群的页总是连续的。每个集群也有自己的从0到N的顺序编号。一个集群的大小一般是1M,也就是256页。
    1. blob
一个blob是一个有序的集群列表。blob是通过应用来操作的,这些操作即使断电或者重启也可以继续。应用通过标识号来唯一确定一个blob。在读写的时候,应用给出一个blob内的偏移量来访问blob里面的页面。应用也可以通过键值对的形式存储blob的元数据,也叫做扩展属性(xattrs, extended attributes)
    1. Blobstore
经过应用初始化,支持Blobstore存取方式的SSD叫做“一个Blobstore”。Blobstore元数据确定的区域归这个Blobstore所有。
 
Blobstore具有原子性:
  1. 写数据时,原子性以一个页面为单位
  1. 设定、修改blob、Blobstore元数据的操作是原子的
在Blobstore的操作没法完成时,系统不会阻塞,而是会调用API提供的回调函数。Blobstore可以在设备上直接运行,也可以在设备的bdev层上运行
 

原文地址:http://www.cnblogs.com/hushrush/p/16928040.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性