首页>会议文档 >

美团点评 梁士兴 - 从分层复用到自动化测试—看美团客户端架构的演变_部分2

page:
美团点评 梁士兴 - 从分层复用到自动化测试—看美团客户端架构的演变_部分2
美团点评 梁士兴 - 从分层复用到自动化测试—看美团客户端架构的演变_部分2
美团点评 梁士兴 - 从分层复用到自动化测试—看美团客户端架构的演变_部分2
美团点评 梁士兴 - 从分层复用到自动化测试—看美团客户端架构的演变_部分2
美团点评 梁士兴 - 从分层复用到自动化测试—看美团客户端架构的演变_部分2
美团点评 梁士兴 - 从分层复用到自动化测试—看美团客户端架构的演变_部分2
美团点评 梁士兴 - 从分层复用到自动化测试—看美团客户端架构的演变_部分2
美团点评 梁士兴 - 从分层复用到自动化测试—看美团客户端架构的演变_部分2
美团点评 梁士兴 - 从分层复用到自动化测试—看美团客户端架构的演变_部分2
美团点评 梁士兴 - 从分层复用到自动化测试—看美团客户端架构的演变_部分2
美团点评 梁士兴 - 从分层复用到自动化测试—看美团客户端架构的演变_部分2

美团点评 梁士兴 - 从分层复用到自动化测试—看美团客户端架构的演变_部分2

所属会议:ArchSummit全球架构师峰会北京站2017会议地点:北京


下载

手机看
活动家APP客户端

扫二维码下载
或点击下载
Android iOS

