剖析美团的以Python为主导的云平台发展战略

所属分类: 建站经验 / 网站运营 阅读数: 0
收藏 0 赞 0 分享

独立出来的美团云业务部目前有十几位工程师。虽然部门独立,但工作中仍然跟系统运维组有紧密的配合。美团系统运维组原本就有三分之二的开发工程师,而运维工程师也全部具备编写代码的能力,因此开发与运维工程师能够进行紧密的配合。

相关厂商内容

美团云的最初版本起步于2012年7月,一开始是作为私有云计算平台来构建。第一版开发了大约2个月的时间,之后用了大概10个月的时间将美团的所有业务迁移到云平台上。现在除了Hadoop、数据库仍跑在物理机上之外,美团网的所有业务都已经运行在美团云上,内部的研发、测试平台也运行在美团内部的办公云平台上。

2013年5月,美团云开始对外提供公有云服务,截止到目前仅对外提供云主机产品。对象存储、Redis、MySQL、负载均衡、监控、VPC等服务也在研发,部分产品已经在内部以及部分测试客户使用,未来会根据产品的成熟度和客户的需求程度逐步对外开放。

稳定是公有云服务的核心价值。自从公有云服务开放以来,美团云主要的工作都放在提升云主机的稳定性,完善云主机模板、备份、监控、安全等工作上。预计在2014年9月,美团云将发布其第三个版本的更新,继续打磨其产品细节。

技术架构

美团云最初选型的时候对OpenStack、CloudStack、Eucalyptus都做过调研,调研的结果是架构设计使用OpenStack的框架,网络架构参考CloudStack,主要组件由自己开发,部分组件在OpenStack原生组件上进行了二次开发。

核心的云主机管理系统是自己研发,没有使用Nova。采用Region-Zone-Cluster三层架构,支持跨地域、多数据中心的大规模集群部署。采用了基于KVM的主机虚拟化和基于OpenVSwitch+OpenFlow的网络虚拟化技术。
镜像管理用了Glance。有一定修改,例如,多数据中心分布式支持,以及镜像替换。
身份管理用了Keystone。有一定修改,例如,高并发性能改进,与美团帐户系统的集成。
对象存储用了Swift,但Swift在写延迟方面存在性能问题,同时在OAM方面的功能比较薄弱,所以也做了一些修改和研发。Swift现在已经在为美团网内部存储量几十TB量级的业务提供服务。
之所以没有整个引入OpenStack,是因为当时调研时,感觉OpenStack的设计比较脱离美团的实际情况。例如,网络架构需要有较大的调整,同时需要有共享存储的支持。当时对美团来说,现有业务的基础设施已经基本固化,为适应OpenStack而做这样的调整基本不可接受。另外,OpenStack在很多细节方面达不到需要的级别。比如,OpenStack对跨机房多Zones的设计,它假设你机房之间的网络是完备的,这也不太符合我们的网络现状。因此,我们基于美团现有的主机使用模式和网络架构,重新设计了网络、存储和主机管理模型,自主研发了虚拟化管理平台。同时,我们在从单机房做到多机房的时候,在Zones之间做了解耦,比如在每个机房里都放置Glance服务节点,减少对跨机房网络的依赖。正是由于这些研发工作,使得我们经过不到一年时间的磨练,就实现了美团整个基础设施完全运行在私有云上的目标。

当然,由于我们不使用Nova,就意味着OpenStack社区的很多依赖Nova的组件和功能我们基本无法直接使用。不过,相对于OpenStack大而全/兼容并包的架构,我们坚持在每一方面都集中精力用好一种技术,如主机虚拟化使用KVM,网络虚拟化使用OpenVSwitch+OpenFlow,使得整个系统的开发和维护成本相对较低,同时能深挖这些技术方案的功能特性,最大限度地压榨硬件性能。同时,由于我们掌握了基础系统的代码,使得我们可以较高的效率添加一些新的业务功能(例如,对虚拟IP,USB KEY的支持等),以及实现系统架构的升级改造(例如,对多机房架构支持等)。另外,我们对使用的OpenStack组件做的一些修改,比如对Swift的优化,目前技术委员会也在提议如何回馈给上游社区。当然了,这个还需要看社区对我们的patch接受与否,而我们也还是以满足业务需求优先。

其他方面,块存储落在本地的SAS盘上并在本地做RAID。目前我们对美团网自己的业务做RAID5,对公有云用户做RAID10。这是考虑到美团网自己的业务在应用层已经做了较完备的高可用设计的,即使掉了单个节点也不会影响到业务;但对于公有云用户而言,他们用的那一台云主机就是一个单点,所以要对他们的云主机做更好的保护。使用RAID10当然成本会比较高。我们也在考虑共享存储,当然前提是先解决了上面的稳定性和性能问题。以后会使用SSD,使块存储的性能有更大的提升。

