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

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

感谢徐川对本文的审校。

转载于:https://www.cnblogs.com/lingzhihua/p/4913656.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/471469.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python web开发 CSS基础

文章目录1. 基础知识2. ID,Class 选择器3. CSS盒子模型4. 嵌入CSS样式4.1 内联样式表4.2 内部样式表4.3 外部样式表learning from 《python web开发从入门到精通》 1. 基础知识 CSS ,Cascading Style Sheet 层叠样式表,标记语言&#xff0c…

python web开发 JavaScript基础

文章目录1. script 标签2. 字面量、变量3. 数据类型4. 运算符5. if 条件6. switch分支7. for循环8. while循环9. break, continue10. 函数11. JS事件12. 引入JS的两种方式12.1 HTML页面嵌入12.2 引入外部JS文件learning from 《python web开发从入门到精通》 JavaS…

python web开发 jQuery基础

文章目录1. 引入 jQuery2. 基本语法3. jQuery 选择器3.1 元素选择器3.2 #id 选择器3.3 .class 选择器4. jQuery事件5. 获取内容和属性5.1 获取内容5.2 获取属性learning from 《python web开发从入门到精通》 jQuery 是一个轻量级的 JavaScript 函数库包含 元素选取&#xff0…

python web开发 Bootstrap框架基础

文章目录1. 安装2. Bootstrap 5 基本应用learning from 《python web开发从入门到精通》 Bootstrap 是最受欢迎的 前端组件库&#xff0c;用于 HTML&#xff0c;CSS&#xff0c;JavaScript 开发的 开源工具集 1. 安装 使用 CDN 引用 <link href"https://cdn.jsdeli…

window.cookie

本地测试cookie用火狐来测试 首先cookie是document上的一个属性。 先弹出一个cookie alert(document.cookie); //弹出是空的 设置cookie&#xff0c;格式是有一定要求的&#xff0c;格式是&#xff0c;名字值 这样的格式 所以设置的时候&#xff0c;这样设置 document.cook…

python web开发 网络编程 TCP/IP UDP协议

文章目录1. TCP/IP协议1.1 IP协议1.2 TCP协议2. UDP协议3. Socket4. TCP编程4.1 创建TCP服务器4.2 创建TCP客户端4.3 简易聊天工具5. UDP编程5.1 创建UDP服务器5.2 创建UDP客户端learning from 《python web开发从入门到精通》 1. TCP/IP协议 大家都用同样的协议 protocol&am…

python web开发 网络编程 HTTP协议、Web服务器、WSGI接口

文章目录1. HTTP协议2. Web服务器3. 静态服务器创建 web_server.py4. WSGI 接口4.1 CGI 通用网关接口4.2 WSGI4.3 定义 WSGI 接口4.4 运行 WSGI 服务learning from 《python web开发从入门到精通》 1. HTTP协议 应用层最主要的协议&#xff1a;HTTP协议&#xff08;HyperText…

android 75 新闻列表页面

new.xml <?xml version"1.0" encoding"UTF-8" ?> <newslist><news><title>黑马52期就业快报</title><detail>热烈祝贺黑马52期平均薪水突破13k</detail><comment>15687</comment><image>ht…

python web开发 MySQL数据库基础

文章目录1. 简介2. 下载安装3. 操作 MysQL 数据库3.1 创建数据库3.2 选择数据库3.3 查看数据库3.4 删除数据库4. 数据类型5. 操作 MysQL 数据表5.1 创建数据表5.2 查看表的结构5.3 修改表的结构5.4 删除数据表6. 操作 MySQL 数据表记录6.1 添加数据6.2 查询、修改、删除learnin…

python 操作MySQL数据库

文章目录1. 安装 PyMySQL2. 连接对象3. 游标对象4. 增删改操作cursor.execute(sql)cursor.executemany(sql, seq_of_params)5. 查询操作6. ORM编程常用 python ORM 库learning from 《python web开发从入门到精通》 1. 安装 PyMySQL conda 虚拟环境下安装 pip install pymysq…

python web框架基础