7968次
浏览次数
ArchSummit全球架构师峰会北京站2017所有文档 宜信 张军 - 信贷业务持续创新当中的大数据风控架构_部分1 宜信 张军 - 信贷业务持续创新当中的大数据风控架构_部分2 翼启云 孙鹰 - 守住Fintech这扇门 — 高可用测试平台演进之路 优酷 张云锋 - 优酷广告投放引擎优化实践_部分1 优酷 张云锋 - 优酷广告投放引擎优化实践_部分2 优酷 李玉 - 视频推荐中用户兴趣建模、识别的挑战和解法 郑建军 - PaxosStore:微信高可用、强一致存储系统 知乎 姚钢强 - 知乎 feed 流架构演进 中兴通讯首席架构师 钱煜明 - 打造金融级分布式数据库服务_部分1 中兴 钱煜明 - 打造金融级分布式数据库服务_部分2 诸葛越 - 算法无处不在 转转 张相於 - C2C电商平台推荐系统架构演进 亚马逊 代闻 - Cloud Native 架构的演进之路 亚马逊 郑斌 - 工程师文化与文化中的工程师 腾讯 陈宁国 - 腾讯海外计费系统架构演进 腾讯 黄斯亮 - 全民K歌从零到千万在线后台服务的演进之路与黑产对抗 腾讯 王旻 - 腾讯云大规模任务调度系统的架构蜕变 腾讯 闫二辉 - 腾讯企业级消息中间件DevOps实践 王秀刚 - 京东金融多业务集成解决方案 微博 崔建兴 - 微博社交广告系统架构实践 微博 胡忠想 - 微博应对突发热点事件的弹性调度实践 吴惠君 - 实时流系统Heron的异常检测和恢复 清华大学 张宇韬 - 大规模异构网络数据融合 趣店 尹茂君 - 砥砺前行:趣店同城双活高可用架构实践 沈悦时 - 超高密度游戏直播转码架构 滴滴出行平台技术部 王涛 - 滴滴出行跨地域 iOS 构建优化与持续集成 滴滴出行 李培龙 - 滴滴出行海量数据场景下的智能监控与故障定位实践 丁宇 - 阿里巴巴云化架构创新之路 饿了么 胡彪 - 饿了么移动性能可视化之路 付钱拉 石伟 - 从零到一,构建灵活、高性能的金融账务系统 复旦大学 邱锡鹏 - 深度学习在自然语言处理中的应用 瓜子二手车 魏旋 - 机器学习中的人机互动 杭州谐云 苌程 - 容器环境下基于APM的海量日志全链路跟踪分析 恒丰银行 赵宏伟 - 恒丰银行基于大数据技术重塑数据仓库及应用的探索_部分1 恒丰银行 赵宏伟 - 恒丰银行基于大数据技术重塑数据仓库及应用的探索_部分2 恒丰银行 赵宏伟 - 恒丰银行基于大数据技术重塑数据仓库及应用的探索_部分3 京东 李维 - 自动深度语法分析是自然语言应用的核武器 京东 周光 - 京东虚拟业务系统高可用性设计 京东 刘峻桦 - 京东国际独立站系统演进 陆金 卢峻 - 凤凰涅磐:陆金所金融平台的架构大升级 美丽联合 张振华 - 美丽联合容器云平台建设的实战分享 美丽联合 赵懿 - 时尚的产品化和商业化_部分1 美丽联合 赵懿 - 时尚的产品化和商业化_部分2 美团点评 孙业锐 - 美团点评用户行为分析系统的构建与优化 美团点评 梁士兴 - 从分层复用到自动化测试—看美团客户端架构的演变_部分1 摩拜 范同祥 - 摩拜国际化架构演进_部分1 摩拜 范同祥 - 摩拜国际化架构演进_部分2 拍拍贷 杨波 - 拍拍贷基础架构的DevOps演进之路 青云 张雁飞 - RadonDB:新一代分布式关系型数据库 滴滴出行 陈宜明 - 滴滴出行平台的高可用实践 百度 牟宇航 - 百度MPP数据仓库Palo开源架构解读与应用 百度 马艳军 - 人工智能驱动的内容生产与分发_部分1 百度 马艳军 - 人工智能驱动的内容生产与分发_部分2 百度 马晋 - 成就成长-工程师团队前进的驱动力 百度 于洋 - PaddlePaddle:Towards a Deep Learning Compiler for the Cloud 北京木仓科技(驾考宝典) 谢呈 - 技术人转身创业的坑和坡 菜鸟网络 朱君标 - 菜鸟技术团队全栈化(开发全栈前端)之路 Reddit 陈晨 - 从Instagram到Reddit,浅谈西方工程师文化和管理 tutorabc 张明 - tutorabc微服务平台架构实践_部分1 tutorabc 张明 - tutorabc微服务平台架构实践_部分2 Yuanchi Ning - UberEats Discovery:Food Recommendation 阿里UC 顾辉 - UC浏览器客户端容器化架构演进 阿里巴巴 吕奇 - 阿里混部技术最佳实践 阿里巴巴 张瓅玶 - 阿里巴巴调度与集群管理系统Sigma 阿里巴巴 林轩 - Pouch和阿里容器技术演进 阿里巴巴 余锋 - MySQL数据库架构的演化观察 阿里巴巴 张佶 - 阿里小蜜中的机器阅读理解技术揭秘_部分1 阿里巴巴 张佶 - 阿里小蜜中的机器阅读理解技术揭秘_部分2 阿里巴巴 张娟 - 弹性容量管理探索 爱奇艺 邢常亮 - 与狼共舞 - 爱奇艺移动业务后台系统架构设计与优化实践 爱因互动 王守崑 - 创业,永远在路上 Tumblr 李北涛 - 相关性反馈在推荐系统中的应用 PayPal 曹若沈 - 高可用低延时的PayPal风控数据平台 TalkingData 宋净超 - 从Kubernetes到Cloud Native——云原生应用之路_部分1 TalkingData 宋净超 - 从Kubernetes到Cloud Native——云原生应用之路_部分2 TalkingData 宋净超 - 从Kubernetes到Cloud Native——云原生应用之路_部分3 58速运 沈剑 - 分还是合?58到家订单中心架构演进 bilibili 王昊 - 技术、产品、管理,选择和平衡 FreeWheel 宋一玮 - FreeWheel在微服务架构下的前端改造实践 FreeWheel 姜冰 - FreeWheel OLAP实践 musical-ly 杜鹏 - musical-ly基于社交关系的Smart Feed架构 OnVideo 刘歧 - 大闹天宫:悟空在FFmpeg社区从入门到出家

文档介绍