网络方面做了分布式设计,主机上用了OpenFlow,通过OpenFlow修改二层协议,让每个用户拥有一个独立的扁平网络,跟其他用户的网络隔离。通过DNS虚拟化技术,使得不同的用户可以在各自的私有网络上使用相同的主机名字,并在每个宿主机上部署分布式DNS和DHCP以实现基础网络服务的去中心化。

运维

美团云的运维思路跟整个美团的运维思路是一致的。下面介绍的运维思路既适用于美团云,也适用于整个美团网。

运维框架可以概括为五横三纵。从横向来看,自底向上分为五个层次:

物理层,包括机房网络、硬件设施。我们已在开展多机房和城域网建设,从最底层保证基础设施的稳定性。为了应对大规模机房建设带来的运维成本,我们实现了Baremetal自动安装部署的Web化管理,从服务器上架之后,其他工作均由自动化完成,并可以和虚拟机一样管理物理机。
系统层,包括操作系统、虚拟化。我们在虚拟化基础之上采用了模板化(镜像)的方式进行管理,也对Linux内核做了一部分定制开发,例如针对OVS的兼容性做了优化。
服务层,包括Webserver、缓存、数据库等基础服务。我们基于Puppet工具做了统一配置管理,有自己的软件仓库,并对一部分软件包做了定制。统一配置管理的好处,一方面是避免不一致的修改,保证集群的稳定性,另一方面是提高运维效率。
逻辑层,包括业务逻辑、数据流。这一层的主要工作是发布和变更。在很多其他公司,业务的发布上线、数据库的变更管理都是由运维来做,我们认为这样对开发、运维的协作成本较高,所以一直往开发人员自助的方向做,通过代码发布平台、数据库变更平台实现开发和运维工作的轻耦合。在发布平台中,每个应用对应独立的集群,有一位开发作为应用owner有最高权限,有多位开发作为应用的成员可以自助发布代码。数据库变更平台也有类似的权限控制机制,并在任务执行层面有特殊的稳定性考虑,例如将大的变更任务自动调度到夜间执行,对删除数据表的任务在后台先做备份。
应用层,包括用户可见部分。除了跟逻辑层有类似的发布和变更之外,我们有统一前端平台,实现访问流量的进出分离、行为监测和访问控制,这对于整体的安全性有很大的好处。
从纵向来看,有三部分工作,对上述五个层次是通用的:

监控。从物理层到服务层的监控和报警都是运维来跟进、响应的。对于逻辑层和应用层,也是开发人员自助的思路,运维提供监控API的规范,开发可以自己创建监控项、设定报警规则、进行增删改查。监控报警之后的处理,现在有些做到了自动化,有些还没有。尤其是有些基础架构和业务之间的纵向链条还没有打通,包括建立业务容量模型,某种特定的业务形态在多少用户的情况下最高负载多少,不同负载等级下的SLA应该是多少,等等,这些模型都建立起来之后就能够进行自动化的处理。
安全。我们很早就部署了统一的安全接入平台,所有线上的人工操作都需要登陆relay跳板机,每个人有独立的登陆帐号,所有线上操作都有审计日志。更多的安全工作由专门的信息安全组负责。
流程。早期基于Jira做了一些简单的流程,但仍需要改进。现在正在针对比较集中的需求,开发相应的流程控制系统,方向也是自动化、自助化。从业务部门申请VM资源,到业务扩容的整个流程,我们正在进行上下游的打通,未来可以在Web界面上通过很简单的操作实现,也提供服务化的API,方便其他业务平台进行集成。虚拟化覆盖全业务线之后,这些事情做起来都变得很方便。
总之,美团网整体的运维思路就是:保证业务稳定运行,同时推动全面自动化、自助化。涉及开发、运维沟通协作的部分,尽可能通过自动化平台的方式,由开发人员自助完成。运维人员除了基础环境、平台建设之外,帮助业务进行高可用架构的梳理,提高代码的可运维性,以及定位和解决业务中的各类问题。

改进与演变

美团云从对内服务开始到现在两年以来,最大的一次改进就是从单机房到多机房的建设,这是跟美团网的城域网建设同步开展的。

单机房的时候,美团网业务早期曾遇到过运营商网络中断几小时的情况,期间业务不可用,非常痛苦。多机房冗余做到最理想的情况下是,即使一个机房整个断电了,业务也不受影响,当然这就意味着需要100%的冗余量,成本是比较高的。不过对于美团网来说,冗余的成本是很愿意承担的,因为业务不可用造成的损失要大于做这些冗余的成本,所以我们现在物理资源都留有50%的冗余,带宽一般会预留30%的冗余。

