p2p数据分发
浏览:2775次 出处信息
分享下2年前做过的一个传输项目,比较粗糙,当年的相关文档找不全了:(
背景:
运维中经常遇到这类传输需求,A生成数据,然后将数据分发到下游B1,B2,B3….Bn。传统的做法有如下几种:
- A生成数据文件后,顺带生成flag(标记文件)。下游机器配置定时任务,定期探测A机器的数据是否生成,当生成后通过wget下载
- A生成数据文件后,直接通过scp将数据推送到下游机器。
上述方式一般都采用系统命令和SSH信任关系,对系统依赖较强,当IP/域名发生变化、wget/ssh版本不同、机器增删时都会导致传输异常。而且还需要考虑限速、续传、数据完整性等因素,甚至有些变态需求,如数据需要同时到达下游N台机器。所以设计了一套传输工具,替代scp/wget的方式,采用推送的方式将数据分发到下游,提供p2p、限速、传输中校验的功能。
主要功能:
- 1对N数据传输
- 支持P2P功能、分块大小,可开关
- 支持传输限速、续传、重试功能
- 支持传输完成后调用外挂程序功能
- 支持目录嵌套的文件传输
- 支持排除与指定正则表达式匹配的文件或目录的传输
- 可实时查询传输状态
- 支持对数据校验的可配置
- 上游身份认证功能
- 传输配置统一管理
- 支持send_file选项函数开关
设计思路:
流程描述:
懒得找图了,直接文字说明。详细的异常处理逻辑太多了,此处省去N千字,如果需要可以联系我:)(如,po机器死机、po网络中断、po下载过慢、避免单个po压力过大、避免master相对较闲等处理逻辑)
- 假设master控制3个po程序,将数据分成N块,然后将这些数据块分成3(按照下游po的数量)个数据块组。
- master生成种子信息,并连接CAC获取本次传输需要连接的po信息及相关配置。
- CAC授权本次传输,并生成随机的密钥。master通过获取的密钥,连接正确的po。
- po连接CAC验证密钥正确性后,本次传输开始
- po1第一次从tr获取第一个数据块组。第一次接收到从master第一个数据块组后,再分别从po2和po3上下载剩余的2个数据块组
- po1完成第一次数据块组下载后,按照master的控制,连接po2下载自己没有的数据块(第二个数据块组)
- po1完成第二次数据块组下载后,按照master的控制,连接po3下载自己没有的数据块(第三个数据块组)
- po2 和 po3 依次类推,循环连接其余po机器,完成数据下载。
- master和po中都会配置CAC的IP,CAC一般为多个,连接任意一个进行认证即可。是否开启P2P,限速以及传输后的动作都在CAC中进行配置。
- CAC采用epoll模式,读取配置并生成密钥,性能不是瓶颈
- 数据校验采用传输中校验,可以将全部校验再传输的cpu峰值降低,校验算法提供CRC和MD5 2种。
运行方式:
在每次传输时,master需要指定本次传输的类型,master通过类型连接CAC获取相关配置。
./masterwugui -c base1 -x a.txt b.txt c.txt -p /home/work/data/base
./masterwugui -h
./masterwugui -v
其中,-c用于指定传输的classname
-x用于指定排除的文件,可以是多个文件
-p用于指定源文件的目录
-h显示帮助信息
-v显示版本信息
po和CAC都是常驻内存运行,无参数。
优缺点:
优点
- 源端机器负载过大,挂载的下游机器有限
- 简化数据传输脚本的编写,将超时、限速、数据验证功能集成
- 提高下游的机器数据获取的速度
- 简化数据传输时对系统的依赖,如:ssh信任关系、proftp、wget、scp…
- 中配置管理,数据安全认证
缺点:
- 下游机器的负载会比传统wget负载载有所提升,可以通过限速进行控制。
- 传输的数据总大小有限制,不能超过100G
- 每次传输最多支持200个PO,如采用P2P模式,瓶颈还是在上游(已经有解决方案,下次分享)
测试:
- 测试环境:3台cac, 1台wugui, 20台po
- 测试数据:9.1G
case1:限速10m,且数据校验
case2:不限速,且数据校验
case3:不限速,不校验
建议继续学习:
- python实现一个P2P文件发布 (阅读:6715)
- NAT连通性测试工具以及Flash P2P中的NAT穿透原理 (阅读:4542)
- Amazon分布式系统Dynamo (阅读:4413)
- 提升PHP性能之改变Zend引擎分发方式 (阅读:1924)
QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习
扫一扫订阅我的微信号:IT技术博客大学习
<< 前一篇:新版twitter背后的技术
后一篇:挑战邮箱搜索(续一) >>
文章信息
- 作者:wilbur 来源: Makeinstall
- 标签: p2p 分发 数据传输
- 发布时间:2010-09-27 08:43:05
近3天十大热文
- [67] Go Reflect 性能
- [67] Oracle MTS模式下 进程地址与会话信
- [64] 如何拿下简短的域名
- [61] android 开发入门
- [61] 【社会化设计】自我(self)部分――欢迎区
- [60] 图书馆的世界纪录
- [60] IOS安全–浅谈关于IOS加固的几种方法
- [54] 视觉调整-设计师 vs. 逻辑
- [49] 读书笔记-壹百度:百度十年千倍的29条法则
- [48] 界面设计速成