QCon 演讲火热征集中,快来分享技术实践与洞见! 了解详情
写点什么

美团大众点评合并:背后技术力量的对比回顾

  • 2015-10-14
  • 本文字数:3046 字

    阅读完需:约 10 分钟

美团网和大众点评网在 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 等来保证数据的准确快速产生,而因推荐业务需要,美团还大量使用了机器学习。可见美团和大众点评均具有实力强大的技术团队,从云架构和大数据来看,美团似乎更甚一筹,两家公司合并实为强强联合,至于后续会如何发展,还将拭目以待。

感谢徐川对本文的审校。

2015-10-14 04:4916767
用户头像
Tina InfoQ高级编辑

发布了 1562 篇内容, 共 1188.4 次阅读, 收获喜欢 3885 次。

关注

评论

发布
暂无评论
发现更多内容

使用kitti数据集实现自动驾驶——发布照片、点云、IMU、GPS、显示2D和3D侦测框

秃头小苏

7月月更 kitti

zookeeper-watcher的javaApi相关使用

zarmnosaj

7月月更

云原生(六) | Docker篇之实战Dockerfile

Lansonli

Docker 云原生 7月月更

Android gradle常用

沃德

android Gradle 7月月更

关于InnoDB表数据和索引数据的存储

程序员欣宸

MySQL innodb MySQL InnoDB 7月月更

Unity实战问题-WebGL问题集锦-上篇

芝麻粒儿

Unity 7月月更

排序子序列与倒置字符串

未见花闻

7月月更

王者荣耀商城异地多活架构设计

地下地上

架构实战营

Zabbix 6.0 源码安装以及 HA 配置

耳东@Erdong

zabbix ha 7月月更 zabbix 6.0

Dockerfile中的保留字指令讲解

宁在春

Docker Dockerfile 7月月更

Block在开发中的实践应用

NewBoy

ios 前端 移动端 iOS 知识体系 7月月更

在线摇骰子色子工具

入门小站

工具

【算法社区】查找算法大全(hash、avl、bst、队列)

小明Java问道之路

二分查找 hash 查找 7月月更 BST

【Docker 那些事儿】容器网络(下篇)

Albert Edison

Docker Kubernetes 容器 云原生 7月月更

一款强大的mock数据生成工具

Xd

ArkUI开发框架组件的生命周期详解

坚果

HarmonyOS OpenHarmony Open Harmony 7月月更

鲲鹏代码迁移工具基础知识

乌龟哥哥

7月月更

「分享」从Mybatis源码中,学习到的10种设计模式

小傅哥

设计模式 小傅哥 mybatis 大厂面试 面试问题

Qt | 控件之QComboBox

YOLO.

qt 7月月更

Spring cloud 之限流

Damon

7月月更

C#入门系列(二十三) -- 分部类和抽象类

陈言必行

7月月更

在线SQL转文本工具

入门小站

工具

NFT市场格局仍未变化,Okaleido能否掀起新一轮波澜?

股市老人

认识区块链和比特币

沃德

程序员 7月月更

Mysql 温故知新系列「触发器详解」

安逸的咸鱼

MySQL 7月月更

linux之realpath命令

入门小站

Linux

python文件操作知多少

迷彩

Python基础 文件操作 7月月更

uni-app进阶之自定义【day13】

恒山其若陋兮

7月月更

Python 迭代器介绍及其作用

宇宙之一粟

Python 迭代器 7月月更

分布式系统中数据存储方案实践

Java 架构

美团大众点评合并:背后技术力量的对比回顾_移动_Tina_InfoQ精选文章