公有云的底层技术
国内公有云第一家商用VPC的是青云,可惜是给大家趟了水。
国外的aws从2009年就开始了。但是那时候大宋还没法跟上。阿里云早期都是拿着经典网络搞云计算。当然问题也都产生了很多问题。最著名的就是陈浩的那篇文章了。
https://weibo.com/ttarticle/p/show?id=2309404079841686247162
知乎上也有很多关于这个的讨论
https://www.zhihu.com/question/56524172
那我们现在继续说下公有云的基础,那就是如何进行资源隔离,这里就涉及到网络,cpu,内存,磁盘io这些。
这里的隔离千万别就只想到cgroup和namespace这些。
个人觉得这个主要是3个基础:网络基础(vxlan),虚拟化, 存储。
网络基础这里主要是参考了:
https://zhuanlan.zhihu.com/p/36165475
https://zhuanlan.zhihu.com/p/33658624
我个人已经很多年没有碰底层网络了,感觉网络工程师很多都已经下岗了。没想到在公有云上还有那么多好玩的东西。
VPC本身由SDN来进行构建的,但是下层其实就是VXLAN,而不是传统的VLAN。
VLAN和VXLAN的区别:
- VLAN ID数量限制,总共只有12个bit来表示vlan ID,那就是4096个,去掉2个特殊的,能用的就是4094个。一个公有云不可能只有这些个客户吧。
但是作者说了,VLAN后面的802.1 ad协议又增加了12个bit来表示VLAN ID,那就是1600多万个VLAN,这对于公有云厂商看着是够了。
那么问题来了,为什么大家还要上VXLAN呢? - TOR交换机(Top Of Rack)MAC表限制。我查了下cisco3750交换机的mac地址表是12K,那就是可以存放12000个MAC地址。这个在一般情况下是够用的了。一旦虚拟机的数量超过这个了,那交换机就会泛洪到所有端口上,这样会加重交换机的负载。
这个记得当年我们使用2960的时候就碰到了这些个问题。
如果使用VXLAN,虚拟机的Ethernet Frame被VTEP(VXLAN Tunnel EndPoin)封装在UDP里面,一个VTEP可以被一个物理主机上的所有虚拟机共用。从交换机的角度,交换机看到的是VTEP之间在传递UDP数据。通常,一个物理主机对应一个VTEP,所以交换机的MAC地址表,只需要记录与物理主机数量相当条目就可以了,虚拟化带来的MAC地址表暴增的问题也不存在了。这是VXLAN能解决的,而现有的VLAN没有办法回避的问题。
通俗的讲就是VLAN交换机会有个解包和封包的过程。虽然效率上可能会降低一点,但是适用性会更广。 - VLAN间通讯。这个我觉得是最大的问题。对于二层交换机,要进行VLAN间通讯,我们知道可以通过trunk进行,也可以使用单臂路由的方式。
单臂路由的方式现在基本下线了,原理就是在交换机上建立2个虚拟网口,作为每个VLAN的网关来进行。
而trunk是VLAN的数据包里都会带上自己的VLAN ID。
但是trunk这种模式带来的问题就是广播风暴了,因为交换机要学习trunk里所有服务器的MAC地址。等于是一个大二层。
而VXLAN是走三层的,直接就是3层上走UDP包来进行的,所以不存在了这个问题。可以跨越2层网络的限制。 - STP问题。以前觉得交换机很聪明,会通过STP(Spanning Tree协议)找到最优的路径。
但是现在内部的流量越来越高,千兆万兆都很普遍了,STP找出的最优路径,问题就出在这里,只有一条最优啊,这样的话就无法利用到全部可用的带宽,很多带宽线路都是作为备用存在的。
好了,这些都是VXLAN的优点,缺点就是更复杂了,而VXLAN是3层的网络,它底层还得是VLAN。
所以各位也要看自己的实际情况去选择,但对于公有云厂商来说这个是没得选的。但是要是自己内部用,那就看下实际情况了。
第二项就是虚拟化
听上去好像就跟xen一样。简单来说,早期的云计算厂商对于大家来说就是卖vps的。当时是各种厂商都是在本机上搞虚拟化然后就开卖了。
但是现在云厂商其实把磁盘基本都是放在存储里了。
关于这个的已经很成熟了,无论是cpu,内存还是磁盘io。
kvm, xen,vmware这些每个都有很多人用,半虚拟化,全虚拟化,这些后面开篇说吧(主要是自己现在也是很多都混淆了,需要重新理一下)。
第三项就是分布式存储。
这里暂时没有统一的做法。这里有块存储,对象存储,文件存储。
而我们一般云上虚拟机用的就是块存储。SAN、Ceph RBD这些都是。之前知道国内有些云厂商就是直接用了HITACHI的SAN来搞云存储的。虚拟那块直接就用了vmware的。这实在是相当的有钱才这样搞。
而Ceph更是独一无二地在一个统一的系统中同时提供了对象、块、和文件存储功能。
而自己搞的话就要注意以下几点了
扩展性
这个看来现在都是PB起步的。这种时候一些中心化的存储系统就有可能出现瓶颈了,比如hdfs这种。但是去中心化的存储就一定好吗?这时候数据迁移这种就不得不面对了。
可靠性
各个云厂商都是保证6个9,7个9什么的。多少副本,如何校验都是需要考虑的。
性能
这个其实是挺烧钱的地方。ssd, fusionIO这些都是大把的钱啊。但是如何控制好每个的读写速率,这个需要好好想想的。
成本