加载中 ...
首页 > 软件介绍 > 基础软件 正文

非结构化数据存储系统

2019-03-24 15:53:31 来源:沈阳软件公司 作者:沈阳软件开发


  ADSMasterNode在内存中保存着整个文件系统命名空间和文件Blockmap的映像。这个关键的元数据设计得很紧凑,因而一个带有4G内存的 ADSMasterNode足够支撑海量的文件和目录。当ADSMasterNode汇海时,它从硬盘中读取Editlog和FsImage,将所有Editlog中的事务作用(apply)在内存中的FsImage ,并将这个新版本的FsImage从内存中flush到硬盘上,然后再truncate这个旧的Editlog,因为这个旧的Editlog的事务都已经作用在FsImage上了。这个过程称为checkpoint。在当前实现中,checkpoint只发生在ADSMasterNode汇海时,在不久的将来我们将实现支持周期性的checkpoint。
  ADSSlaveNode并不知道关于文件的任何东西,除了将文件中的数据保存在本地的文件系统上。它把每个ADS数据块存储在本地文件系统上隔离的文件中。 ADSSlaveNode并不在同一个目录创建所有的文件,相反,它用启发式地方法来确定每个目录的最佳文件数目,并且在适当的时候创建子目录。在同一个目录创建所有的文件不是最优的选择,因为本地文件系统可能无法高效地在单一目录中支持大量的文件。当一个ADSSlaveNode汇海时,它扫描本地文件系统,对这些本地文件产生相应的一个所有ADS数据块的列表,然后发送报告到ADSMasterNode,这个报告就是Blockreport。
六、通讯协议
  所有的ADS通讯协议都是构建在TCP/IP协议上。客户端通过一个可配置的端口连接到ADSMasterNode,通过SlaveProtocol与 ADSMasterNode交互。而ADSSlaveNode是使用ADSSlaveNodeProtocol与ADSMasterNode交互。从SlaveProtocol和 ADSSlaveNodeprotocol抽象出一个远程调用(RPC),在设计上,ADSMasterNode不会主动发起RPC,而是是响应来自客户端和 ADSSlaveNode 的RPC请求。
七、健壮性
  ADS的主要目标就是实现在失败情况下的数据存储可靠性。常见的三种失败:ADSMasterNode failures, ADSSlaveNode failures和网络分割(network partitions)。
1、硬盘数据错误
  每个ADSSlaveNode节点都向ADSMasterNode周期性地发送心跳包。网络切割可能导致一部分ADSSlaveNode跟ADSMasterNode失去联系。 ADSMasterNode通过心跳包的缺失检测到这一情况,并将这些ADSSlaveNode标记为dead,不会将新的IO请求发给它们。
2、集群均衡
  ADS支持数据的均衡计划,如果某个ADSSlaveNode节点上的空闲空间低于特定的临界点,那么就会汇海一个计划自动地将数据从一个ADSSlaveNode搬移到空闲的ADSSlaveNode。当对某个文件的请求突然增加,那么也可能汇海一个计划创建该文件新的副本,并分布到集群中以满足应用的要求。这些均衡计划目前还没有实现。
3、数据完整性
  从某个ADSSlaveNode获取的数据块有可能是损坏的,这个损坏可能是由于ADSSlaveNode的存储设备错误、网络错误或者软件bug造成的。ADS客户端软件实现了ADS文件内容的校验和。当某个客户端创建一个新的ADS文件,会计算这个文件每个block的校验和,并作为一个单独的隐藏文件保存这些校验和在同一个ADS 命名空间下。当客户端检索文件内容,它会确认从ADSSlaveNode获取的数据跟相应的校验和文件中的校验和是否匹配,如果不匹配,客户端可以选择从其他ADSSlaveNode获取该block的副本。
4、元数据磁盘错误
  FsImage和Editlog是ADS的核心数据结构。这些文件如果损坏了,整个ADS实例都将失效。因而,ADSMasterNode可以配置成支持维护多个FsImage和Editlog的拷贝。任何对FsImage或者Editlog的修改,都将同步到它们的副本上。这个同步操作可能会降低 ADSMasterNode每秒能支持处理的命名空间事务。这个代价是可以接受的,因为ADS是数据密集的,而非元数据密集。当ADSMasterNode重启的时候,它总是选取最近的一致的FsImage和Editlog使用。
  ADSMasterNode在ADS是单点存在,如果ADSMasterNode所在的机器错误,手工的干预是必须的。目前,在另一台机器上重启因故障而停止服务的ADSMasterNode这个功能还没实现。
5、快照
  快照支持某个时间的数据拷贝,当ADS数据损坏的时候,可以恢复到过去一个已知正确的时间点。ADS目前还不支持快照功能。
八、数据组织
1、数据块
  兼容ADS的应用都是处理大数据集合的。这些应用都是写数据一次,读却是一次到多次,并且读的速度要满足流式读。ADS支持文件的write- once-read-many语义。一个典型的block大小是5GB,因而,文件总是按照5G切分成Segment,每个Segment存储于不同的 ADSSlaveNode
2、步骤
  某个客户端创建文件的请求其实并没有立即发给ADSMasterNode,事实上,ADS客户端会将文件数据缓存到本地的一个临时文件。应用的写被透明地重定向到这个临时文件。当这个临时文件累积的数据超过一个block的大小(默认5G),客户端才会联系ADSMasterNode。ADSMasterNode将文件名插入文件系统的层次结构中,并且分配一个数据块给它,然后返回ADSSlaveNode的标识符和目标数据块给客户端。客户端将本地临时文件flush到指定的 ADSSlaveNode上。当文件关闭时,在临时文件中剩余的没有flush的数据也会传输到指定的ADSSlaveNode,然后客户端告诉ADSMasterNode文件已经关闭。此时ADSMasterNode才将文件创建操作提交到持久存储。如果ADSMasterNode在文件关闭前挂了,该文件将丢失。

“沈阳软件公司”的新闻页面文章、图片、音频、视频等稿件均为自媒体人、第三方机构发布或转载。如稿件涉及版权等问题,请与

我们联系删除或处理,客服QQ:55506560,稿件内容仅为传递更多信息之目的,不代表本网观点,亦不代表本网站赞同

其观点或证实其内容的真实性。