解密国内BAT等大厂前端技术体系-携程篇(长文建议收藏)
1 引言
为了了解当前前端的发展趋势,让我们从国内各大互联网大厂开始,了解他们的最新动态和未来规划。这是解密大厂前端技术体系的第四篇,前三篇已经讲述了阿里、腾讯、百度在前端技术这几年的技术发展。
这一篇从携程讲起。
携程技术全景图
移动技术产品
移动技术产品分为四大模块:
- 技术平台:MCD(持续交付平台),APM(性能监控平台),MTS(日志排障平台)和MTP(无线技术平台)
 - 通信层:通信工具,消息推送平台,服务端推送
 - 框架层:涵盖App中通用能力,例如设备信息、位置信息、热更新、网络通信、配置、用户行为埋点等等
 - 业务层:通用的业务组件,例如分享功能、多媒体、日历、地图等等
 
大前端技术框架
携程在大前端技术框架层面主要面向不同应用场景沉淀了三个技术框架:
- CRN框架:Ctrip React Native,基于RN定制化的框架,并且完善了周边的打包、部署、监控等等能力
 - Node平台:Node服务的框架,涵盖从编码、编译、发布、监控全流程
 - Hybrid平台:用于App内Hybrid WebView框架
 
新技术探索
- 新技术:HTTP/2,VOIP
 - 新产品:小程序、快应用、VR/AR
 
MCD - 持续交付平台
MCD经历了多次大型迭代,逐步成为携程内部持续交付平台,涵盖了集成阶段、测试阶段、发布阶段和运营阶段的全流程研发环节。
MCD 1.0
MCD1.0的出现解决了系统在线打包的问题,并且通过CI/CD实现定时打包、代码静态扫描、自动化验包-白屏监测的能力。
持续集成阶段接入了代码扫描和冒烟测试的功能,通过infer和sonar进行代码的静态检查,并且统一集成单元测试能力,提供单测的结果和覆盖率。
冒烟测试可以监测白屏情况,并且进行多机型兼容测试,通过内容和图像对比提前发现问题。
通过集成编译,持续减低App编译的时长,提高研发测试效率。
MCD 2.0
MCD 2.0重新定义了MCD,涵盖了更为广泛的范围,包含集成、测试、发布、运营环节。并且由各个模块各自打包生成Bundle,再通过Bundle集成达到2~3分钟极速出包的能力。
同时MCD也增强了许多能力:
- 发布升级:对于Hotfix、Bundle、Hybrid/RN等内容实现动态下发,实现白名单、灰度发布能力,通过差分方式提高下载效率,并且提供大盘实时查看下发情况。
 - 配置中心:支持按照平台、版本、渠道、ABTest等不同维度下发配置信息,实现App配置信息管理能力。
 - 崩溃收集:App Crash/JS Error的收集,并且支持实时告警,多维度搜索,代码反查等能力。
 - App Size管理:基于业务模块进行App包大小管理
 
APM - 性能监控平台
APM性能监控平台主要关注性能、崩溃、异常等数据的监控,携程在性能与异常监控上也做了许多工作:
- 网络性能:收敛了网络通信SDK,统一了三端的网络通信底层能力,网络SDK可以统一管理IP池、链路池、请求池,达到性能最优化。并且可以监控在网络请求全链路中的错误情况,实现业务场景联通成功率99%。
 
- 页面性能:在页面性能统计口径上采用TTI,通过遍历检测页面文本的变化来判断是否到达TTI。根据不同的页面形态,制定了不同的性能指标。
 
- 异常处理:收集异常卡顿的情况并且自动归属到不同业务团队,崩溃信息收集可以固化下来用户的操作路径和相关信息。
 
