如何从外部限制Golang http上传?

时间:2016-11-02 20:08:51

标签: linux go https rate-limiting trafficshaping

我有一个golang实用程序,它通过https将大量数据上传到OpenStack Object Storage。我在Ubuntu Linux上运行它,我想确保它的最大上传带宽不超过2,500KB / s,最好不要影响同一系统上的其他用户(即减慢以太网接口)。

我怎样才能做到这一点,最好不要改变我的源代码?到目前为止,我尝试了几种方法:

  1. 流量整形:我一直无法找出影响单个流程的相应网络整形技术,但我知道iptables和{{1}应该可行}。任何关于如何做到这一点的指导将不胜感激。我的网络背景不是很广泛。
  2. 流量限制:我尝试使用flowrate包来限制我对上传的写入速度。这没有任何可辨别的效果。我认为这不起作用,因为github.com/ncw/swift.ObjectCreateFile.Write()方法不会在收到数据时上传数据,而是在数据关闭时上传。我虽然错了。
  3. 涓流:我尝试了tc命令,但它与golang可执行文件不兼容(请参阅this question

2 个答案:

答案 0 :(得分:2)

事实证明,您可以将Golang进程包装在Docker容器中,然后使用tc实用程序对Docker容器的网络接口(来自容器内部)进行速率限制。请参阅this answer以获取一个Dockerfile示例。

答案 1 :(得分:1)

如果您可以控制实际运行该实用程序的方式,则可以使用trickle

sudo apt-get install trickle #since you're on Ubuntu
trickle -u (upload limit in KB/s) -d (download limit in KB/s) executable

以下是一些有关它的其他文档https://wiki.archlinux.org/index.php/Trickle