美团点评伴随着业务的飞速发展,客户端研发团队的规模从初期的20余人的发展为数百人,且分散在不同的业务团队。如此大规模的研发团队,如何保证高效的内外部协同效率? 美团与大众点评原本是两家独立运营的大型互联网公司,分别有着不同的积累和储备。两家的合并为业务带来巨大的好处:更多的流量、更多的用户。但同时也为技术团队带来了巨大的挑战:如何能够同时高效的在美团和大众点评两个App上实施业务开发? 突破了这些难题之后,我们希望继续提高我们的研发效率。经过系统性的分析,我们判断测试效率当前阶段的效率瓶颈,对应的解决思路是实施自动化测试。那么问题又来了,类似美团点评的业务在不停的快速发展和迭代,是否适合实施大规模的自动化测试?

演讲实录

前言
  伴随着业务的飞速发展,美团点评的客户端研发团队的规模从初期的20余人的发展为数百人,且分散在不同的业务团队。拥有如此大规模的研发团队,他们是如何保证高效的内外部协同效率?美团与大众点评原本是两家独立运营的大型互联网公司,分别有着不同的积累和储备。两家的合并为业务带来巨大的好处的同时也为技术团队带来了巨大的挑战——如何能够同时高效地在美团和大众点评两个App上实施业务开发?
  在突破了这些难题之后,美团希望继续提高自身的研发效率,经过系统性地分析,他们的解决方案是实施自动化测试。那么他们是如何在大规模业务开发团队中高效实施自动化测试,进一步提升研发效率和质量的?
  本文就带你揭晓美团点评技术团队背后的故事,分享一些美团点评客户端团队的技术架构及其设计思路,帮助团队技术负责人设计有利于提升研发效率的业务架构。以下全文来自美团技术研究员梁士兴在2017北京ArchSummit全球架构师峰会上的演讲。
  1 为什么要建设客户端架构?
  客户端架构与客户端或APP的发展经历是相关的。早些年APP通常是由个人开发者或者小团队来实施,那时候它往往是作为一个业务创新或某一个实践去做的。
