前言

最近逛了某论坛,服务器越来越多了(在此发誓再也不买无用的服务器),拜此所赐,对vps的理解也较之前提升了一些,本文将引导你了解vps的相关内容

ps: 阅读本文之前你需要具备一定量的cs相关知识

网络资源解惑

在刚开始玩linux服务器时,买了一个服务器宣称最高速率达1000Mbps

但实际上如果用iperf3测试,却无法达到标称的速率,萌新的我百思不得其解

这是否意味着商家说谎了呢

原因其实有很多

vps的定义

首先vps实际上是共享主机,又称小鸡,是由独立服务器生出来的经过虚拟化技术如KVM or LXC分离出来的一个虚拟机,假如你熟悉vmware的话,你可以将这样的主机看作一个vmware虚拟机

那么既然是虚拟机,就会受限于主机的性能,同一个主机上可以有很多小鸡,可以看成你的邻居

若你的邻居平均占用了80%资源,那你此时只能使用余下的20%资源

包括但不限于

  • 网络
  • 硬盘io
  • cpu用量

除非是主机商宣称的独占资源(即你自己一个人用),否则你只能使用剩下的能够使用的资源

cn的出路由和回程路由

带宽其实是非常珍贵的资源,尤其是ipv4带宽

如果你的vps位置不在中国,网络会受到出口路由和回程路由的限制

在CN,由于边缘节点路由器设备较老或出国带宽占用较大还有一些你知道但不能说的原因,国际带宽其实十分受限,只有三大运营商商用出国宽带的速率能得到保证

三大运营商的普通出国和回程线路为

  • 电信163
  • 联通4837
  • 移动cmi

若你的vps地理位置更远,访问时则会受到进一步的带宽限制,如降速,丢包等等,当然这也和路径的上游路由有关,但在CN最主要的还是三大运营商的限制

在网络高峰期时(俗称的晚高峰),普通路由一般只能有较低的能够接受的带宽表现

那要如何才能获得比较好的带宽表现呢

你的路由必须是三大运营商的商用路由线路

  • 电信CN2
  • 联通9929
  • 移动cmin2

当你的vps是这些去程/回程路由时,你的带宽表现将获得比较好的改善

啊主播主播,你劈里啪啦说了一堆路由,到底什么是163/4837/cmi/CN2/9929/cmin2呢
你只需要知道是哪一家运营商的线路就行了,在你运行一些集成工具脚本时(如下面的融合怪)你就会看到这些路由的关键字

那你可能又要问,啊主播主播,为什么我用普通163/4837/cmi的香港机也能获得比较好的体验呢

这就要说到距离和直连

若你的访问距离较近,且延迟较低,就能够在三大运营商的qos(你可以看成限速)策略中获得比较好的体验

以最近很火的claw为例子

运行融合怪作为测试

curl -L https://gitlab.com/spiritysdx/za/-/raw/main/ecs.sh -o ecs.sh && chmod +x ecs.sh && bash ecs.sh

选择 单项测试->三网回程路由(6)

可以看到三网的回程是香港直达广州,没有绕路行为(10ms延迟),电信由于走了4837的联通网,而非电信自己的网络,会受到qos,所以延迟是60多(但实际上体验也还可以)

这样回程带宽是有一定保证的

那么去程呢?去程其实相比回程来说没有那么重要。因为相对服务器来说,服务器的网络压力在上传,当你作为客户端请求服务器的资源,服务器需要较好的回程路由来保障上传带宽,相对于去程比较重要

顺便我们再来看看claw的去程

使用itdog做去程路由检测

电信去程

相对比较直连

联通去程

移动

移动联通都是直连,15ms和21ms的延迟,可以说和国内差不多了

综上所述,claw的网络速率才会像网络上说的一样让人惊艳

主播主播,你一直说直连直连,到底什么是直连啊

举个不直连的例子,最近论坛赠送了一个yxvm的虚拟机(谢谢yxvm和nodeseek),就拿这个机子的网络来说吧

只说回程路由就可以了

同样是香港机,这里的电信,联通都是绕道日本,再回北京进入国内,这样的延迟在回国的路由优先级中并不是很高

可以来看看脚本自带的测速

这里可以看联通和电信的服务器上传带宽,只有惨淡的1.43Mbps甚至更低

当然这里对于移动就是快乐机了,移动用户访问这个服务器的网站就会很快

若你想了解更多,可以查看别人写的【第二期】面向小白:国内ISP与国际ISP的互联详情(目前nodeseek已被墙,请使用代理访问)

单线程速度的影响

说完以上其实本文最开始的问题已经解答的差不多了,这里补充以下单线程

首先你得明白什么是单线程,这里概括一下就是一个线程发起的单一网络请求(http/1.1,以下都以http/1.1举例)

相对于多线程发起的网络请求,肯定是速度较慢的

但为什么要说单线程呢

大部分网络请求(除了下载这种比较特殊的)其实都是单线程,就拿网页前端发起请求来说,我是学后端的不太懂

比如ajax()请求一个很重要的资源(如主要的css或者js),是单线程访问的

若单线程不稳定,丢包,长时间tcp被qos限速,最后无速度,在最开始的网页设计中就会整个网页加载不出来,即便是你的多线程非常非常快,单线程没有速度,体验必然会很糟糕

顺带一提现在由于异步+资源分散的设计,还有h2, h3的改善链接,基本不会这样了

举个鲜明的例子就是下载东西时卡在99%,速度却突然降速为0就是因为多线程基本结束了下载任务,只剩几个单线程,这几个单线程又开了比较长时间的链接,最后会被运营商限制速度,把他暂停后重启任务,直接就变成100%了

讲到这里自然能明白单线程速度的重要性

vps的相关性能指标

如果你是图吧垃圾佬,卡吧神秘黄牌,这一段讲的东西自然很熟悉

  • cpu单核性能
  • 网络单线程速度
  • 磁盘io性能(4k, 顺序读)
  • 内存读写速度(其实不是很重要

很多人认为一个好的建站机只需要关注其cpu单核/多核性能,我认为是不全面的,我觉得还需要关注磁盘4k的io,如大型数据库等应用

当然99%百分性能响应时间的改良其实还是集中在你写的史山代码

我常用的测试工具有

融合怪可以测出大部分你想要的参数,如网络回程速度,回程路由,硬盘io,cpu性能等等

ipquality则用来检测你的ip质量,如abuse,流媒体解锁(魔法相关)等等

机子到手后可以使用这两个脚本进行检测,根据结果去决定vps的使用方法

ipquality如能解锁chatgpt,则你可以做分流到这个机子不说了,再说怕吃警告QAQ,具体还是自己探索吧

后记

本来其实不太想写vps相关内容的,因为感觉没什么技术相关含量,但想想还是写一下吧,年轻的时候还是踩过不少坑,希望这篇文章能给看到的人绕开坑

相信看完之后你也能明白机子的性价比(如回程是CN2就比较贵,单核性能高就比较贵,原生ip解锁就比较贵等等)