云服务器

云服务器,各家的名字都不一样,aws上ec2, 阿里云上ecs, 腾讯云上叫cvm。其实就是云服务器。

这个是云厂商的基础中的基础了,这个容易让大家想成以前的托管和虚拟空间,但是其实是有很大的差别的。

托管是你自己把交换机,服务器送到机房,然后分配ip访问,理论上你是租用的IDC的电力和网络,有些好的还附带了简单的诸如重启这样的运维工作。服务器和交换机的产权还是你的,所以从财务角度来说买服务器和交换机属于capex。 而租用IDC的电力和网络是属于opex。

而虚拟空间其实就是租用一个程序空间,以前大多是php, asp这样的空间,你上传代码,空间会帮你进行处理。

那云服务器呢?

云服务器和物理服务器其实本质是相同的。依然要考虑的就是CPU,内存,磁盘,网络这几项。那我们分开来说。

CPU

CPU这个个人认为是非常要注意的,现在主流的云厂商都会跟intel和amd直接供货,导致它们这些厂商使用的CPU型号我们在intel官网或者AMD官网上都查不到对应的资料。

而我们对于cpu最重要的指标如下:

  1. 主频:现在主流的intel一般都是2.5GHz, AMD的一般都是2.9GHz. 但是有些云厂商会有一些库存的服务器,主频可能就2.1,或者2.2这样的。这种如果价格合适也可以考虑,但是如果本来就是跑计算的,那还是算了。但是现在云厂商都有PUE的指标,所以一般新的az都不会差,一些旧的az可能就这样了。

  2. cache:这个也是非常重要的,现在物理服务器的cache都是百兆级别的了,但是能够分给你的可能就一点点了。

    cache

比如我这个i5-12400F的cpu,那就很容易在intel官网查到对应参数:https://ark.intel.com/content/www/us/en/ark/products/134587/intel-core-i5-12400f-processor-18m-cache-up-to-4-40-ghz.html

L2 cache是 7.5MB, 而intel的smart cache是18M, 标准主频是2.5Ghz, 最高可以超频到4.4GHz, 这款cpu我个人玩是足够的了。看看以前的服务器的E5-2680 v2 才16M。

servercpu

内存

内存因为在云服务器里一般都看不到具体的频率,但是可以看到是否有ecc和具体大小。

1
sudo dmidecode -t memory 

通过这个命令就可以看到大小和是否支持ecc和ecc的类型。如果一个云服务器连ecc都没有的话,那就是属于作坊性质了。一般需要看下Data Width和spped这2个指标。

1
sudo dmidecode| grep -P -A16 'Memory Device' 

ECC主要是CPU和内存在交互过程中,可能会受到周围的电磁场的干扰,会有一定的概率导致比特翻转。这个统计是8G的内存每小时会发生1~5次这样的错误。这个你想要是处理银行数据,明明取5万,发生比特翻转后导致那一位变成了存5万,这种问题谁都受不了。

通常用ecc内存的服务器重启会比较慢一点,不过现在服务器都是全年24小时开的,所以这个也不算是多严重的缺点。

memory

磁盘

磁盘这个分类就特别多了,从接口上来说主要是IDE(应该没有了),SCSI,SATA2, SATA3, sas, PCI-E, m.2 还有别的,但是作为云服务器我们是不需要关注这些的。作为甲方,我们关心的就是iops, 吞吐,响应延迟,单盘最大容量,最大挂载设备这些影响自己使用的指标。

一般技术指标我们使用fio来进行测试,但是这个测试要维持24小时连续不断的测试,不能时间太多,那样无法发现真正的问题。

iops

这个各家云厂商都会公布自己的指标的。比如阿里云的和aws的。这些这里比较坑的一点,各家的iops的数据基于block size的大小是不一致的,有的是4K,有的是16K的,你得自己对比着看。

但是不能光看云盘本身的iops,还有对应的服务器本身的规格。这个各家也都是这样的,但是aws会每天有个30分钟的突增份额。而有些比如火山引擎的,那就限制的相当死,一点都超不了。

吞吐

这个也是一个比较验证的坑点,因为大家的吞吐的指标大多但是基于64K或者128K的block size进行计算的,所以很多时候大家也要看看自己的block size是多少,不要怪云厂商限制。当然实际也要看自己的文件大小分布是怎么样的,不能一概而论都改成128K这种,这种做的后果是如果小文件非常多,那就非常浪费空间了。

响应时长

这个在0.5ms相对是比较好的数字了,但是现在由于很多服务都只做计算,所以那种服务所在的云服务器基本不需要去考虑。而一些存储的服务器是非常重要的,比如kafka, elasticsearch, tendis这些,这些都对响应时间非常敏感的。0.5ms只是估算指,大家具体可以参考iostat的数据。

1
iostat -dmx 1

iostat

我们可以看到这里区分了写入等待还是读等待。这里可以看出来这个服务器的磁盘是相当的烂的。

以下数据就没法使用fio来测试了,我们只能看官方文档里。

单盘最大容量

这个一般查看官方文档,都有对应磁盘类型的最大容量,如果这种还不够怎么办呢? 那就用lvm来解决啊,lvm还有其他的妙用。

