美团大众点评合并:背后技术力量的对比回顾【转载+整理】
要是有这架构,局部代码写得再烂,那都不是问题~Google 就曾经说,如果采用 MapReduce,再烂的搜索算法,也能很快得到结果~
美团网和大众点评网在10月8日中午联合发布声明,宣布达成战略合作,两者将共同成立一家新公司。两者也在InfoQ及其组织的大会上进行过多次分享,我们将对美团和大众点评使用的技术进行回顾,来看看这两家电商巨头的技术实力。
美团和大众点评都是国内O2O领域的主要参与者。除了团购外,美团还有自营的外卖、电影、酒店预订等业务。大众点评网最开始主要为用户提供各种生活信息服务,基于这些信息开发了团购等业务模式,近期它也开始涉足电影、酒店预订等业务。
由此可见,两者在业务上存在相当的重合,那么他们在公司成长的过程中又分别选取了什么样的技术发展路线?
技术对比
下面我们将从技术角度来看两者的异同,包括云架构,数据架构,前端,移动端,个性化推荐。
云架构
大众点评容器私有云:
大众点评在2014年7月基于Docker搭建了私有云平台。2015年8月份大众点评云平台首席架构师盛延敏在InfoQ主办的CNUTCon容器技术峰会上分享了它们容器私有云的实战内容。
Docker的应用场景之一就是构建企业私有云平台,它具有简单轻量的特点,可以降低私有云的构建难度,也能更高效的利用物理资源。大众点评的私有云平台承担了大部分线上业务。实例数2800个左右,Docker物理集群300多台。
大众点评原来的应用部署在KVM上,需要耗费很大运维时间和精力,特别对于扩容和缩容。搭建Docker私有云之后实现了应用标准化和运维自动化,从而节省了运维成本。
大众点评的Docker云底层使用Docker,通过Dockerfile,Docker Registry统一管理应用的标准化运行环境。组件之间使用NATS,降低耦合。接入层使用Nginx和Zookeeper。对于WEB应用,通过与Nginx的Restful接口交互;对于服务类应用,通过Zookeeper上注册和注销服务IP和端口,便于客户端发现和更新该服务。
美团云:
美团网于2013年上半年发布了其公有云服务美团云。它们也在InfoQ上分享了公有云的研发经验。
美团云最初版本起步于2012年7月,一开始构建的是私有云计算平台。2013年5月,美团云对外提供公有云服务。美团云架构设计使用OpenStack的框架,网络架构参考CloudStack,主要组件由自己开发,部分组件在OpenStack原生组件上进行了二次开发。
核心云主机管理为自研,采用Region-Zone-Cluster三层架构,支持跨地域,多数据中心的大规模集群部署。采用基于KVM的主机虚拟化和基于OpenVSwitch+OpenFlow的网络虚拟化技术,降低了系统的开发和维护成本。镜像管理使用Glance;身份管理使用Keystone;对象存储使用Swift。
美团云在2013年5月刚上线时单月交易额10亿左右,2015年7月单月突破111亿,对美团云系统和网络稳定性要求比较高,目前美团云支撑了超过两亿用户的高并发访问。并采用多个数据中心,数据中心之间使用光纤高速互联,确保美团云的可靠性。
数据架构
大众点评:
大众点评在起步阶段,为了抢占市场,快速推出产品,采用方案比较简单。访问量大起来后,针对系统做了改进。大众点评的DBA经理苗发平曾在InfoQ分享大众点评的数据架构之道。新版本中引入了Ehcache作为一级缓存,Memcached作为二级缓存,缓解数据库读压力,分布式文件系统MogileFS作为分布式图片存储服务解决海量图片存储,搜索引擎Lucene,Nosql数据库MongoDB作为K-V数据服务。后期引入MySQL数据库,并采用Hadoop集群管理。最新版本中为解决服务治理问题,引入“泳道架构与容错隔离”方案,来提供系统的高可用性。架构中使用MySQL高可用方案。通过MMM实现HA高可用,实现秒级故障转移。
美团:
关于美团网的架构,美团网的技术委员会主席夏华夏在InfoQ主办的全球架构师峰会上分享了一些美团架构实践经验。美团初期使用MySql+Apache/PHP,随着业务增加,在开源软件的基础上做集成和优化,使用了Memcache和Varnish,随后增加了Redis。
初期架构图:
现在的美团整体架构图:
前端开发
大众点评是国内领先的城市生活消费指南网站,浏览量为500M(GA)/每月,高峰3000次动态请求/每秒,180万动态访问量/天。前端早期使用ASP.NET+SQL server,独立的web和Database服务器。后来引进了Cortex,基于CommonJS的Web开发环境。
美团网采用JS框架,基于YUI3来构建,使用了YUI内部的Loader、模块、组件框架等基本思路和工具,围绕YUI开发了自己的公共底层库、Combo以及发布工具等。2014年底,基于React开发页面组件,使用NPM进行分享,用NPM+Reduce构成新的资源管理方案。其后在 Node 框架的基础上,提供了一系列中间件和开发工具,逐步构建对组件友好的前端工程化方案 Turbo。
移动客户端
大众点评:
大众点评月综合浏览量(网站及移动设备)超过150亿,其中移动客户端的浏览量超过85%,移动客户端累计独立用户数超过2亿。移动端是大众的业务重点。我们可以通过大众点评移动应用架构师屠毅敏在全球架构师峰会上关于大众点评移动应用的架构演进的演讲来一窥大众点评的移动开发技术。大众点评的移动架构主要关注三个方面:速度,灵活性,耦合。在速度方面优化Http协议减短响应时间,并进行了缓存优化。引入NDK以及Hybrid App进行开发。利用Android DexClassLoader进行动态加载。
美团:
美团手机移动端业务种类多差异大,为解决早期架构上的耦合场景问题,引入了Portal开源框架。并引入Subtree代码管理和CocoaPods第三方库依赖管理工具。并利用Jenkins进行持续集成。美团技术专家陈晓亮曾在InfoQ主办的QCon全球软件开发大会上针对美团移动平台背后的技术进行了演讲。
美团手机移动端架构图:
个性化推荐
大众点评:
大众点评网因应对大数据查询分析功能,从2011年开始使用Hadoop,有60多个节点,700TB容量,还有2个HBase线上集群。使用Puppet管理集群,之后由于业务需要,又自行开发了Taurus调度系统。并于2012年数据库仓库转向Hadoop/Hive。在2013年建立主要的大数据架构后,大众点评上线了HBase应用,并引入Spark/Shark以提高Ad Hoc Query执行时间。整个大数据架构采用开源+自研的形式。
美团:
为解决信息过载,帮助用户快速找到所需,美团推出大数据推荐系统。美团推荐系统框架分为:数据层,触发层,融合过滤层和排序层。数据层用Hadoop/Hive,HBase,MySql和Redis作为数据存储,使用了ETL系统,Map/Reduce,Spark,Storm,Flume作为数据产生。触发层利用各种触发策略如用户行为产生推荐的候选集,使用传统的user based,item based协同过滤算法进行融合筛选。排序层主要是利用机器学习的模型对触发层筛选出来的候选集进行重排序。
随着美团交易规模的逐步增大,积累下来的业务数据和交易数据越来越多。目前在美团的团购系统中大量地应用到了机器学习和数据挖掘技术。并且研究了基于机器学习方法的POI品类推荐算法。美团网的技术总监王栋曾以美团的智能化推荐为主题接受过InfoQ的采访。
总结
上面对云架构,前端,移动端,数据库,大数据的概况来看,在云架构上大众点评使用的是Docker,而美团是采用OpenStack+自研。前端和移动端因功能不同而不一致。数据库两者在前期都采用简单架构以满足初创公司快速发展,后因业务需要而不断采用新的开源技术。在大数据方面,均采用了Hadoop,HBase,Spark,Storm等来保证数据的准确快速产生,而因推荐业务需要,美团还大量使用了机器学习。可见美团和大众点评均具有实力强大的技术团队,从云架构和大数据来看,美团似乎更甚一筹,两家公司合并实为强强联合,至于后续会如何发展,还将拭目以待。