一个用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 上为准。

[root@docker100080 src]# cat p2pserver.go
package main

import (
       "bufio"
       "flag"
       "fmt"
       "github.com/gin-gonic/gin"
       "github.com/parnurzeal/gorequest"
       "io"
       "os"
       "strconv"
       "strings"
       "time"
)

 //定义slice
 var (
       SuccList[]string //成功列表
       FailList[]string //失败列表
       DstList  []string //目的列表
       //p2pConfig
       ListenPortstring
       Port       *string
       Server     *string
       Srcpath    *string
       Dstpath    *string
       Filename   *string
       Timeout    *int
 )
 var succ_ch = make(chan string
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值