APP从小型变成了巨无霸,代码动辄上百万行,美团移动支付的占比也早就超过90%,开发团队也从小变大,美团点评现已有数百人专门从事APP开发。迭代周期主要和业务的重要性相关,如果是核心的业务载体,迭代周期就需要做得越来越频繁、越来越迅速。
  美团点评使客户端架构统一是希望得到这方面的收益,通过标准化,就可以实现三个统一:统一的基础设施、统一的逻辑分层、统一的开发范式。然后会带来四个明确的好处:
  1.让一线开发人员聚焦在业务开发上;
  2.可以实施灵活的人力调配;
  3.可以用标准化的方式介入一个新的业务以支持其快速启动;,
  4.一旦实现了标准化,必然可以基于它做一些自动化的实现,可以把一些相对机械重复的事通过自动化去取代人工。
  最终带来的好处是:可以更好地服务业务。
  2 美团客户端的演变历程
  上图是针对美团客户端整理的技术研发体系。纵向是按时间和阶段划分的,横向按业务逻辑、开发范式、技术栈整理出来的。从技术体系图来看,进行业务开发的技术挑战其实是蛮大的,需要了解数据采集、监控、质量保证等方方面面。设计业务架构的目的是让业务研发人员把精力集中在业务开发上。
  美团客户端架构发展分为三个阶段:
  蛮荒阶段:这个阶段并没有什么体系化的架构设计;
  标准化的阶段:内部细分了三个小阶段,实现了业务隔离、基础设施复用、开发范式等。
  自动化是正在建设中的阶段,希望通过使用工程自动化的手段去持续提升效率。
  3 蛮荒阶段
  蛮荒阶段也就是最初的APP形态,众所周知,美团是做团购起家的,万物都是团购,在这个阶段美团并没有针对性地设计任何架构相关的东西。但是团购有一个好处就是可以以很低的成本把业务触达到各个领域,在这个阶段中,美团实现了业务遍地开花,很轻松地触达到不同的品类,比如酒店、电影等。于此同时,美团也让移动APP成为了核心业务载体,移动支付的占比超过了90%。
  面临的挑战
  那这个阶段能继续下去吗?挑战很快就接踵而至。挑战主要来源于两个方面:业务差异化和业务间的协同效率,从业务层面上来讲,虽然美团实现了业务的遍地开花,用团购方式触达到各个业务领域,但还不足以把业务做深。例如:团购这种形式并不适用于所有的领域,如酒店一定要预定,它和美食的团购行为是不一样的,这个时候要有诉求地去深耕业务,把不同业务特点的东西做出来,就是所谓的垂直化。因为业务这边已经有了不错的发展,换句话说就是赚到钱了,所以团队的规模在极速扩张,同时美团的研发团队被拆分到各个业务去,这也是为了更好地服务业务。
  4 标准化阶段
  针对第一阶段,美团主要通过分层和隔离的方式来解决问题,首先把跟各个业务都无关的和与各个业务都相关的公共基础设施定义为平台的基础设施。我们把一个平台做强,同时在这个平台的基础之上去构建各个业务,而且在业务里面进行有特色的垂直化建设,这个阶段会带来很明显的收益。
  通过这样的平台设施,在一定程度上实现了复用和业务的积累,解决了业务之间的耦合,各个业务在物理上会隔离开,放到不同的代码仓库里面,只是在构建的时候把他们集成在一起,这种模式还有一个好处,就是为新业务的接入保持开放,任何一个新业务都可以按照规范轻松地接进来。
  具体步骤
  如果想要达成这样的目的,首先应该开发一套标准的业务模板,所有的新业务都按照这个模板去开发,根据模板的内容去进行业务的定制,并且通过统一的方法来实现接入,谁做比较合适?显然是新业务,让新业务去做小白鼠,在这个阶段里,短期内是可以接受代码拷贝的,通过解耦拷一份代码,将其分到一个独立的仓库里。为什么说短期可以接受这种行为?客户端有一个特点,哪怕不动弹,过一段时间页面也会被产品改得面目全非。
  那么在这个过程中美团的收益是什么?总结起来有三点:
  1.首先是在业务层面实现了业务间的隔离,解除了业务间的干扰,再也不会看到改电影模块导致酒店模块出现故障的现象,也不会把外卖的东西展示到美食区;
  2.在工程层面上实现了工程标准化,使得新业务接入的方式是标准化的;
  3.在技术层面上实现了独立的编译和二进制的集成,一旦实现了业务间的独立编译,就可以利用分布式的系统进行多机构建,这样就可以极大地缩短应用的构建时间。
  但梁士兴认为这个阶段并不完美,还有很大的改进空间。因为一线开发者的研发效率并没有因为这次重构得到任何提高,这是为什么呢?因为开发层面没有标准化,代码复用是非常困难的一件事,所以需要实现开发范式,通过定制开发范式,将开发过程统一化,开发产物也是标准化的,可以被更好地复用起来。
  统一开发范式
  从上图来看,茴字有五种写法,而USB接口的实现方式更多。也就是说客户端开发的实现方式有很多种,这就使得复用变得非常困难,因为大家做事的方式都不一样,业务模块接口也是不统一的,想用统一的方式把所有模块调度起来就会非常困难。
  这个问题让开发范式的目标明确了起来,开发范式实现的是书同文、车同轨,即开发方式统一化,业务接口标准化。
  在这里以一个实际页面为例,这是一个复杂的页面,这个页面天然地划分成若干块,从这几个角度上来讲,页面本身并不存在什么东西,所有东西都被放到模块里,经过这样的抽象,我们把页面上的每一块定义为一个模块,同时页面会退化成模块容器的概念。
  进一步来说,模块之间通常存在着通信的需要,这种通讯包括UI上的联动、数据的共享等,模块之间如果需要强依赖去获取数据,则模块之间也存在着依赖,这个是不能接受的,我们设计的目标是希望能实现模块级别的复用。
  为此,梁士兴说他们团队引入了一个消息总线的概念,可以允许模块在上面订阅或发布消息,通过这种方式也能实现模块之间的耦合。他们还进一步对模块的内部也进行了约束,要求模块统一,按照这样的方式去组织,能够更好地实现自动化测试。经过这样的设计,美团主要页面的实现方式得到了统一,最直接的好处就是模块可以跨业务复用了。

×

打开微信扫一扫,分享到朋友圈