最大挂载设备数量

这个各家的差距是非常大的,有只支持挂12块盘的,也有据说支持128块盘的。这个一般情况下大家是用不到的。

但是我曾经在一台kafka的服务器上碰到了不够用的情况,而aws当时宣称的是可以挂载128块盘的,但是实际是25块盘就不能再挂载了。后来提给aws一个工单后,发现如果你要多于25块盘,那磁盘设备名字不能/dev/sdb 这样的,而应该是/dev/xvdb 这种4位的,而且不能修改。所以各位用的时候还是得小心。

后记

磁盘因为用的比较多,所以我们在实际使用的时候就会经常做一些操作想绕过这些限制。

比如我们之前为了绕开磁盘吞吐的限制,然后使用lvm的堆叠技术去做,其实就是RAID0的原理,也就是把几块盘合并起来当作一块盘来使用。这样用起来就会比较省钱。当然坏处是扩容的时候你得扩相同数量的盘数才行,不过我们一般就扩单盘的容量来进行扩容。

比如我这里把5块盘加起来用,但是这种操作是有性能损耗的。

1
2
3
4
pvcreate /dev/vdb /dev/vdc /dev/vdd /dev/vde /dev/vdf
vgcreate data /dev/vdb /dev/vdc /dev/vdd /dev/vde /dev/vdf
lvcreate -i5 -I 64 -l 100%FREE -n apps data
mkfs.xfs /dev/data/apps

网络

网络这里分为硬件和软件的,还有对外出口的.

网卡稳定性

如果从稳定性,优选intel网卡的,intel家的各种驱动都比较完善,这个就算是民用级别也是这样的,amd的机器经常搭载一些其他厂家的烂网卡芯片,自己用用就算了,生产环境用这个的就太冒险了, 如果你的应用对于网络要求高的话,那还是建议你用intel的机型。amd机型上我们跑的非常满的情况下出现过几次断流的情况。

线路

另外一个是对外出口的情况,国内厂家一般都是bgp出口,也有单电信单联通什么的,不过就算是bgp还有动态bgp和静态bgp,这个要看真假的话直接去查下as号就行,比如我们查看阿里云的一个AS号AS37963,这里我们再看这个as号的upstream就能知道了,这里我们可以看到电信和联通以及教育网的,但是居然没有移动的,这个就十分可疑了。当年世纪互联就是以8线BGP打开IDC市场的,M6,B28机房常年满的,不找点关系还进不去多点设备。

as

但是国外情况不一样,这些国产云厂商在海外都是租用别人的线路,比如tata这样的,他们的线路质量相比aws, azure这些自建的比来说还是差别相当大的。至今我们搜索塔塔和阿里云都能搜索到2017年的新闻。

而且国外这些厂家都不会限制带宽,所以传说中一夜破产是有可能的,而国产云厂商,由于常年需要给三大运营商打工,所以根本不可能给你来个无上限啥的,这点希望大宋政府能够放开,不然这些厂商根本不能竞争的过国外的云厂商的。想靠大宋自己的内循环是不可能做到世界第一的。我们看看cloudflare的as号就知道了,它跟551个as进行了连接,覆盖了200多个国家和地区。

cloudflareas

因此我们可以看到国内的云厂商的ecs都会有个单机ip的网络流量上限,比如100M, 200M啥的,如果想要增加的需要使用共享带宽包来进行,不过也是就到2Gbps而已。

安全组

安全组是云服务器很有用的一个功能,我们可以在这里定义进出的策略。可以指定到端口和ip, 这样就可以少了自己主机上防火墙的策略了。比如像我们就只开放对方公网的端口,其他就端口都是ip白名单的形式去存在的。

这样不放到主机上的策略,就让主机cpu减少了一步处理策略。

不过有些比如k8s, docker这样的环境,那就没办法了,该用还得用。还有就是针对ip地址的限流,这个安全组也搞不定,也是只能主机上搞。

但是安全组虽然看着是一个很简单的功能,细细做还是有很多问题的。比如优先级,有些云厂商没有优先级的概念,有些只有高中低的概念,有些是0~100的优先级,哪个好用大家是一目了然的。另外比如相同优先级一个是deny的策略,一个是allow的策略,那应该是走deny还是走allow,这些可能每个厂商都不一样,需要验证好。

按我的策略就是全开放的端口就放到最低的allow优先级里,那些可能有安全问题的端口比如6379这种就直接放入到最高优先级的deny里。

快照和镜像

快照就是对磁盘某一个时刻的snapshot,用来做后期恢复什么时候用的,防止一些意外删除的情况。这里涉及的就是快照存储的费用。

镜像就是用来启动的盘,你可以把一个快照作为一个镜像来进行启动,也可以使用官方的镜像或者云市场的镜像。不过如果是大量使用的话,那还是自己打一个镜像比较好,毕竟一些常用设置都可以提前打好,这样省去很多初始化的时间。

其他

有些云厂商还会提供一些工具,比如定时启动和关闭云服务器,还有可以跟云厂商自己的k8s整合在一起进行扩缩容等等。