Serverless一体化探索与落地
2019年4月加入去哪儿旅行,在带领团队负责低代码平台的建设与落地工作中,成功赋能了企业中后台系统研发提效,成功接入中后台系统60+其中包含多个代码量级在50W行以上的系统,页面600+。目前技术上聚焦于组件化低代码平台建设,Serverless平台建设,跨端渲染、架构设计、服务可用性提升及运维,具备大型服务的落地实践经验。
核心名词介绍:
塞拉斯核心思想:
UI 逻辑处理争议(比如代金券的状态有待领取、已领取、已作废、已过期等状态,状态是后端计算得到的,不同状态展示不同,站在后端角度不需要关心前端 UI 、站在前端角度不同状态展示不同希望有人给算好展示相关的数据和样式,前端可直接渲染,由于低代码的组件是跨业务复用的,不同业务的后端立场不同,接口返回也会有差异,前端后端关于 UI 逻辑处理存在争议) 多接口数据整合争议(有些业务场景下前端一个组件的数据是由后端多个团队提的接口,接口整合工作的划分也存在争议) 相同代码在不同前端工程存在多份(由于有些情况下前端无法说服后端去做相关数据处理逻辑,那么大量数据处理逻辑就放在了前端,前端可能不同端、不同 team 都会用到某接口数据都需要进行数据处理,这种场景下相同前端的数据处理逻辑代码就散落在不同的工程代码库中) 前端同质化 node 服务多(有些情况下,前端团队会搞一个服务于前端UI展示的服务层来方便前端开发,前端会自建 node 服务,各个 node 服务其实处理的事情大致是相同的,但是每个场景下都单独建立了各自的服务)
我们希望整体方案,可以完全自控、代码安全不托管、保持 DevOps 不变,且数据处理逻辑改动后能够按照线上的 case 数据自动化的回归测试,我们对比的国内阿里云,和国外亚马逊的 AWS Lambda 当前如果在公司内落地,很难取得合理的性价比,所以我们走了自研的方案。
系统编排管理界面入下图
其中语法检查主要利用 babel 进行校验,避免常规错误,比如:返回 promise 的函数前面必须跟 await ,函数必须有返回值,不能有声明但未使用的变量等。
(三)编排介绍
编排的使用场景:组件多、数据节点多层级深、依赖接口多、整体逻辑复杂等场景下,适合使用编排进行逻辑的拆分和组装处理,可以降低单函数的复杂度,增加复用性。
编排结构如下图:
编排的执行过程如下图:
多人协作时类似 git 版本管理,每个人可独自产生小 beta 版本进行各种开发,最终 merge 后台进行合并上线。
1、全链路问题定位:线上的一个请求我们可以通过 traceId 串联起各个调用环境和输入输出,可视化的方式进行展示,也可以按照关键信息进行各个环节的日志查询。
2、在线调试:我们可以根据 traceId 进行线上数据调试,也可以自己伪造 mock 数据进行在线调试。
3、搜索定位:代码可搜索定位。
4、引用函数跳转:类似本地编辑器可以按住 ctrl 键点击跳转到引用的函数体中。
5、服务器端能力抹平:我们的编辑器是在web浏览器端运行的,但是打日志、qconfig 文件的读取等能力操作是必须运行在 node 服务端的,为了给开发者屏蔽掉这个区别,方案直接在线编写、在线运行调试看效果,我们进行了服务端能力抹平。
1、代码在线 CR
2、多环境验证
3、线上真实 case 自动化回归测试
4、上线审核
5、支持限流配置
6、服务双环境秒切
7、自动扩缩容
(二)接入场景
目前塞拉斯主要的接入场景
营销活动:双旦集卡、五一大促、中秋、十一大促等 门票主流程:POI 货架、POI 头部、L页 酒店 neeko 标签系统:neeko 标签系统是展示在酒店 D 页酒店卡片上的标签数据
(三)接入效果
1、营销活动接入效果:
十一大促、中秋活动、暑促等营销活动场景均有使用,后端接口依赖多方接口,比如超商、酒店、市场等需要前端聚合数据,塞拉斯为活动能够及时上线提供了有力保证,如果没有塞拉斯,对于页面展示依赖多业务部门数据接口的需求如果逻辑写在前端代码就会增加端上的工作量,另外有些接口有依赖关系在端上的串行操作会影响页面性能、影响用户体验,为了不影响用户体验就需要有专门的一个服务层为前端提供数据,服务层都是内网间访问相对性能损耗要比放在端上好很多,单独新增一个服务层人力成本会增加,而在有了塞拉斯之后,前端可以方便的以编写函数的方式在线组装数据低成本的解决了当下痛点。
2w行降至6500+行
更专注于展示
不需要发QP包(无UI改动,纯逻辑变更情况下)
无需经过单独测试
1pd -> 十几分钟
酒店标签处理日均访问量1300万+,当前qps 100左右
P99从400ms 降低到152ms 降低72%
八、未来展望
未来规划主要有以下的事情可以落地继续推进:
1、缓存预热,减少缓存冷启动带来的性能损耗
2、业务接入&推广
END