一个用Go写的集群数据分发工具


背景

在工作中遇到大数据(20G左右)批量部署的问题,刚开始通过scp或者rsync限速80M串行分发,大约每台机器的耗时为5分钟,极大的增加了大批量部署的时间和难度,各种难产。于是作者就花了一天多的时间做了个简易的传输工具,现在还不太成熟,希望对大家有启发,更希望大家多多提建议

思路

将传输完成的目标机器转换成数据源为其他机器提供数据源服务。(相当于《行尸走肉》中的僵尸一样,每一个被感染的个体都是传染源)

语言选型

对于数据传输来说,个人认为语言不是瓶颈而是传输的方法(串行、并行还是其他),之所以选择 go 是因为 go 可以编译后扔到机器上直接执行(Python需要安装各种依赖包增加了部署的难度)

依赖

由于公司机器都已安装FTP服务且已配置限速下载,所以工具本身不提供下载服务,下载限速也是写死在Client端的。

架构

C/S架构,即大家熟知的Client和Server结构。

Client:等待接受Server下载任务并执行。

Server:负责分发控制客户端的下载以及接受客户端的回传信息。

效果

第1次传输1台,第2次传输2台,第3次传输4台……第n次传输2(n-1)

台,也就是说传输1+2+4=7台数据的时间相当于串行传输3台机器的时间,并且传输的数量越多,相对串行传输时间越少。

废话不多说,直接上Server端代码。至于代码规范性,请大家忽略。代码以 GitHub 上为准。

客户端代码,相关写死的参数可以自行修改或者作为变量传入

服务执行完自动退出,主要目的:防止误操作,切断服务器后门。

PS0至于端口号是征用以前同事的,好记并且用的人少。相关问题欢迎留言

PS1完整代码请关注 https://github.com/51reboot/spore

作者为51Reboot架构师班第4期优秀学员,版权归作者所有

仅授权51Reboot公众号、博客等发布

转载请联系作者获得授权,并请注明出处


想要具备设计、架构、研发大型运维自动化系统的能力,并对操作系统 底层和Python底层具备相当的掌握的 程序员们,
为你们推荐 Reboot 的系统架构师课程哦,最新一期将于8月27日开班,感兴趣的小伙伴可以联系Ada:279312229
课程大纲:http://www.51reboot.com/course/arch/
文章分类 未分类

发表评论

电子邮件地址不会被公开。

在线交流

数百位业内高手和同行在等你交流
Reboot运维开发分享