MTS - 日志排障平台
收集App中所有相关数据,例如网络请求、页面跳转、图片请求、用户行为埋点、Cat日志、Web服务日志,并且通过时间轴将所有数据串联起来,可以帮助研发同学快速还原现场排查问题。
在日志展示上以一次用户session为集合,按照时间轴显示不同的页面信息,同时在每个页面的详细信息中会提供当前页面所有的网络请求、用户行为埋点、研发自主埋点等等内容。
MTP - 无线技术平台
打造无线技术平台,将App中通用能力沉淀下来,并且复用到多个App中,避免重复造轮子,提高研发标准化与效率。同时平台治理提供例如注册服务、排查故障、服务熔断、查看调用等功能,方便平台化技术的运营。
CRN - Ctrip React Native
CRN是携程内部基于React Native进行深度定制的移动端跨平台/动态化框架,目前已经在实际的业务项目中大规模应用,页面规模超过100个,PV数目已经超过传统Hybrid H5页面的2倍多。
基于React Native框架优化,定制成适合携程业务的跨平台开发框架 - CRN,提供从开发、发布、运维的全生命周期支持。
开发框架,主要是提供在开发阶段的支持。包括工具&文档、组件和解决方案、跨平台打通和代码托管功能。 工具主要包括CLI和Packer,文档包括API文档和设计文档,跨平台主要是抹平平台差异组件间的API,代码托管是为了方便业务团队,特别是新加入CRN开发的团队,可以参考已有业务代码快速上手。
性能优化,主要是为了解决首屏渲染的性能问题和RN框架的稳定性问题。为了解决首屏渲染性能问题,我们先后开发了框架拆分和预加载、业务按需加载、业务预加载和渐进式渲染方案,稍后会就这些方案做详细介绍。
发布运维,主要是提供发布系统和性能、错误监控平台,让业务开发同事能够有完备的系统去发现和解决线上问题。
详细信息可以查看:干货 | 近万字长文详述携程大规模应用RN的工程化实践
Node平台
携程在2017年9月份正式上线了Node.js应用,历经2年时间,应用数实现了8倍增长,覆盖公司33个业务部门。
Node.js的工程化建设,涵盖开发、构建、测试、发布、运维各个环节:
- 开发:根据业务场景提供不同的脚手架工程(SSR、DA Service、Desktop Application),提供核心中间件、数据Mock平台、Docker化的开发环境。
 - 构建:安装依赖包,检查依赖包版本,构建目标文件,同时提供代码静态扫描,安全扫描的能力。
 - 测试:提供自动化测试,集成测试,灰度测试和压力测试
 - 发布:提供携程云和公有云发布能力,灰度发布和回滚能力,实现内部npm包开发发布流程与Git高度集成
 - 运维:日志监控和应用排障的能力
 
详细信息可以查看:干货 | 浅谈Node.js在携程的应用
GraphQL-BFF
GraphQL-BFF 的核心思路是,将多个 services 整合成一个中心化 data graph。
每个 service 的数据结构契约,都放入了一个大而全的 GraphQL Schema 里;如果不做任何模块化和解耦,开发体验将会非常糟糕。每个团队成员,都去修改同一份 Schema 文件。
这明显是不合理的。GraphQL-BFF 的开发模式,应该跟 service 的领域模型,有一一对应的关系。然后通过某种形式,多个 services 自然整合到一起。
技术选型上,开发语言选用了 TypeScript,跑在 Node.js v10.x 版本上,服务端框架是 Koa v2.x 版本,使用 apollo-server-koa 模块去运行 GraphQL 服务。
Apollo-GraphQL 是 Node.js 社区里,比较知名和成熟的 GraphQL 框架。做了很多的细节工作,也有一些相对前沿的探索,比如 Apollo Federation 架构等。
详细信息可以查看:干货 | 万字长文全面解析GraphQL,携程微服务背景下的前后端数据交互方案
写在最后
携程在组织架构上有基础研发团队进行保障,在大前端领域能够收敛、沉淀众多的基础平台服务、技术框架,形成了一套比较完整、统一的基础框架能力,很好的支撑了多App、多业务的快速发展。
本篇文章力图从大前端各个方面去整理总结携程当前的技术体系,但一定会有许多遗漏,同时开放信息毕竟有限,希望相关同学可以一起多多交流。
这是大厂前端技术体系解密系列第四篇,后续还会有其他大厂的内容,精彩还将继续,有兴趣的同学可以关注本公众号【奶爸码农】第一时间获得信息。
推荐阅读
『奶爸码农』从事互联网研发工作10+年,经历IBM、SAP、陆金所、携程等国内外IT公司,目前在美团负责餐饮相关大前端技术团队,定期分享关于大前端技术、投资理财、个人成长的思考与总结。
解密国内BAT等大厂前端技术体系-携程篇(长文建议收藏)的更多相关文章
- 解密国内BAT等大厂前端技术体系-腾讯篇(长文建议收藏)
		
1 引言 为了了解当前前端的发展趋势,让我们从国内各大互联网大厂开始,了解他们的最新动态和未来规划.这是解密大厂前端技术体系的第三篇,前两篇已经讲述了阿里和百度在前端技术这几年的技术发展.这一篇从腾讯 ...
 - 解密国内BAT等大厂前端技术体系-美团点评之下篇(长文建议收藏)
		
引言 在上篇中,我已经介绍了美团点评的业务情况.大前端的技术体系,其中大前端的技术全景图如下: 上篇重点介绍了工程化和代码质量的部分,工程化涵盖了客户端持续集成平台-MCI.全端监控平台-CAT.移动 ...
 - 解密国内BAT等大厂前端技术体系-美团点评之上篇(长文建议收藏)
		
