分布式存储系统的实现
2009-06-03 12:17:01 来源:WEB开发网数据修改操作会发布到所有的Cache中进行修改,而读操作则使用了负载均衡策略根据FS的CPU/Memory负载概率性的挑选请求服务的FS,也就是说CPU/Memory负载越高的FS被选中的概率越小。如果FS发布了Freeze命令,则Cache_Client会将该FS从当前活跃的FS列表中删除,当前活跃的FS的有效性为收到FSLive命令后的70s内,而FSLive消息每30s发送一次。
二.分布式锁的实现
FS只是负责数据存储,对数据的使用不进行任何承诺,所以必须提供锁功能来进行数据访问的保护,当然也可以提供给其它模块或用户程序进行系统/用户资源的保护。当用户程序不遵守自己的锁协议时可能会造成意外,但FS绝不会去介入数据的管理。
锁所占用的资源包括一个锁名、一个用于确认是否可以对锁进行操作的认证字和当前拥有锁的主机ID列表。对锁的实现不区分共享锁(读锁)还是互斥锁(写锁),由用户程序自己定义锁协议来自行解决资源访问的权限问题。
锁的存活时间只有5秒,如果没有持续的Lock动作则5s后自动释放。当发生锁冲突时(即同名锁本机已分配又从网络收到其它发布的同名锁但认证字不同)就会先释放锁,如果是本机加的锁则还会执行一个强制锁冲突(向网络发布该锁)后并通知客户程序。
三.数据日志的实现
当需要同步数据文件、备份数据文件时,都需要冻结对数据文件的写操作,所以针对此期间的数据修改(增、删、改、改名)都需要建立一个数据日志,将数据修改操作保存下来,等数据文件同步、备份操作完成后再将数据日志导入。要考虑到在执行数据日志导入的同时如果还有数据写操作发生该如何处理。由于时间仓促,本系统暂时使用了多份数据日志的方案而没有使用管道。
数据日志本质上就是一个文件,其中的格式按TLV(类型/长度/值)方式进行定义即可。
更多精彩
赞助商链接