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

美团网和大众点评网在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…

php fpm 统计,php实现fpm开启状态统计的方法

这篇文章主要给大家介绍了php-fpm开启状态统计的方法,文中介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面来一起看看吧。本文主要给大家介绍了关于php-fpm开启状态统计的相关内容,分享出来供大家参考学习&#xf…

shell脚本判断文件类型

转自:http://www.cnblogs.com/sunyubo/archive/2011/10/17/2282047.html 1. shell判断文件,目录是否存在或者具有权限 2. #!/bin/sh 3. 4. myPath"/var/log/httpd/" 5. myFile"/var /log/httpd/access.log" 6. 7. # 这里的-x 参数判断$myPath是…

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…

php中括号的优先级是不是最高的,理解php中操作符的优先级和结合性

一般地说,操作符具有一组优先级,也就是执行他们的顺序。操作符还具有结合性,也就是同一优先级的操作符的执行顺序。这种顺序通常有从左到右(简称左)、从右到左(简称右)或者不相关。下表中给出的是php中的操作符和相关性简表,他们出…

Txt格式配置表无法解析的问题——BOM

今天再次遇到同一个问题:策划给来一个Txt格式配置表,我用解析类去读取,返回的结果为空。解析类参数是:主键key,文件名fileName,错误提示errorTip。 写读取语句的时候,主键key我是直接从txt文件中…

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…

PHP动态验证,php-动态更改验证规则

我正在处理包含用户数据,特别是电话号码字段的表单.通常不需要电话号码,因此模型中唯一的验证规则是usphone规则.但是,如果用户正在提交此表格,则电话号码变得必不可少.我以为我可以在运行中简单地添加验证规则,设置模型并调用validates方法,但是我做错了或者没有按我预期的方式…

Html5 各属性详解

Div 这个标签是我们见得最多、用得最多的一个标签。本身没有任何语义,用作布局以及样式化或脚本的钩子(hook)。 Section section 应用的典型场景有文章的章节、标签对话框中的标签页、或者论文中有编号的部分。一个网站的主页可以分成简介、新闻和联系信息等几部分。…

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…

ubuntu memcached php,如何在 Ubuntu 18.04 上安装 Memcached

Memcached 是一个免费的开源高性能内存中键值数据存储。 它最常用于通过从数据库调用的结果缓存各种对象来加速应用程序。在本教程中&#xff0c;我们将介绍在 Ubuntu 18.04 上安装和配置最新版 Memcached 的过程。 相同的说明适用于 Ubuntu 16.04 和任何基于 Ubuntu 的发行版。…

window.cookie

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

未知宽高元素的水平垂直居中

大致有4种方法实现&#xff1a; 一、table布局(display:table) 二、绝对布局&#xff08;position:absolute&#xff09;translate 三、转化为行内标签display:inline-block&#xff0c;借助另外一个标签高度来实现 四、通过js的获取标签的宽高来控…

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…

oracle批量联机,Oracle 12.2 使用联机重定义对表进行多处改变

下面的例子将演示如何使用联机重定义操作来对表进行多处改变&#xff0c;原始表jy.original的创建语句如下:SQL> create table jy.original(2 col1 number primary key,3 col2 varchar2(10),4 col3 clob,5 col4 date)6 organization index;Table created.表jy.original将按以…

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…

php实现文字向左跑马灯,js实现文字跑马灯效果

js实现文字超过显示宽度每间隔1s自动向左滚动显示*{ margin:0; padding:0;}body{font:12px/1 微软雅黑;}.wrapper{font-size: 0.85rem; color: #333; padding-top: 0.75rem; margin: 0 0.75rem; white-space: nowrap; overflow: hidden;width: 300px;}.inner{ width:1000px;ove…

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…

oracle计算每月最小工作日,Oracle计算指定日期内的工作日(不包含周末)

1、获取当天是礼拜几&#xff1a;select to_char(sysdate,d) from dual; --礼拜天为1&#xff0c;礼拜一为2&#xff0c;类推2、获取 两个时间段间的 工作日&#xff1a;select (trunc(&end_dt - &start_dt) -((caseWHEN (8 - to_number(to_char(&start_dt,D))) &g…