存储 频道

分布式存储系统的实现

  【IT168 技术】敬惜人工智能系统平台希望能做成一个开放运营的平台,所以在数据存储方面除了可靠性、容错性以外对可用性的要求自然也要认真考虑。最后选择的实现是自行开发了一个分布式存储系统。

  一.分布式缓存的实现

  为了简化用户端的使用,提供了一个分布式缓存系统来提供对此分布式存储系统的访问接口以及本地数据缓冲以降低网络压力。

  分布式缓存使用自行开发的带流控的组播UDP消息传递系统做底层的数据传送。包括Sever和Client两个组件,Cache_Server运行在FS(文件服务器)主机上,Cache_Client运行在提供用户访问接口的UA(用户代理)主机或其它需要数据服务的主机上。Cache服务定义了11个消息:Request, Rename, Update, Lock, Freeze, RequestFile, TransFile, FileTransMessage(包括请求与传送), FSLive, Backup。其中Request, Rename, Update用于Cache_Client向Cache_Server请求数据服务,Lock用于Cach之间的锁操作,Freeze, RequestFile, TransFile, FileTransMessage用于传送文件,FSLive用于Cache_Server向Cache_Client发布当前可用FS的信息,Backup实现数据文件的备份。

  其中FileTransMessage消息将启用另外的一个消息传递类使用**的组播地址进行传送,只由文件发送方与待接收方使用以避免对其它的Cache用户造成干扰。文件本身被划分为8K大小的块进行传递,每个块进行MD5校验。如果是传递数据文件,FS会冻结所有的写操作同时发布Freeze消息并启动一个数据日志来保存所有的写操作,等文件传送完毕再重新导入所有的写操作。为了防止FS在导入数据日志时突然崩溃而引起数据不一致,FS使用了数据时标用于表示数据的新旧程度。

  Cache_Server和Cache_Client都实现了一个Hash树,用于缓存常用数据,基于LRU算法进行管理。

  数据修改操作会发布到所有的Cache中进行修改,而读操作则使用了负载均衡策略根据FS的CPU/Memory负载概率性的挑选请求服务的 FS,也就是说CPU/Memory负载越高的FS被选中的概率越小。如果FS发布了Freeze命令,则Cache_Client会将该FS从当前活跃的FS列表中删除,当前活跃的FS的有效性为收到FSLive命令后的70s内,而FSLive消息每30s发送一次。

0
相关文章