aws使用的一些坑点

说坑点可能不大合适,说跟国内云厂商的一些区别吧。

磁盘吞吐限制

在国内的云厂商上,一般都是针对云盘进行iops的限制,一般都是一万iops以上的,所以如果你要块比较大的话,其实吞吐也是可以比较大的,君不见各家测试吞吐的时候都是128K大小,而测试iops的都是4K大小。
https://help.aliyun.com/zh/ecs/user-guide/general-purpose-instance-families

但在aws上,iops限制居然才几千,而且还限制了磁盘吞吐。这个数字小的让人发指。所以想靠lvm堆叠来充分汲取磁盘的性能是完全不可行的了。
https://docs.aws.amazon.com/zh_cn/AWSEC2/latest/UserGuide/ebs-optimized.html#current

ec2的网络限制

在国内云厂商,一般网络限制都是带宽和pps的限制。还是阿里云上面图,我们可以看到最低型号限制了1.5Gbit和90万pps,25万连接数(这个好像是新加的)。

而在aws上,居然没有一个页面介绍每个机型的连接数限制。除了自己用ena去查看所谓的连接跟踪(connection track)。
https://docs.amazonaws.cn/AWSEC2/latest/UserGuide/monitoring-network-performance-ena.html

1
2
3
$ sudo ethtool -S eth0 | grep conntrack
conntrack_allowance_exceeded: 0
conntrack_allowance_available: 244000

通过这个我只能大概知道这个机器允许的连接跟踪是25万左右。这个是4c的机器,而2c的机器就是12万多左右。 具体限制多少提了工单给aws,说这是安全机密。

aws ec2实例如果不设置在一个集群组中,单个五元组(协议,ip,port)的带宽上限就是5Gbps,不过放在同一集群组内也就是10Gbps
https://docs.aws.amazon.com/zh_cn/AWSEC2/latest/UserGuide/ec2-instance-network-bandwidth.html

什么是连接跟踪

https://docs.amazonaws.cn/AWSEC2/latest/UserGuide/security-group-connection-tracking.html
https://docs.amazonaws.cn/AWSEC2/latest/UserGuide/monitoring-network-performance-ena.html

这里大概介绍了一下连接跟踪。也就是除了0.0.0.0/0和::/0全部放开的连接,其他都会计算在连接跟踪内。

这里导致的问题是你看着自己连接数肯能就几十几百,但是其实连接跟踪数已经快超了。因为你不知道你的tcp或者udp释放了多久他们这个connection track会释放。

本地磁盘的ec2实例

在国内云厂商上,本地磁盘的实例可以随意关闭重启,因为默认这些实例是不会被迁移的。而在aws上这个只能重启,不能停止再启动。因为在aws上停止就意味着迁移,迁移就意味着你原先的那个本地磁盘就被格式化了。而这些都是有文档说明的。
https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/InstanceStorage.html

redis重启

在aws上叫elasticache,在这里是不能重启实例的,一旦重启实例,redis里的数据没有了。美其名曰叫redis数据本来就存放在内存里的,重启自然就没了。

可redis有aof和rdb明显可以恢复的。