陈杰:腾讯云的弹性、高可用与隔离

  • 包研

2014 年 7 月 7 日

话题:云计算DevOps语言 & 开发架构腾讯云

高弹性、高可用是云服务重要的特性,在保证安全和隔离的前提下,如何提供这些特性也是云平台的核心技术之一。在QClub 广州:腾讯云图沙龙上,腾讯云高级工程师陈杰分享了腾讯云在弹性、高可用和隔离方面的实践。在沙龙期间,InfoQ 对陈杰进行的专访,全文如下:

InfoQ:陈杰你好,请向 InfoQ 的读者简单介绍一下自己,工作经历,现在主要在做什么? 技术上的兴趣点是什么?

陈杰:我是 2007 年毕业就到腾讯,开始在互联网应用系统做支付营销的后台系统,后面又转去做游戏后台。大概两年前转到云平台部做虚拟主机的后台开发,目前是虚拟主机后台的技术负责人。我自己兴趣呢,也是做底层虚拟化,包括计算虚拟化,网络虚拟化和存储方面。

InfoQ:刚才听你介绍,腾讯云计算平台虚拟化有三个实现方式,有 Xen,KVM,Linux Container,这三个虚拟化类型分别定位的是哪些用户?

陈杰:Linux Container 是用于在 CEE(Cloud Elastic Engine)上提供 PaaS 级的服务,给用户提供微信云这种网站类接入服务。我们的虚拟云主机产品叫 CVM(Cloud Virtual Machine),底层有 Xen 和 KVM 两个平台,这是有一些历史原因的。我们最开始建 CVM 平台的时候,是用的 Xen,因为公司用 Xen 比较成熟。后来随着业务的慢慢发展,我们在向 KVM 在转,因为 KVM 的代码量更少,更易维护,我们有专门的同事去做这块。同时,KVM 可以更好的定制功能。基于我们的测试,KVM 有更高的稳定性。我们认为 KVM 代表了发展趋势。目前腾讯云的广州区 Xen 和 KVM 两种方案都有,后面上海金桥机房这种就会全部使用 KVM。

InfoQ:现在腾讯云的自动弹性实现的状况如何?

陈杰:其实自动扩缩容是比较复杂的一个能力,它包括了监控,即发现需要扩缩容,以及实施。我们在 CEE 上有做这种自动扩缩容的尝试,但是 CVM 现在还没有做,目前仍然是半自动化的扩缩容。我们做了监控即发现扩缩容需求,也做了扩缩容,但是我们还没有做到全自动的触发。我们现在弹性能力主要是集中在 HA,用户可以做配置升级,热迁移,后续我们会推出自动扩缩容这种跟用户更相关的功能。

InfoQ:关于 HA,你刚才提到有冷迁移,热迁移,能不能详细介绍一下?

陈杰:其实 HA 就是冷迁移,用户的机器挂了,它的表现就是虚拟机没有办法服务了,映射到后端,可能是它服务的母机物理主机挂了。物理主机挂有很多种可能,比如硬件故障,或者是我们更不愿意看到的网络故障,或者母机的 I/O 高,CPU 高导致它无法服务了。在这种时候虚拟机已经没有办法对外服务,我们就需要把它迁移掉。如果用户的主机使用的是我们的 CBS(Cloud Block Service)盘,就可以实现 HA,即把用户的虚拟机从故障母机迁移到就是正常的母机上,我们会有一堆算法去确定目标母机是能够提供服务的,然后把用户的子机给拉起来。热迁移与冷迁移的区别就在于用户的服务是否会停止,热迁移用户是没有感知的,服务可以照常的对外进行。但是,用户的的子机可能已经从一个母机迁到另外一个母机上了,我们做这个热迁移的能力就是提早的发现,当监控或其他能力发现母机可能有问题的时候,比如说它的 I/O 持续的上升,或者硬件如 RAID 卡电量不足,那早于问题发生之前,把子机从有问题的母机上热迁移出去,让用户的服务有高保证。技术实现热迁移会复杂一点,冷迁移会稍微简单一些。

InfoQ:资源的隔离是怎么做的?安全是如何考虑的?

陈杰:资源隔离分两块,一是网络访问这块我们有单独的 DFW 的系统来实现,DFW 能够按开发商级别隔离访问,开发商 A 和开发商 B 是没办法相互访问的。我们也会在底层做一些防 IP 和防 MAC 欺骗的一些手段,即使一台虚拟机的 IP 和 MAC 被手动的篡改了之后,他也没有办法在整个网络上影响别的开发商的机器。

资源方面主要是 I/O 和网络这两块,目前网络我们还没有做隔离,因为用户的网络带宽还达不到我们的资源瓶颈,这方便不是我们的最主要的方向。I/O 是一个比较重的问题,我们目前是采用 Cgroups 的方式,但是如果 Cgroups 把子机完全隔离,又会导致实测性能 20% 下降,所以我们做了折中,就是把母机跟子机隔离起来,母机上也有一些关键的进程,比如说 libvirtd,还包括我们自己的一些进程,这些关键进程不会因为子机的影响导致坏死掉。但子机和子机目前还是会有影响,但是如果发现这种影响,我们会用其他手段,比如说热迁移的手段,把高资源的子机迁走,或者把一些低资源的子机迁走这种方式来做综合平衡。

InfoQ:下一步打算做什么?

陈杰:首先我们会推出更多的弹性的能力,比如独立的云硬盘去满足用户在线的多挂一块盘,或者是把这块盘给从虚拟机上卸载掉,这样用户就可以根据实际需要去添加更多的存储,或者把数据从一台虚拟机放到另外一台虚拟机上去。

第二是网络方面的弹性 IP,包括亚马逊 AWS 也有 EIP 服务,能够使外网服务的 IP 与虚拟机之间解耦,让用户根据实际需要去把一个 IP 从绑定到一台虚拟机上,或者从一台虚拟机绑定到另外一台虚拟机上,从而持续的提供服务。

此外,还有快照方面的一些工作,我们也能够提供快照的能力,方便用户去备份他的数据,我们也会做刚刚提到了自动扩缩容。

InfoQ:挂载更多云硬盘是用 RAID,还是用其他的什么方式来实现呢?

陈杰:如果是存储,是用我们的网络快存储服务来实现的,它是单独的服务,在他后端会有自己的一些存储的和容灾手段,我们提供数据是三份备份,如果用户的数据有丢失是可以找回来的。CBS 服务是比较可靠的,性能上面也是能够满足大部分用户的需要,如果对 IOPS 要求非常高,或者对 I/O 延迟要求非常高的用户,我们后续也会提供纯 SSD 的这种云盘的服务。

云计算DevOps语言 & 开发架构腾讯云