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

news2024/9/24 11:24:00

我们知道在中国大陆带宽单价非常昂贵,一个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.coloradmin.cn/o/1606331.html

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

相关文章

钉钉直播回放怎么下载到本地

钉钉直播回放如何下载到本地,本文就给大家解密如何下载到本地 工具我已经给大家打包好了 钉钉直播回放下载软件链接:https://pan.baidu.com/s/1_4NZLfENDxswI2ANsQVvpw?pwd1234 提取码:1234 --来自百度网盘超级会员V10的分享 1.首先解压好我给大家…

使用脚本启动和关闭微服务

使用脚本启动和关闭微服务 一、前言二、启动1、处理每个服务2、编写启动脚本3、其他启动脚本(无效,有兴趣可以看看)4、启动 三、关闭1、测试拿服务进程id的命令是否正确2、编写关闭脚本3、关闭 一、前言 假如在服务器中部署微服务不使用 doc…

ElasticSearch:基础操作

一、ES的概念及使用场景 ElasticSearch是一个分布式,高性能、高可用、可伸缩、RESTful 风格的搜索和数据分析引擎。通常作为Elastic Stack的核心来使用 我们通过将ES 和 mysql对比来更好的理解 ES,ES和mysql相关的基本概念的对比表格如下: …

从Linux角度具体理解程序翻译过程-----预处理、编译、汇编、链接

前言: 在C语言中,我们知道程序从我们所写的代码到可执行执行的过程中经历了以下过程 1.预处理 2.编译 3.汇编 4.链接 可以通过下图来理解 翻译过程 1.预处理 该过程主要进行以下操作: (1)头文件的包含 (2)define定义符号的替换&#xff…

稀碎从零算法笔记Day52-LeetCode:从双倍数组中还原原数组

题型:数组、贪心 链接:2007. 从双倍数组中还原原数组 - 力扣(LeetCode) 来源:LeetCode 题目描述 一个整数数组 original 可以转变成一个 双倍 数组 changed ,转变方式为将 original 中每个元素 值乘以 …

EFK架构部署

7.17版本 准备工作 配置域名 cat >> /etc/hosts <<EOF 192.168.199.149 elk149daidaiedu.com 192.168.199.150 elk150daidaiedu.com 192.168.199.155 elk155daidaiedu.com EOF 修改主机名 hostnamectl set-hostname elk155.daidaiedu.com 免密登录 ssh-keyge…

# 从浅入深 学习 SpringCloud 微服务架构(一)基础知识

从浅入深 学习 SpringCloud 微服务架构&#xff08;一&#xff09;基础知识 1、系统架构演变&#xff1a; 1&#xff09;单体应用架构。如电商项目。 用户管理、商品管理、订单管理&#xff0c;在一个模块里。 优点&#xff1a;开发简单&#xff0c;快速&#xff0c;适用于…

VScode远程连接虚拟机提示: 无法建立连接:XHR failed.问题解决方案

一问题描述 在vscode下载插件Remote-SSH远程连接虚拟机时提示无法建立连接 二.最大嫌疑原因&#xff1a; 我也是在网上找了许久&#xff0c;发现就是网络原因&#xff0c;具体不知&#xff0c;明明访问别的网页没问题&#xff0c;就是连不上&#xff0c;然后发现下载vscode的…

前端CSS基础4(像素,颜色,字体属性大小复合属性)

前端CSS基础4&#xff08;像素&#xff0c;颜色&#xff0c;字体属性大小复合属性&#xff09; CSS代码编写位置CSS像素CSS颜色CSS常用字体属性和大小字体的复合属性 CSS代码编写位置 在HTML文件的头部使用 <head><style>/* 在这里编写CSS代码 */</style> …

Meta Llama 3强势来袭:迄今最强开源大模型,性能媲美GPT-4

前言 Meta的最新语言模型Llama 3已经发布&#xff0c;标志着在大型语言模型&#xff08;LLM&#xff09;领域的一次重大突破&#xff0c;其性能在行业内与GPT-4相媲美。此次更新不仅提升了模型的处理能力和精确性&#xff0c;还将开源模型的性能推向了一个新的高度。 Huggingf…

从0开始学人工智能测试节选:Spark -- 结构化数据领域中测试人员的万金油技术(二)

