Aliyun Code

首页  >   chuyu / tfs

项目语言:c

创建者:daodao 创建时间:2011年11月04日

简介

metaserver是我们在2.0版本引进的一个服务. 用来存储一些元数据信息, 这样原本不支持自定义文件名的 TFS 就可以在 metaserver 的帮助下, 支持自定义文件名了.

组成

metaserver 由一个主控节点(rootserver), 若干服务节点(metaserver) 组成. rootserver 主要管理所有的 metaserver. 而metaserver 完成跟文件相关的操作. metaserver 缓存最近的被访问到目录和文件信息. 对于任何写入, 除了更改自己的缓存外还要更改后端持久化存储中的内容. 目前我们暂时使用 mysql 数据库提供后端持久化存储, 将来会替换成淘宝自己的分布式数据库 oceanbase.

访问过程

客户端在做自定义文件名的读操作的时候, 会先从 rootserver 得到关于 metaserver 的信息, 并缓存在自己的内存中. 然后用自定义文件名去 metaserver 中查找 TFS 文件名信息, 再去 TFS 中访问该文件. 客户端在做自定义文件名的写操作的时候, 会先写入到 TFS 中, 再把 TFS 文件名和自定义文件的对应关系写入metaserver中.

自定义文件名的限制

我们目前要求使用自定义文件名的时候必须传入一个app_id 一个 uid. 这两个 id 成为所有自定义文件名的固定前缀. mv 操作只能在相同的app_id, uid 之下进行. 这样做是我们为了简化实现复杂度. 我们的应用都是要面向海量客户, 每个客户自身的数据量有限. 有了上面的限制, 我们可以总是把对同一个app_id uid的请求用相同的 metaserver 来响应. 这样使得我们可以很容易的处理数据一致性问题.

写文件的特殊点

在使用自定义文件名写文件的时候, 必须先调用 creat_file 接口建立文件. 文件建立之后, 可以多进程并发的写这个文件. 这样是为了便于大文件的分片上传. 我们还是不支持对已有文件的修改, 所以分片上传的时候各个分片是不能互相覆盖的.

后续计划

目前自定义文件名提供的功能还比较简单初级, 我们会根据应用的需求逐步完善功能, 提高性能. 我们将来计划在 oceanbase 团队的帮助下, 把后端存储替换成 oceanbase 数据库. 另:编译时候我们设置了 mysql 的最低版本, 这个版本设置的比较高, 其实只要是5.0以上版本就可以支持这个应用.