如何合理利用多个中国大陆小带宽服务器?

我们知道在中国大陆带宽单价非常昂贵,一个1Mbps 带宽的机子一年就得卖好几百人民币,这是不值当的,当然我们可以去低价漂阿里云、腾讯云的轻量服务器,99包年,但是带宽太小很难崩。

所以,我们必须构建一个能够把多个99包年云服务器带宽叠加起来的解决方案才行,否则买单台也亏,在我眼中几兆上传带宽太小了,连小水管都不是,小水管起码30上商用上行带宽,我这边本地都是拉的几条200M/200M上下行对等带宽的固定IP商业带宽。

无法榨干这些垃圾小带宽服务器的是一种技术人员的重大失误,近期入手两台服务器,一个华为云3M、一个腾讯云4M带宽的机子。

把它两个带宽叠加在一起就有7M,1080P视频是能稳定流畅看了,4M带宽单机吞吐看1080P有点够呛。

当然,我现在非常非常的气愤,因为我本来可以买到两台腾讯云4M轻量服务器的,但是我当时居然退单了想第二天再来,这波就给坑了,等下个月看有没有机会入手一台。

腾讯云这个饥饿营销,玩的可以啊,妥妥恶心人。

利用中国大陆多个小带宽机子,非常重要是多个小带宽大陆机的流控/帧控算法,对于UDP/IP类的带宽聚合是帧控算法,对于TCP/IP类的带宽聚合是流控算法。

但是我们并需要实现那么的复杂,可以直接采用 “TCP/IP”、“KCP/ENET” 之类的传输控制协议作为下层。

这可以减少我们自己需要去实现:“带宽退让”、“ARQ”、“SACK(选择确认)”、“NAK(否定应答)”、“ACK(确认应答)” 等这些机制。

带宽退让是滑块窗口与重传这部分关联的算法,目的是为了平衡链路拥塞层度,这些可以用成熟现成的控制算法来实现它们。

我们要做的轻量的控制算法,即:只需要保证帧的序及帧缓存积压的问题,就可以,另外我推荐用TCP/IP作为下一层,因为KCP这些协议不适合传输大包,它们是为了小包及时性设计的,所以可以容忍20~30%的带宽损失。

但是我们做小带宽聚合器的目的是什么?是为了提高单机可以获得最大带宽,让这些小带宽机子带宽要榨干,狠狠跑起来,而且更现实的时,这些小带宽机子总带宽大小就几Mbps 上传,你居然会上ENET、KCP这些功耗比较大的控制协议,是不是不合适。

OK,回到重点:

1、由于每个链路通路之间延迟是不同的

     所以:虽然用TCP/IP、KCP这些下层协议保证了段的连续性,但在多个链接输入帧的情况下会出现乱序的问题,如果是单个链接,直连不就好,搞这些东西干什么,搞这个东西目的就是为了榨干所有中国大陆中转机的上行带宽。

2、帧序在链路长时间工作之后,100%会出现序号回绕问题(可以参考TCP/IP、KCP协议栈是怎么处理的)

     一般按照通信行业长期测试的经验,若帧序为四个字节,产生序号回绕问题:只需要通过该公式即可确定:BOOL wraparound = (ack - seq) > (UINT32_MAX / 2)

    帧序回绕问题在接收端处理,但需要确保基本对于接受缓存挤压的帧(TCP之中为段)正确排序,这个不难处理,排序时根据这个算法判断就可以了。

但要注意一个点:

    插入算法应该要高度优化下,必须做成快速插入(来保证排序顺序),而不是很高成本的排序,在控制算法之中,由于通路之间的延迟、乱序、拥塞层度不同,可能会产生很严重的接收端积压问题,一次性积压个几百帧是一点问题都没有的。

    但积压大量的帧缓存,可能会产生很高的网络延迟,这是控制协议的弊端,但是你还真的自己好好做下控制协议,若你不在自己这层控制,让UDP/IP的应用去自己去处理这些问题,它们的传输效率就会非常慢的。

   举个小例子:QUIC/IETF HTTP3.0,如果你在你这层不控制帧序,就以上面两个机子的带宽条件,视频链接速度只有5000 ~ 6000,但是你带了控制协议,它们速度可以达到7000 ~ 10000Kbps,所以不要认为没有作用及意义。