Dataframe dataframe 是spark中参考pandas设计出的一套高级API&#xff0c;用户可以像操作pandas一样方便的操作结构化数据。毕竟纯的RDD操作是十分原始且麻烦的。而dataframe的出现可以让熟悉pandas的从业人员能用非常少的成本完成分布式的数据分析工作&#xff0c; 毕竟跟数据…

数仓建模—数仓架构发展史

数仓建模—数仓架构发展史 时代的变迁&#xff0c;生死的轮回&#xff0c;历史长河滔滔&#xff0c;没有什么是永恒的&#xff0c;只有变化才是不变的&#xff0c;技术亦是如此&#xff0c;当你选择互联网的那一刻&#xff0c;你就相当于乘坐了一个滚滚向前的时代列车&#xf…

电视音频中应用的音频放大器

电视机声音的产生原理是将电视信号转化为声音&#xff0c;然后通过扬声器将声音播放出来。当我们打开电视并选择频道时&#xff0c;电视机首先从天线或有线电视信号中获取声音信号。声音信号经过放大器放大之后&#xff0c;就能够通过扬声器发出声音。电视机声音的产生原理和音…

Ubuntu20.04 ISAAC SIM仿真下载使用流程(4.16笔记补充)

机器&#xff1a;华硕天选X2024 显卡&#xff1a;4060Ti ubuntu20.04 安装显卡驱动版本&#xff1a;525.85.05 参考&#xff1a; What Is Isaac Sim? — Omniverse IsaacSim latest documentationIsaac sim Cache 2023.2.3 did not work_isaac cache stopped-CSDN博客 Is…

2024蓝桥杯每日一题(最短路径)

备战2024年蓝桥杯 -- 每日一题 Python大学A组 试题一&#xff1a;奶牛回家 试题二&#xff1a;Dijkstra求最短路 II 试题三&#xff1a;spfa求最短路 试题四&#xff1a;作物杂交 试题一&#xff1a;奶牛回家 【题目描述】 晚餐时间马上就到了&#x…

【JavaEE多线程】Thread类及其常见方法(上)

系列文章目录 &#x1f308;座右铭&#x1f308;&#xff1a;人的一生这么长、你凭什么用短短的几年去衡量自己的一生&#xff01; &#x1f495;个人主页:清灵白羽 漾情天殇_计算机底层原理,深度解析C,自顶向下看Java-CSDN博客 ❤️相关文章❤️&#xff1a;清灵白羽 漾情天…

【opencv】dnn示例-segmentation.cpp 通过深度学习模型对图像进行实时语义分割

模型下载地址&#xff1a; http://dl.caffe.berkeleyvision.org/ 配置文件下载&#xff1a; https://github.com/opencv/opencv_extra/tree/4.x/testdata/dnn 该段代码是一个利用深度学习进行语义分割的OpenCV应用实例。下面将详细解释代码的功能和方法。 引入库 引入了一些必要…

蓝桥杯2024年第十五届省赛真题-宝石组合

思路&#xff1a;参考博客&#xff0c;对Ha,Hb,Hc分别进行质因数分解会发现&#xff0c;S其实就等于Ha&#xff0c;Hb&#xff0c;Hc的最大公约数&#xff0c;不严谨推导过程如下&#xff08;字丑勿喷&#xff09;&#xff1a; 找到此规律后&#xff0c;也不能枚举Ha&#xff…

Go 单元测试之mock接口测试

文章目录 一、gomock 工具介绍二、安装三、使用3.1 指定三个参数3.2 使用命令为接口生成 mock 实现3.3 使用make 命令封装处理mock 四、接口单元测试步骤三、小黄书Service层单元测试四、flags五、打桩&#xff08;stub&#xff09;参数 六、总结6.1 测试用例定义6.2 设计测试用…

医学图像三维重建与可视化系统 医学图像分割 区域增长

医学图像的三维重建与可视化&#xff0c;这是一个非常有趣且具有挑战性的课题&#xff01;在这样的项目中&#xff0c;可以探索不同的医学图像技术&#xff0c;比如MRI、CT扫描等&#xff0c;然后利用这些图像数据进行三维重建&#xff0c;并将其可视化以供医生或研究人员使用。…