引言:
5月13日,美团云总经理李爽受邀参加2016中国云计算技术大会,并发表了他主题演讲。在简要介绍美团网和美团云之后 ,他重点谈到了美团云全景图,随后对物理链路、网关、主机网络、控制器、浮动 IP、ELB与vRouter、DDoS、VPC等进行了深入阐述。
演讲内容:
新美大是去年10月份美团和大众点评合并后的新公司,也是目前国内最大的O2O生活服务企业。新美大帮助很多实体业务完成了“互联网+”的转型,其实新美大的业务的范畴也就可以归纳为三点,第一是“到店”的服务,比如到店餐饮;第二是“到家”的服务,比如外卖配送;第三是“在途”的服务,诸如酒店旅游。
美团云2013年5月正式对外开放云服务。美团云的目标不仅是支撑新美大业务,同时也为整个O2O的行业做基础支撑。现在,美团云也正在尝试如何通过大数据平台,对数据和相关产业进行深入融合,推动传统行业的信息化进展。
这是整个美团云的全景图,从基础设施一直到上层的应用,今天将主要从网络角度来阐述美团云是如何构建的。
(美团云全景图)
从开源角度来说,网络组件和存储组件,这两个组件在整个开源的环境里面并没有非常好的产品,能够满足全部的需求。所以这两点在云计算领域非常重要。
美团云的物理链路,可以分为内网核心和外网核心,然后下面是接入交换机,美团采用比较标准的OVS方式,直接为所有虚机去做服务。对于网络层面,可能会存在一些瓶颈。但是,美团对于后端的业务开发或者流控给予了很大的自由度。美团在基础设施上的投入,原则就是,不能让业务感知到由于基础设施的瓶颈所带来的影响。
(美团云内网架构)
美团要考虑到整体冗余方案,所以会有双中心的模式。现在无论是在北京或者在上海或者在其他地区,都会有双中心介入方案。所有的公网,包括所有的内网,都会有双核心的介入方案,这样会保证在任何一个机房或者链路出现问题的时候可以快速的迁移。机房之间,一个机房链路宕掉之后可以通过内网把公网流量调度到另外一个机房,这也是比较常用的模式。
(美团云双活四网关数据中心)
除了物理链路之外,李爽谈到了网关的概念。一方面,网关要承载所有接入的流量进来,怎么控制这部分流量。其次就是要出去,怎么控制这部分流量。最后就是涉及业务之间的访问,包括VM和VM之间的访问和不同产品之间的访问。
正因为有这么多复杂的内容,所以传统的经典网络,在云计算环境下就是不适合的。云计算属于一种多租户的模式,传统网络很难做到这一点。当使用ACL的时候,这种大量管理并不适合很灵活的需求。基于这一点,在网关层面,美团云利用DPDK做了很多优化。
DPDK是Intel开发的网络处理组件,现在美团云的自研网关系统基本上都基于DPDK来做。在DPDK出现之前,可能还有公司在尝试用多核处理器来做,但是DPDK出来以后整个流程都发生了变化,都会转到DPDK这个模式上。
基于DPDK,效能要比内核处理效能高很多。基于DPDK的模式,其实基本上就两种编程模型,其中一种是所有的数据包,基本都可以认为是hash进来的。
这种处理模式什么好处呢?第一个会从网卡角度来讲,会自动分流,每个核在处理自己的流量的时候,可以进行无锁化,这就是为什么它的效率会非常高,而且也不用考虑锁的问题。但这也引入第二个问题,如果数据包有业务特征,那实际上就要切换到另外一种模型。这时候就需要拿出CPU的一两个核,用它来处理所有进来的数据包,然后再判断数据包需要去每个核处理不同的业务类型。
美团现在倾向于使用第一种模型,尝试把网络流量变成无状态化。这对于整个业务风险控制会比较好,当发生了单机宕掉的情况下,可以无缝切换到另外一台机器上。反之,如果有业务逻辑,后端要做一些同步之类的事情,整个复杂度就会提升。
全面DPDK化之后,美团云的一些测试数据基本上可以达到小包限速的能力。在单机比如20G左右,问题都不大,之前也测过40G网卡,现在CPU跑40G问题也不大,跑60G也可以。这样一来,整个的单台服务处理能力就非常强。
另外,关于主机端网络应该怎么做。OVS看起来更像一个交换机,这是一种管理模式或者方式的选择,你可以像一个交换机一样控制OVS。最早,美团云使用了OVS 1.1的版本,整个性能跟延时相对高一些,对于流表的处理效果不是很好。到了2.3版本引入了Megaflow,对于淘汰率会下降,整个性能会有提高。现在Intel还有一个2.4就是基于DPDK来做,已经在美团云内部网络开始试用,但版本上还有一些bug,这块我们跟Intel也在一起探讨这个问题。两三个月以后,我们会尝试把它部署到生产环境里面去。如果切换到2.4以后,整个对于流表的操作或者响应的延时速度,又会有新的进一步的提升。
关于OVS的选择。在大规模云计算的场景下,如果业务模式发生很大的变化,或者不能很好控制的时候,OVS对网络的依赖会比较好,一个是延时依赖,一个是带宽依赖。还有一种模式用类似于像智能网卡一样,可以把类OVS的事情移植到硬件里边去,当发生了这种移植的时候,那实际上对整个网络的结构改变不会太大,所以基本上整个软件还可以重新跑起来,这也是为什么选择OVS的原因。
相比于内核模式,从VM发包的能力来看,DPDK的性能好于内核很多。更少的计算资源就能提供万兆网络能力。
(内核模式和DPDK模式的区别)
讲到管理控制的问题。所有的流表控制,现在对于OVS的控制、交换机实体控制,美团云都是通过自己的控制器来完成的。美团从去年下半年开始正式商用VXLAN交换机的产品,据了解,美团是国内第一个将VXLAN技术用到生产环境里面的公司。
为什么说美团选择了用硬件来加载VXLAN,而没有完全使用软件,因为在一些环境里面软件对于性能的释放,还是有缺陷的。尤其是首包查询,而通过VXLAN直接对用户做隔离,就能解决这一部分的性能问题。最后我们实际上在VXLAN的部分,使用了硬软双管齐下的方式进行优化。
美团云比较有特点的就是浮动的IP。目前业界有一种构建模式,服务商给用户一个公网IP地址,跟私网地址做了映射,但在用户本机是看不到这个IP地址的。美团云采用了另外的一个方法,其实美团更希望用户在管理他自己的服务器的时候,就和一台普通的服务器是一样的。所以美团云把整个的IP地址分为两个部分,第一部分就是主机端的IP地址,包括一个公网的地址和一个私网的地址,但所有业务流量的承载,会承载到浮动IP的网关。这有什么好处呢?在流量泛洪的时候,不用在最终节点控制流量,比如一个用户买了1G带宽,如果别人向这个用户做了大流量访问,上层如果不做统一的网关,流量一直下到VM才能控制带宽或者控制其他的行为。但那个时候,实际上流量已经进来了,可能会对其他的资源造成影响。所以把他放到上层来讲,就是卡在最开始的入口处,一旦发现说有类似于攻击的行为或者其他策略的行为,可以在上层整个的网关很方便地做一些处理。
(浮动IP网关独立前置)
其次,这个网关也是无状态的,它会检查一些行为,比如攻击行为等。但这只是做了很简单的检查,所以说整个网管性能非常好。还有一个就是考虑到组件的不稳定性,如果真出现问题,对用户造成的影响是怎样的。如果把网关作为一个旁路性网关,正常服务模式下这个网关是完全开启的,出问题时将网关自动屏蔽,所有的流量都要走到VM里面去。整个网络模型就变成传统的网络模型,这样的话其实对于用户不会造成什么大的影响,只能说ACL和一些流量的控制行为在短时间内会被影响,但不会影响正常的服务,这个是美团云比较有特色的地方。
另外,很多用户有这样的业务场景需求。比如抓取服务的话,也有很多网站会做一些频率的控制,以防用户频繁地抓取里面的一些内容。正常来讲如果去用其他的云的服务可能就申请一台VM,当用户发现他的IP被封掉的时候,他再申请一台VM,就不断的做申请。这种申请有什么问题呢,第一点,并行度很高,而且对VM资源的消耗量也很高,有了浮动IP就很方便,它和VM之间是解绑的,可以任意做随机的绑定,申请10台VM,100或者1000个IP,可以在这个池子里面不断轮换。在整个云化IP池中,可以实现整个的IP地址的切换,只要调用接口就可以自动换一个IP。
现在业界,一台主机往往只能绑一个IP,美团云将会推出一台主机可以绑多个IP,对于很多类似于发送邮件或者一些抓取的服务的时候可能会更方便。
(浮动IP)
还有两个比较重要的部分,分别是ELB和vRouter。ELB有两个组件,一个是4层,一个是7层,4层的一般很多公司都是用LVS做类似的事情,但是基于DPDK把整个类似的功能全部放到了自己研发的4层网关上,性能会比LVS有一个数量级的提升。在资源不是太充裕的情况下,比如公网带宽在100G以下,可能部署几台服务器就能搞定。而相反,如果用LVS可能需要很大量服务器的资源;第二方面尤其你受攻击的时候,LVS整个连接新建,性能还是比较有限的,在15到30万左右,某公司曾经开源过一个优化的版本,那个版本应该是在70万左右,好一点基本上接近一百万。但如果是基于DPDK,可以很轻松的做到300万以上,整个的性能就会有很大的提升。
7层的就比较简单了,上面会有不同的控制策略。现在也有公司在尝试,把整个协议栈从内核移出来,但由于协议栈复杂度比较高,目前都还停留在实验阶段。
因为VM跟公网IP之间并没有强绑定的关系,所以在做公网访问的时候需要部署一个网关,所以就做了一个VRouter的功能,希望尽实现对云平台的操作。就像一个类传统模式的网络搭建过程,如果自己去构建一个经典网络的时候,也要配一个网关和路由,美团云的大部分的设计就是沿用此思想。但整个实现会和传统的很不一样。一方面,vRouter可以支撑做一个nat出去,另一方面也可以做一些vpn对接。简单来讲,如果做了一个vpn对接,可能是一个小的vpc功能或者混合云功能,网络方面就能够完全打通。
在中国的网络环境,今年可能状态还会好一点,去年跟前年攻击量还是很大的,美团自己做了一个清洗的产品,我们防攻击的产品是在外网的核心做的,拿服务器做的应用部署。正常情况下,所有的流量会正常地走,美团会把所有的流量用分光来做一个检测。美团发现某一个IP或者是某一个IP段有异常流量的时候,会在外网的核心做牵引,把这个IP牵引到清洗中心里面去,把流量清洗完毕之后再送回来。大家其实做的东西差不多,实现的模式差不多,具备现在一般攻击的识别能力,只要能力大于出口带宽就可以。但是这种清洗模式有一个什么弊端呢?即使清洗了,如果攻击时间比较长,还是要消耗你的公网带宽。其实就意味着高昂地成本,如果攻击时间长的话,这不是一个很划算的方式。这一块如果用户自己去构建这部分,运营商有黑洞的一些服务,用户可以去购买这部分服务。
美团为什么要自行做清洗呢?美团云有很多的组件都是基于DPDK做的,对这方面比较熟悉,常用的攻击手法并不多,很快可以基于服务器来做。因为最开始美团也考虑到是不是要用商用的产品,比如买一个防火墙之类的,第一点整个的价格还是比较贵的,清洗能力也不好,并不是有很强的性能,还有就是很难有平行的扩展。今年买了一个40G的,再过半年或者过一年需要一个80G的时候,很难把两台机器放到哪儿协同清洗,但是如果自主研发,通过路由控制方式可以做到协同清洗。
在云计算行业,大家都在做VPC。云计算就是把所有的资源池化,网络一定要通过网络虚拟化来做这方面的调度。但是从整个从VPC的角度来讲,整个市场上或者是说业界并没有很好的标准,所以大家就各有千秋。如果业务规模小,只服务内部,不用服务外部大量用户的时候,实际上可以用商用的解决方案,几千个子网也够用。如果做对外业务,几千个显然不够,所以美团的VPC方案就做了一个二层映射。对于大用户来讲,会把实际的VXLAN ID给到用户,在硬件或者物理网络里面来构建自己的VPC。如果是一些小用户,他的量不是很大,美团云就做二层映射,把一个小用户放到VPC里面,通过网络控制,把用户与用户之间的网络进行隔离。
在不同的区域里面,比如说会有北京的两个区域,这种不同的区域我们会通过vRouter把两个区域做连接,可以做跨网段的访问服务,这种部署模式其实更像是原始的构建物理网络的模式。
对于访问公共服务,美团云的处理方式比较简单。我们有足够的IP资源池,软件情况下美团云是做了一个IP的映射,并没有做双层的VPC映射,业界内也有做双层VPC映射,大家可以感受一下。
反向连接,模式都是一样的,一个正向一个反向。因为VPC最大的问题是,两个用户拥有同样的地址,去访问一个看起来又是相同的地址。所以,一定要在中间做很多的转换,这种转换的话,如果用软件去实现的时候一定要有很好的控制能力和映射管理能力。
当我们在使用VPC的时候,业务路径是怎样的呢?现在我们的RDS服务访问起来比较简单。首先有个四层的网关,后面接的Atlas,再接主库,做库的切换的时候可以保持客户端的连接。即使我们的库做了切换,所有原客户端的连接会到新的库上,所有老的库一直等所有的任务都完成以后,网关才会做连接的中断,这个也是很多其它业内产品做不到的地方。
对于S3的访问更加简单,会有一个多区域部署。美团云会通过自己的专线传区域的数据。对于数据的访问分为公网和内网两部分,如果给用户一个IP,其实在访问的时候就很麻烦,用户不知道他访问的业务还区分内部访问存储还是外部访问存储。外部访问要收费,内部访问不收费。通过DNS,只要是外部的访问,美团云就给你返回公网IP,如果内部的访问就返回私网的IP。另外,如果就给用户一个IP,这种实现方式,公网跟私网流量会有重叠,现在做了一个选择,通过DNS做这部分的内容。
刚才讲的就是美团在构建云平台的时候,网络方面的一些设计思路。总的来说,第一点,美团云强调基础设施的稳定可靠,第二美团云要给用户提供的产品有着高性价比,第三点是说,因为美团云的业务类型多,所以需要构建大量的VPC的网络,完成用户间的隔离。
最后,我们正在考虑把美团云整个的四层负载均衡做开源。LVS开源的时间也很长了,虽然说基于DPDK的版本,很多大型互联网公司都在使用,但在市场上其实没有任何一家公司把这个产品去做开源。美团云会很快地,估计2、3个月之后,就会开放我们的开源产品。李爽觉得可以大家可以在构建更高的软件网络方面一起努力。