9月19日第五届PyCon大会在北京77剧场举办。PyCon大会是现在相当火热的开源编程语言Python的全球性盛会,是CPyUG(华蠎用户组)获得授权举办的中国PyCon年会,由PyChina.org发起,CPyUG/TopGeek 等社区协同。当日,一贯积极支持开源社区活动的美团云同Facebook、360、猎聘网、豆瓣等一同参加了会议。美团云计算研发工程师发表了以《使用简单语言构建复杂系统》为主题的演讲,介绍美团云与Python的渊源,并分享实际案例,同时穿插喜闻乐见的Pythonic话题,现场座无虚席,听众聚精会神。
美团云为何选用 Python ?
美团云的最初版本起步于2012年7月,一开始是作为私有云计算平台来构建。最初选型的时候对OpenStack(Python)、CloudStack(Java)、Eucalyptus(Java、C)都做过调研,调研的结果是架构设计使用OpenStack的框架,网络架构参考CloudStack,主要组件由自己开发,部分组件在OpenStack原生组件上进行了二次开发。作为目前世界上最大的Python社区项目,OpenStack的影响不容小觑,成熟的社区支持让美团云觉得使用Python构建云平台是个不错的选择。但是除此之外,美团云最初选择的Python的原因还在于这个项目最初起源于美团的运维团队。在美团的规模还很小,只有几百台机器的时候,美团云就已开始考虑研发一套虚拟化平台给公司内部业务使用,从而优化资源利用率,提升自动化运维的水平。早期的很多运维工程师、运维开发工程师都是Python程序员,都或多或少的给项目的开发做过贡献。并且,美团的自动化运维平台也用的是Python,无论是从技术上还是业务流程上,云计算与运维达到了非常紧密的结合。目前美团除了在线数据库和大数据计算等一些有着特殊性能需求的业务以外,其他业务已经全部迁到云上,是国内互联网公司中资源虚拟化覆盖率最高的一家。从技术架构上来说,整个云平台包含几十个独立的模块,有些模块也用其他语言编写,但是核心语言是Python,通过Python将不同架构、不同语言的模块组合在一起。
美团云的架构
美团云的前端后台使用的框架是Django,主要处理Web业务相关的逻辑,Django的社区支持比较丰富,文档健全,本身功能也比较强大。然而有些特性似乎比较多余,比如说Django的很多“黑魔法”是用数据库外键实现的,但是美团内部有自己的一个DBA团队,负责审核所有项目的数据库设计,他们则要求不允许用外键,据说是因为最佳实践得出的经验。
后端整个云平台的框架也是用Python实现的,在底层包括虚拟化计算、网络、存储三大功能体系,上层则分为资源管理、任务调度、日志、监控、用户管理、通知报警、API、用量计费等模块,同时在垂直方向上,又包括关系型数据库服务、缓存服务、对象存储服务、负载均衡服务、模板和快照服务、虚拟专用网络服务等。尽管后端的业务不尽相同,但架构师们抽象出了一套处理工作流的逻辑,并且用Python实现了一个框架。比如,在消息通信机制的选择上,美团云没有采用类似OpenStack的采用消息队列Rabbitmq的方案,而是采用了Web server,主要原因是考虑到Web server在更加久经考验,业界对HTTP协议有着更加成熟的方案。
美团云团队深度定制了Tornado,将它由单线程、异步回调的机制修改为同时支持多线程和同步查询的机制。这主要是考虑到在关系型数据库的查询上(比如MySQL),没有较成熟的异步查询方案,而单线程的阻塞查询则会影响Tornado的主线程。通过精巧的代码整合,将Tornado与SQLAlchemy这样的数据库ORM集成在一起,成功地解决了数据库的问题。同时针对SQLAlchemy的特性进行了一些设置,比如关闭Auto-Commit,这样能够使得ORM不会在每次查询的时候都会发出网络连接,而是在一个线程的业务逻辑里将所有的修改操作hold住,只允许查,在线程结束的时候手动commit,关闭session,提交所有的修改。通过这种方式,实现了一个线程级别的数据库事务锁和对象锁,使得程序员们能在一个线程的逻辑里面同时查询和修改多个数据库表,同时保证业务的原子性。陈博说“通过这些框架,程序员们在开发上层业务的时候也感觉到更加便捷了。”
听众对演讲反应热烈,表示受益匪浅,也对美团产生的敬佩之情。美团能发展到今天这般规模,其技术能力不容小觑。”当然,这些只是美团云整个技术的冰山一角。美团是中国第一大的O2O电商,网络流量500T/天 ,月活跃用户数超过1.3亿。支持这一庞大业务规模的正是美团云。今年3月,美团云获得IDC牌照,8月对外开放首个高品质的自建机房。同时,美团云通过第四批可信云认证,并将“电商云”奖项收入囊中。2015年第四季度,美团云也将推出数据产品及行业解决方案。所有的这些都意味着,美团云致力于为千万用户提供稳定的公有云服务这一愿景,正在成为现实。