因为美团网的发展速度很快,去年我们一度遇到资源不够用的情况,在这上面踩了很多坑之后,开始做一些长远规划。现在美团网业务的双机房冗余已经实施了一部分,美团云也有两个机房,如果公有云客户的业务支持横向扩展,那么也可以做跨机房部署。这种机房级高可用做好了,对稳定性又是一个很大的提升,大大减少网络抖动对业务的影响,可用性SLA可以从现在的4个9做到更高。有些规模比较大的客户对服务质量会有比较高的需求,所以美团的城域网、以及未来的广域网,也会共享给我们的公有云客户。

另外上面说到我们数据库跑在物理机上,这一块现在用的是SSD,读写性能顶得上早期的三台15000转SAS,瓶颈在千兆网卡上,所以我们现在也在做万兆网络的升级改造。数据库服务以后也会开放给公有云用户使用,基础设施跟美团自身业务一致。

未来的计划

由于使用本地存储,所以现在虚拟机迁移需要在夜间进行,以减少对用户服务的影响。为了提高服务的可用性,在确保稳定性和性能的前提下,共享存储是一个不错的选择,所以我们正在测试万兆网络下的共享存储方案。另外,我们底层虚拟化机制用的KVM,本身是没有热插拔的功能,这也是我们计划要做的一件事。

现在很多客户问我们,什么时候出Redis,什么时候出云数据库,一些客户对Redis和MongoDB会有需求,Web服务想要MySQL。我们的计划是由DBA团队提供一些模板,相当于是一些专门针对Redis/MySQL做好优化的系统镜像,让客户可以直接拿来用。这可能会在下一个版本release的时候推出。

我们还会提供一些基础架构的咨询服务,这个咨询服务一方面是工程师提供的人工服务,另一方面是以工具+文档的形式,以互联网的方式将我们的最佳实践共享出去。美团网做到现在的几百亿规模,内部有很多经验积累,如果能把这些积累传递给我们的客户,能够帮助客户少走很多弯路。

美团云的架构

    美团云的前端后台使用的框架是Django,主要处理Web业务相关的逻辑,Django的社区支持比较丰富,文档健全,本身功能也比较强大。然而有些特性似乎比较多余,比如说Django的很多“黑魔法”是用数据库外键实现的,但是美团内部有自己的一个DBA团队,负责审核所有项目的数据库设计,他们则要求不允许用外键,据说是因为最佳实践得出的经验。

    后端整个云平台的框架也是用Python实现的,在底层包括虚拟化计算、网络、存储三大功能体系,上层则分为资源管理、任务调度、日志、监控、用户管理、通知报警、API、用量计费等模块,同时在垂直方向上,又包括关系型数据库服务、缓存服务、对象存储服务、负载均衡服务、模板和快照服务、虚拟专用网络服务等。尽管后端的业务不尽相同,但架构师们抽象出了一套处理工作流的逻辑,并且用Python实现了一个框架。比如,在消息通信机制的选择上,美团云没有采用类似OpenStack的采用消息队列Rabbitmq的方案,而是采用了Webserver,主要原因是考虑到Web server在更加久经考验,业界对HTTP协议有着更加成熟的方案。

    美团云团队深度定制了Tornado,将它由单线程、异步回调的机制修改为同时支持多线程和同步查询的机制。这主要是考虑到在关系型数据库的查询上(比如MySQL),没有较成熟的异步查询方案,而单线程的阻塞查询则会影响Tornado的主线程。通过精巧的代码整合,将Tornado与SQLAlchemy这样的数据库ORM集成在一起,成功地解决了数据库的问题。同时针对SQLAlchemy的特性进行了一些设置,比如关闭Auto-Commit,这样能够使得ORM不会在每次查询的时候都会发出网络连接,而是在一个线程的业务逻辑里将所有的修改操作hold住,只允许查,在线程结束的时候手动commit,关闭session,提交所有的修改。通过这种方式,实现了一个线程级别的数据库事务锁和对象锁,使得程序员们能在一个线程的逻辑里面同时查询和修改多个数据库表,同时保证业务的原子性。陈博说“通过这些框架,程序员们在开发上层业务的时候也感觉到更加便捷了。”

    听众对演讲反应热烈,表示受益匪浅,也对美团产生的敬佩之情。美团能发展到今天这般规模,其技术能力不容小觑。”当然,这些只是美团云整个技术的冰山一角。美团是中国第一大的O2O电商,网络流量500T/天 ,月活跃用户数超过1.3亿。支持这一庞大业务规模的正是美团云。今年3月,美团云获得IDC牌照,8月对外开放首个高品质的自建机房。同时,美团云通过第四批可信云认证,并将“电商云”奖项收入囊中。2015年第四季度,美团云也将推出数据产品及行业解决方案。所有的这些都意味着,美团云致力于为千万用户提供稳定的公有云服务这一愿景,正在成为现实。