3、连续确认

     这个简单讲讲就行了,当输入帧序为当前接收端确认帧时(注意:ACK都是预测法,即它永远ACK下一帧) 

     因为链路之间速度、延迟、拥塞的不同,可能未来的帧已经提前到达接收端,并且接收端将其缓存堆积在链上(接收方缓冲区),但需要确认的帧还没有到达,这个途中可能积压了几十、几百个帧。

    所以;你需要在确认了下个帧之后,连续确认堆积在接收方队列缓存之中的帧,以便提高网络的传输效率。

当然还有一些细节上的东西要处理,本文就不过多聊这些东西了,大体解决上面那三个就可以,对于TCP/IP的带宽聚合器;可以查阅 Rust 语言编写的开源工具:

surban/aggligator: Aggregates multiple links (TCP, Bluetooth, USB or similar) into one connection having their combined bandwidth and provides resiliency against failure of individual links. (github.com)

本人不需要这种工具,是单独做了一个UDP/IP的,但这两种实现都大同小异,中心思想都是需要一个专用控制协议来处理的,底层传输介质用TCP、还是UDP+KCP 这类都可以,当然这取决于实际的生产场景。

NETWORK UDP/IP AGGLIGATOR 猛禽宽频聚合器【鱼合掌不可兼得,但可以强行兼一下】

游戏延迟:成都移动 -(广州华为云/广州腾讯云;聚合)- 54~57 RTT

宽频吞吐:3 + 4 = 7Mbps 打满带宽

效果图(一):

效果图(二): 

效果图(三):

欲获取猛禽工具,可以在我的GITHUB上面找到我们TG群的地址,加入进来获取,目前这个工具暂时是不开源的,本文也只是大约聊聊,它是怎么实现的。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/187.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux进阶篇:重定向和管道操作

Linux中的重定向和管道操作 llinux中的三种IO设备: 标准输入(STDIN),文件描述符号为:0,默认从键盘获取输入 标准输出(STDOUT),文件描述符号位:1,默认输出到显示终端 标准…

5GNR刷题

5G帧结构 5G NR帧结构的基本时间单位是( C ) A) subframe B) slot C) Tc D) symbol 5G无线帧长是多少ms(B) A) 5 B) 10 C) 20 D) 40 下面哪种子载波间隔是中国移动白皮书中规定必选(B ) A) 15KHz B) 30KHz C) 60KHz D) 120KHz 5G参数集包含哪…

【笔试训练】day5

今天的题,最后一题忘公式了,卡了一会推出来了 1、游游的you 思路: 看清题目意思就行,这里的相邻两个o可以重复算,也就是说,“ooo”算2分。 先算you的得分,再算oo 对了,不开long lo…

24年蓝桥杯java-b组

24年蓝桥杯javaB组 蓝桥杯在昨天考完了,结果很不乐观,哎,还是太笨了,脑子确实转的慢;😥 本篇博客中解题思路和代码并不一定完全正确,是我和同学们讨论的解答方法,但并未使用官方题…

【python从入门到精通】-- 第五战:函数大总结

🌈 个人主页:白子寰 🔥 分类专栏:python从入门到精通,魔法指针,进阶C,C语言,C语言题集,C语言实现游戏👈 希望得到您的订阅和支持~ 💡 坚持创作博文…

Leo赠书活动-24期 【三大层次学习企业架构框架TOGAF】文末送书

✅作者简介:大家好,我是Leo,热爱Java后端开发者,一个想要与大家共同进步的男人😉😉 🍎个人主页:Leo的博客 💞当前专栏: 赠书活动专栏 ✨特色专栏:…

自定义Centos的终端的命令提示符

背景 当我们使用终端登陆Centos时,就自动打开了ssh终端。这个终端的命令提示符一般是这样的: 这个以#号结束的一行字,就是我们说的命令提示符了。 这个是腾讯云的服务器的提示符,可以看到主机名是VM-4-7-centos。 但是这个看起…

STL库 —— priority_queue 的编写