引言 进入2019年,大前端技术生态似乎进入到了一个相对稳定的环境,React在2013年发布至今已经6年时间了,Vue 1.0在2015年发布,至今也有4年时间了. 整个业界在前端框架不断迭代中,也 ...
 - 解密国内BAT等大厂前端技术体系-百度篇(长文建议收藏)
		
1 引言 整个业界在前端框架不断迭代中,也寻找到了许多突破方向,例如跨平台中的RN.Flutter,服务端GraphQL.Serverless,前端和客户端的融合越来越紧密,前端在Node和Elect ...
 - 解密国内BAT等大厂前端技术体系-阿里篇(长文建议收藏)
		
进入2019年,大前端技术生态似乎进入到了一个相对稳定的环境,React在2013年发布至今已经6年时间了,Vue 1.0在2015年发布,至今也有4年时间了. 整个业界在前端框架不断迭代中,也寻找到 ...
 - 【大厂】389- 解密国内BAT等大厂前端技术体系-阿里篇(长文建议收藏)
		
进入2019年,大前端技术生态似乎进入到了一个相对稳定的环境,React在2013年发布至今已经6年时间了,Vue 1.0在2015年发布,至今也有4年时间了. 整个业界在前端框架不断迭代中,也寻找到 ...
 - web前端技术体系大全
		
一.前端技术框架 1.Vue.js 官网:https://cn.vuejs.org/ Vue CLI:https://cli.vuejs.org/ 菜鸟教程:http://www.runoob.com ...
 - Web前端技术体系大全搜索
		
一.前端技术框架 1.Vue.js 官网:https://cn.vuejs.org/ Vue CLI:https://cli.vuejs.org/ 菜鸟教程:http://www.runoob.com ...
 - BAT小米奇虎美团迅雷携程等等各大企业校招,笔试面试题。
		
类似在线测试的方式展示题目. 历年在线笔试试卷: 百度 http://www.nowcoder.com/paper/search?query=%E7%99%BE%E5%BA%A6 腾讯http:// ...
 
随机推荐
- pat 1136 A Delayed Palindrome(20 分)
			
1136 A Delayed Palindrome(20 分) Consider a positive integer N written in standard notation with k+1 ...
 - nyoj  273-字母小游戏 (getline(cin, string))
			
273-字母小游戏 内存限制:64MB 时间限制:1000ms 特判: No 通过数:16 提交数:24 难度:0 题目描述: 给你一个乱序的字符串,里面包含有小写字母(a--z)以及一些特殊符号,请 ...
 - Linux系统时间\硬件时间(date、tzselect、clock、hwclock、ntpdate)
			
1.系统时间和硬件时间 在Linux中有硬件时钟与系统时钟两种时钟.硬件时钟是指主机板上的时钟设备,也就是通常可在BIOS画面设定的时钟.系统时钟则是指kernel中的时钟.所有Linux相关指令与函 ...
 - 痞子衡嵌入式:飞思卡尔Kinetis系列MCU启动那些事(10)- KBOOT特性(可靠升级)
			
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是飞思卡尔Kinetis系列MCU的KBOOT之可靠升级(Reliable Update)特性. 所谓可靠升级机制,即在更新Applica ...
 - React动画库
			
npm i react-transition --save import {CSSTransition} from 'react-transition-group'
 - 听说PHP的生成器yield处理大量数据杠杠的
			
官方解释yield yield生成器是php5.5之后出现的,官方文档这样解释:yield提供了一种更容易的方法来实现简单的迭代对象,相比较定义类实现 Iterator 接口的方式,性能开销和复杂性大 ...
 - 【Luogu P3375】字符串匹配KMP算法模板
			
Luogu P3375 模式串:即题目中的S2所代表的意义 文本串:即题目中的S1所代表的意义 对于字符串匹配,有一种很显然的朴素算法:在S1中枚举起点一位一位匹配,失配之后起点往后移动一位,从头开始 ...
 - ehcache同步原理
			
最近研究ehcache同步时发现一个问题: 现有A.B两个服务器,由A服务器向B服务器同步信息,采用RMI方式手动方式进行同步 配置信息如下: <?xml version="1.0&q ...
 - 为什么坚果云Markdown值得使用?
			
值得使用说明是被认为有价值的,值得有两种意思的解释:1.有价值,有意义:2.价钱合适,合算:那么坚果云Markdown是否是人们值得使用的呢?下面就来看看坚果云Markdown到底是什么?为什么值得使 ...
 - Select2 禁用option
			
禁用 $("#priceGroupType option[value='1']").prop('disabled', true); $("#priceGroupType& ...