- 论坛徽章:
- 0
|
回复 #9 happy_fish100 的帖子
哥们,你这个系统做得貌似简单其实精巧!
仔细看了下机制,明白文件命名的好处了:
数据文件名由系统自动生成,包括4部分:存储服务器IP地址、当前时间(Unix时间戳)、文件大小(字节数)和随机数。文件名长度为22字节。
step1,tracker收到下载文件的请求时,从v1.2开始就可以直接从请求的文件名内解析出storage_ip和文件上传时间(Unix时间戳)、结合请求传来的的group;
step2.然后从该group存活的storage列表中找这个storage_ip(即该文件原来上传的ip,源ip),要是这个storage_ip停掉了即查找失败,则取该group内的存活的下一个storage_ip1并且比较文件上传时间和该storage_ip1同步时间戳,没有符合条件的好像会取该group内一个存活的ip给客户端。代码内这个机制要是注释清楚一些就更好了:)
step3,storage定期向tracker通报自己的最新做完的文件同步时间戳,这个时间戳需要退出tracker时才flush到storage_servers.dat,运行时我等了十来分钟都没看到更新进去。
storage_servers.dat中记录storage server相关信息,字段依次为:
……
16. stat.last_source_update:最近一次源头更新时间(更新操作来自客户端)
17. stat.last_sync_update:最近一次同步更新时间(更新操作来自其他storage server的同步)
非常感谢快乐鱼! |
|