目录 一、 优先级队列的介绍 二、优先级队列的使用 2.1 建大堆 less 2.2 建小堆 greater 2.3 详解 greater 与 less 三、 priority_queue 的模拟实现 3.1 编写框架 3.2 编写简单函数 3.2 进堆 向上调整 3.3 出堆 向下调整 四、完整代码 一、 优先级队列的介绍 1.…

web轮播图

思路: 例如:有5张轮播的图片,每张图片的宽度为1024px、高度为512px.那么轮播的窗口大小就应该为一张图片的尺寸,即为:1024512。之后将这5张图片0px水平相接组成一张宽度为:5120px,高度依然为:5…

守望先锋2怎么在steam上玩 守望先锋归来steam下载安装

守望先锋2怎么在steam上玩 守望先锋归来steam下载安装 《守望先锋2》是知名游戏开发商暴雪娱乐开发的团队射击游戏。与第一部相比,守望先锋2加入了更多元素和新特性。游戏设定在未来的世界,玩家可以选择不同的英雄(heroes)加入战…

python聊天室

python聊天室 文章目录 python聊天室chat_serverchat_client使用方式1.局域网聊天2.公网聊天 下面是一个简单的示例,包含了chat_client.py和chat_server.py的代码。 chat_server chat_server.py监听指定的端口,并接收来自客户端的消息,并将消…

WdatePicker异常,无法弹出日期选择框

官网:My97日期控件官方网站 My97 DatePickerhttp://www.my97.net/ 可能使版本太老了,可以更新一下,然后根据官方的文件进行使用。 我的异常是因为在网上找的包里面缺少文件,去官网拉了一下最新的就行了。

AR地图导览小程序是怎么开发出来的?

在移动互联网时代,AR技术的发展为地图导览提供了全新的可能性。AR地图导览小程序结合了虚拟现实技术和地图导航功能,为用户提供了更加沉浸式、直观的导览体验。本文将从专业性和思考深度两个方面,探讨AR地图导览小程序的开发方案。 编辑搜图 …

数据结构之排序了如指掌(二)

目录 题外话 正题 选择排序 选择排序思路 选择排序代码详解 选择排序复杂度 双向选择排序 双向选择排序思路 双向选择排序代码详解 堆排序 堆排序思路 堆排序代码详解 堆排序复杂度 冒泡排序 冒泡排序思路 冒泡排序代码详解 冒泡排序复杂度 小结 题外话 今天…

变配电场所智能综合监控系统无人化与自动化升级改造

一 项目背景 国家电力建设飞速发展,为了提高管理水平,智能化建设迫在眉睫。变配电场所作为电网中的核心单元,数量巨大,是智能化建设的中坚部分。但由于变配电场所分布的地理位置过于分散,且配电网的自动化水平有待提高,单纯依靠人力来对变配电场所进行巡视,不仅增加…

【canvas】canvas综合运用:心形图案

#简言 利用canvas画出心形图案。 心形 心形图案可以两个椭圆相交组合&#xff0c;也可以直接画路径实现。 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" conte…

labelimg安装和使用(解决闪退问题)

&#x1f308;个人主页&#xff1a;Rookie Maker &#x1f525; 系列专栏&#xff1a;计算机视觉 &#x1f3c6;&#x1f3c6;关注博主&#xff0c;随时获取更多关于IT的优质内容&#xff01;&#x1f3c6;&#x1f3c6; &#x1f600;欢迎来到我的代码世界~ &#x1f601; 喜…

图与图搜索算法

图搜索算法是一个非常重要的概念&#xff0c;它是计算机科学中图论和算法设计的基础部分。在开始讨论图搜索算法之前&#xff0c;我们需要先理解什么是图以及图的基本结构。 什么是图&#xff1f; 图&#xff08;Graph&#xff09;是一种非线性数据结构&#xff0c;它由一组点…

点云的投影------PCL

点云的投影 /// <summary> /// 参数化模型投影点云 /// </summary> /// <param name"cloud">点云</param> /// <param name"x">投影平面x面的系数</param> /// <param name"y"></param> /// &…

Python下利用Selenium获取动态页面数据

&#x1f525; 交流讨论&#xff1a;欢迎加入我们一起学习&#xff01; &#x1f525; 资源分享&#xff1a;耗时200小时精选的「软件测试」资料包 &#x1f525; 教程推荐&#xff1a;火遍全网的《软件测试》教程 &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1…