文章目录1. Web框架简介1.1 MVC1.2 模板引擎2. 常用 Python Web 框架3. 虚拟环境4. 部署方式learning from 《python web开发从入门到精通》 1. Web框架简介 简化 web 开发的软件框架 一般都支持&#xff1a;管理路由&#xff0c;支持数据库&#xff0c;MVC&#xff0c;ORM&…

导Excel数据到Oracle的脚本,Oracle使用TOAD实现导入导出Excel数据

在Oracle应用程序的开发过程中&#xff0c;访问数据库对象和编写SQL程序是一件乏味且耗费时间的工作&#xff0c;对数据库进行日常管理也是需要很多SQL脚本才能完成的。Quest Software为此提供了高效的Oracle应用开发工具-Toad。在Toad的新版本中&#xff0c;还加入了DBA模块&a…

Chapter 14 Exercises Problems

转载于:https://www.cnblogs.com/momoko/p/4937730.html

FastAPI 结合 SQLAlchemy 操作 MySQL 数据库

文章目录1. 安装 SQLAlchemy2. 创建数据库3. SQLAlchemy 连接 MySQL4. 创建数据模型5. 创建 Pydantic 模型6. crud 工具7. main函数learning from 《python web开发从入门到精通》 1. 安装 SQLAlchemy pip install sqlalchemy 2. 创建数据库 mysql -u root -p 命令行登录 M…

LeetCode 2094. 找出 3 位偶数

文章目录1. 题目2. 解题1. 题目 给你一个整数数组 digits &#xff0c;其中每个元素是一个数字&#xff08;0 - 9&#xff09;。数组中可能存在重复元素。 你需要找出 所有 满足下述条件且 互不相同 的整数&#xff1a; 该整数由 digits 中的三个元素按 任意 顺序 依次连接 …

LeetCode 2095. 删除链表的中间节点(快慢指针)

文章目录1. 题目2. 解题1. 题目 给你一个链表的头节点 head 。删除 链表的 中间节点 &#xff0c;并返回修改后的链表的头节点 head 。 长度为 n 链表的中间节点是从头数起第 ⌊n / 2⌋ 个节点&#xff08;下标从 0 开始&#xff09;&#xff0c;其中 ⌊x⌋ 表示小于或等于 x…

LeetCode 2096. 从二叉树一个节点到另一个节点每一步的方向(最小公共祖先)

文章目录1. 题目2. 解题1. 题目 给你一棵 二叉树 的根节点 root &#xff0c;这棵二叉树总共有 n 个节点。 每个节点的值为 1 到 n 中的一个整数&#xff0c;且互不相同。 给你一个整数 startValue &#xff0c;表示起点节点 s 的值&#xff0c;和另一个不同的整数 destValue …

LeetCode 2097. 合法重新排列数对(欧拉路径)

文章目录1. 题目2. 解题1. 题目 给你一个下标从 0 开始的二维整数数组 pairs &#xff0c;其中 pairs[i] [starti, endi] 。如果 pairs 的一个重新排列&#xff0c;满足对每一个下标 i &#xff08; 1 < i < pairs.length &#xff09;都有 endi-1 starti &#xff0c…

《如何在大学里脱颖而出(How to Win at College)》读书笔记

《如何在大学里脱颖而出(How to Win at College)》读书笔记 图书简介 中文版&#xff1a; 英文版&#xff1a; 作者卡尔纽波特&#xff08;Cal Newport&#xff09;于 2004 年6月以优等生荣誉学会会员身份毕业于达特茅斯学院。曾在《华尔街日报》的学报和《今日商务》等杂志上发…

LeetCode 2099. 找到和最大的长度为 K 的子序列

文章目录1. 题目2. 解题1. 题目 给你一个整数数组 nums 和一个整数 k 。 你需要找到 nums 中长度为 k 的 子序列 &#xff0c;且这个子序列的 和最大 。 请你返回 任意 一个长度为 k 的整数子序列。 子序列 定义为从一个数组里删除一些元素后&#xff0c;不改变剩下元素的顺…