更多精彩内容其他人还在看

浅谈活动运营四步全解:拆解 策划 实施 总结

产品岗在很多公司就是螺丝钉样的存在。不仅JAVA、UI、Axure得手到擒来,文案、手册、幻灯片还要充满情怀,连运营活动都似乎是产品的分内工作了 T_T   那么作为初级产品要怎么运营好一个活动呢?分享一下。前阵子又被老板约谈小(hui)黑(yi)屋(shi),针对网站... 查看详情
收藏 0 赞 0 分享

网站空间在网站建设中的重要作用

建设开发一个网站时,不仅仅要提前申请好网站域名,而且还要在构架网站时,对于网站空间做好安排,并且在对网站的需求进行描述时,要描述清楚对于网站运营的具体要求,这样才能更好的安装网站空间,而网站空间的安排,则是对于网站在后续的运营过程中起到非常关键的重要作用。网站域名的申请在网站建设... 查看详情
收藏 0 赞 0 分享

怎么设计网站才能捉住用户眼球呢?

  企业网站面向的对象是用户,企业可以借助网站的力量来宣传产品,推广公司形象,为企业的发展提供有效的展示平台,扩大销售的渠道,节约运营成本,同时也为用户提供了有效的购买途径,增加了买卖双方的便捷性。但是企业想要提高用户对网站的认可度,提高网站的吸引力,这就对网站建设的有较高的要求... 查看详情
收藏 0 赞 0 分享

网站开发需要的技术人员都有哪些

对于一些大型企业来讲,拥有属于自己的网站开发人员是非常有必要的,要知道在大型企业的运营过程中,对于各项网站的需求量也是十分巨大的,大到对企业的宣传效果,小到利用网站提高相关的工作效率,这些都是十分有必要的。而如果将这部分网站开发的事项交给外部网站开发公司来做,往往又达不到企业的要... 查看详情
收藏 0 赞 0 分享

建设网站如何选择空间 注意事项有哪些

在这个各种信息都可以在网上浏览的时代,各种优秀的网站也层出不穷。但是一个网站的建立,不仅仅需要网站的设计以及域名的选择,还需要一个空间。网站就像我们的家一样,同样需要一个像房子一样的空间来装下我们的家具,也就是网站需要发布呈现的内容。今天就为大家介绍一下怎么选择网站需要的&ldq... 查看详情
收藏 0 赞 0 分享

浅谈网站测试的重要性 保障网站的稳定

在日常的工作以及生活当中,我们每天都浏览成千成万的网站,而且为了获取不同的信息,每天浏览的网站都不相同,而且在互联网快速发展的进行,我们的日常与生活已经完全离不开对网站的需求,因此我们在浏览一个网站时,这个网站的稳定性以及兼容性就显得非常重要网站不稳定的情况我们在浏览网站时,在浏... 查看详情
收藏 0 赞 0 分享

搭建外贸网站平台需要注意的事项

对于一个外贸公司来说,网站是最好的展示平台,而因为外贸公司的业务往往不同于普通的内地公司,所以在搭建网站上也有一些不同。那搭建外贸网站平台应该注意哪些呢?对此,我们和几个有着多年网站建设的工程师聊了一下,建设外贸网站平台最主要的是注意以下几个方面:  一、网站的语言  一般的情况... 查看详情
收藏 0 赞 0 分享

建设手机网站和电脑端网站有何不同

想要建设开发一个优质的手机网站,那么首先就要对现今社会行业中手机网站的发展有所了解,并且要有高质量的建站技巧,这都是必不可少的因素。而在建设手机网站的过程中,许多人会好奇,不同平台手机和电脑在建立网站时虽然流程基本不错,但也有着很多不同,那么有哪些不同之处呢?一、平台不同电脑端的... 查看详情
收藏 0 赞 0 分享

新站长在建站时容易踏入的四大雷区

  随着互联网迅速发展,网站建设也要比以前容易的多。因为网上有很多开源代码,只要下载使用就可以建一个很简单的网站。所以,很多人想尝试也做一个网站,挣点零花钱。但是,由于不少新手站长并不懂得网站运营的禁忌,只是随心所欲建站,结果导致自己的网站几个月都毫无起色。所以,今天就来给新站长... 查看详情
收藏 0 赞 0 分享

老网站改版:内容与结构全部更换怎样才可以降低对搜索引擎的影响?

  最近收到好多站长朋友的询问,关于老网站改版,内容与结构全部更换,怎样可以降低对搜索引擎的影响?下面是我之前操作的方法,供大家参考:  参考:  1.先申请各个搜索引擎的闭站保护功能;  2.老网站死链提交;  3.做好404(不要直接链向首页,一定做个404页面,写个链接指向... 查看详情
收藏 0 赞 0 分享
查看更多