分布式存储系统的实现
2009-06-03 12:17:01 来源:WEB开发网由于空间回收以及将碎片空间加入到空闲空间链中的动作都不是申请空间的请求者所关心的,所以为了加快处理对于这些操作都是先加入到一个等待队列中,然后启动一个线程每小时或等待队列达到一个阈值时后台低速执行即可。
七.用户接口
用户接口包括直接读写接口以及事务接口。事务接口前面已经描述过,直接的数据操作接口为了防止对系统的滥用而要求利用安全模块下的登陆功能登陆到系统后才能使用。
系统存取的都是字节数据,而引擎等应用约定使用的数据格式为XML,所以专门做了一个校验XML Schema的类为XML数据在读取时进行校验。
直接的数据接口还包括一个封装了锁操作的UserLock类,用于提供给用户进行资源保护,事务处理也使用了该类。
提供直接的数据接口的主要考虑是对于只读的应用操作来说,使用事务过于笨重了,另外对于限制了用户同时多重登陆的应用来说,直接进行写操作其实也很安全,而且存储系统本身又不负责任何数据管理工作,所以最终出于效率的考虑同时提供了事务处理接口和直接访问接口供应用程序自行选择,同时也要求应用程序自行负责数据的完整性。
目前所提供的所有用户访问接口都是同步操作接口。当用户读取数据时,会在读请求队列中插入一个读请求(如果有相同Key值的数据在读请求队列中就会将读请求合并,当然这一点意义不是很大,因为读操作很快,对同一个数据并发读的可能性很小,而第一个程序读到数据后就会保留在本地Cache中,后续的读操作根本就不需要从网络读取),然后会将客户程序阻塞以等待FS响应,该阻塞会在2s后超时(读请求本身也会在4s后超时)。因为目前平台还只是考虑敬惜本身的使用,为了降低用户程序的复杂性所以尚未考虑提供异步操作接口。
结语
分布式存储系统最终的实现使用了30多个文件,上万行代码,虽然很麻烦,搞的笔者两三个星期睡不好觉,也很粗糙,还有好几个功能都太繁琐。但达到了以最低成本来实现任何一台主机宕机对系统都没有任何影响的初衷,用户程序的使用更是非常简单而功能也很强大。尤其是通过开发这个分布式存储系统笔者对分布式系统有了实践经验,虽然限于时间太紧张所以系统还很粗糙,但进一步将其发展成为分布式数据库或是分布式计算平台都有了更大的可能性。
更多精彩
赞助商链接