飞猪基于 Serverless 的云+端实践与思考

简介: 过去两年,飞猪前端一直在积极地进行 Serverless 建设和实践,2019 年 - 2020 年我们和集团 Node 架构组、研发平台一起完成了基础能力的建设和业务试点,成为集团率先落地 Serverless 实践的 BU,2020 年 - 2021 年我们开始大规模地在飞猪推广使用 Serverless 的能力,从导购全链路到核心中后台,都能够看到 Serverless 的身影,这一年我们完成了 Serverless 从业务试点到生产力工具的转变,本文将主要分享飞猪基于 Serverless 的实践成果以及未来想要做的事情。

头图.png

作者 | 王恒飞(承荫)
来源 | 阿里巴巴云原生公众号

本文整理自飞猪旅行前端技术专家--王恒飞(承荫)在【阿里云 Serverless Developer Meetup 上海站】上的分享。点击查看直播回放:https://developer.aliyun.com/live/246653。
​
过去两年,飞猪前端一直在积极地进行 Serverless 建设和实践,2019 年 - 2020 年我们和集团 Node 架构组、研发平台一起完成了基础能力的建设和业务试点,成为集团率先落地 Serverless 实践的 BU,2020 年 - 2021 年我们开始大规模地在飞猪推广使用 Serverless 的能力,从导购全链路到核心中后台,都能够看到 Serverless 的身影,这一年我们完成了 Serverless 从业务试点到生产力工具的转变,本文将主要分享飞猪基于 Serverless 的实践成果以及未来想要做的事情。
​

Serverless 的使用规模

​
2020 年 - 2021 年飞猪 Serverless 的规模和重要度都有很大的变化,主要表现在三方面:
​

  • 一是函数组规模增长一倍以上,Qps 峰值增长 650%。
  • 二是使用 FaaS 开发的人员规模增长 560%,其中前端人员 80% 以上参与到 FaaS 的开发中。
  • 三是影响力的表现,目前不仅飞猪前端都对 Serverless 很熟悉,客户端也有很多人参与到 FaaS 的开发,更重要的是后端和产品同学也知道我们有 Serverless 进行服务开发的能力。

具体的数据如下:
​
1.png

为什么要引入 Serverless

​
飞猪为什么这么迫切地要引入 Serverless?这主要是出于前后端研发模式升级以及前端职能扩展的考虑,下面回顾一下飞猪前端架构的发展和研发模式的演进。
​

1. 飞猪前端架构的发展

​
飞猪前端架构总结下来就是从最初纯粹的前端开发,到解决多端一致性的跨端开发,再到接管视图服务端逻辑的前台开发,Serverless 就是前端升级转变的核心一环。

2.png

2. 研发模式的演进历程

​
前端人员为什么一定要参与服务侧开发?从前后端研发模式的演进来看,主要经历了以下三个大的阶段:
​
第一阶段是资源解耦,这个阶段前端把静态资源分离出来部署到 cdn,解决了和后端服务同机部署的耦合。
​
第二阶段是模板解耦,我们之前提到的前后端解耦大部分指的就是模板的解耦,一种不彻底的解法就是渲染解耦,服务端放一个空模板内容部分全靠 CSR,彻底的解法就是前端接管模板,可以独立部署模板也可以使用 node.js 替代。
​
第三个阶段就是试图解耦,一方面是由于客户端体系和前端的离线体系的限制,端侧对于视图的动态性要求极高,没有服务侧能力的前端只能将视图的动态性放在服务端做,另一方面由于端侧架构对于数据接口协议的特殊要求,需要服务端来进行协议的转换,也就是服务端常说的 Do 到 Vo 的处理,这就造成了前后端视图的耦合,为了去除这部分耦合,前端通过 Node.js 做 BFF 层来接管视图层的逻辑,Serverless 则是给了前端做 BFF 开发的最佳选择。
​
3.png

3. 为什么一定是 Serverless

​
其实在 Serverless 出现之前,前端也尝试了用 node 应用来做 BFF 层的开发,飞猪也是在 2017 年通过 Midway + React SSR 的架构将飞猪 PC 主链路首页、搜索、商品详情、订单详情 Node 化,但是应用级别的开发在前端存在以下几个问题:
​

  • 开发成本高:Node 应用级别的开发对于新手前端还是具备一定的开发成本,之前做过粗略的估计,上手成本至少需要 3 人/日,还不包括后续的性能优化、内存泄漏排查等一系列能力。
  • 运维成本高:Docker、镜像、机器日志查看、域名申请、机器替换等一系列运维能力对于前端来说具备非常高的复杂度,也是注定无法推广的一个重要原因。
  • 机器成本高:前端在使用应用开发时过度偏向于前端架构设计带来的应用离散和机器利用率低的问题,根本原因是前端在用页面开发的思维去做应用开发,导致新建一堆应用占用大量闲置机器。

2017 - 2019 年也是集团 Node 开发停滞的两年,这个阶段由于上述问题的闲置,Node 开发无法在移动端铺开,前端使用 Node 主要在中后台的开发,这时矛盾主要表现在前端迫切渴望研发模式转变和涉足服务端开发的高昂成本,直到 Serverless 浪潮的出现让我们看到了曙光,下面来看下 Serverless 能给前端带来什么样的变化:
​
4.png

Node FaaS 通过将中间件集成到 Runtime 的上下文中,开发通过 Api 的方式调用来实现极低上手和开发成本,只要会写 js 就能在 0.5 人/日内上手 FaaS 开发,同时 Serverless 容器底层通过机器统一管理、镜像统一、灵活调度、按需付费等方式向开发者屏蔽容器的运维,两者结合完美地帮我们解决了之前 Node 应用开发遇到的三大问题,至此前后端研发模式升级的最后一块拼图集齐,前端开始云+端的变革。

飞猪云+端的核心落地场景

​

1. 落地场景总览

​
从飞猪首页到搜索、频道,再到大促会场,Serverless FaaS 实现了在飞猪导购全链路的覆盖,成为飞猪前端的常用生产力工具之一。另外中后台开发已全面使用 FaaS 开发,并且赋能客户端同学,下图右侧的包体积平台就是飞猪客户端同学使用 Node FaaS 开发完成。
​
5.png

2. 云+端场景 - 数据协议处理

​
数据协议处理是 BFF 层最为常见的场景,包括接口合并、Do 到 Vo 的转换等,飞猪 80% 以上的 C 端 FaaS 场景都是用作数据协议的处理,通过 FaaS 来做协议转换能够解放服务端,同时增强前端对视图层的控制,可谓一举两得。
​
6.png

一个最新的例子(如下图所示),这是一个飞猪的内容详情页,页面涉及内容中台、评价中台、互动、算法等 5 个以上接口,这些接口都是现成的分散在各个系统,对于前端来说肯定是不想在端上调 5 次接口,不管是从性能还是架构设计上考虑,都是不合理的,这时就需要一个服务端接口的合并,FaaS 就非常适合做这样的事情,通过原子能力的拼装,无需服务端介入,极大缩短了需求的交付周期。
​
7.png

3. 云+端场景 - SSR 同构渲染

​
SSR 同构渲染并不是一个新的概念,最早在 React 支持 SSR 的时候,前端就具备一套代码在 Server 和 Client 端执行的能力,飞猪这边早在 2017 年就在 pc 端上线了 Midway + React SSR 的页面。
​
移动端由于流量比 PC 大很多,且在 Server 侧执行 Js 是一个极耗机器资源的操作,通过 Node 应用的方式做 SSR 机器和运维成本跟随着页面流量指数级上升,ROI 并不高,但是 Serverless FaaS 的自动托管,能帮前端解决机器利用率和运维成本的问题。
​
再配合客户端的文档预加载,我们可以做到客户端预加载直出率(500ms下)100%,端外渲染 2s 达标率 90+%,性能提升 80% 以上。
​
8.png

4. 云+端场景 - 一体化应用

​
一体化研发是一种更加符合前端人员习惯的开发模式,常见的分为中后台一体化和 Rax+FaaS 一体化,将 FaaS 代码和 Assets 代码在一个仓库下开发,调试和部署能够极大地提高开发效率,目前飞猪用得最多的就是中后台一体化开发。
​
9.png

Serverless 研发配套建设

​
在基础建设方面定义为两部分:研发态效率的提升和运行时稳定性的保障。
​

1. 研发态效率

​
开发阶段主要涉及的操作是新建项目、调试和发布,飞猪通过已有的 Clam 工程体系集成 FaaS 的脚手架模板,对接 def api 打通创建项目、迭代和发布的能力,让前端同学开发 FaaS 能有和开发页面一样的体验,降低上手和开发成本,同时封装 Mtop 调用和容灾 SDK,封装常用 FaaS Utils 集合的方式提高代码的复用度。
​

2. 运行时稳定性

​
通过函数监控 Alinode、网关监控 Sunfire 以及全链路日志的排查能力,做到问题的快速发现和定位。
​
10.png

通过 tair 容灾和 cdn 容灾,保障大部分场景在函数或者网关挂掉的情况下,仍能够正常展示页面。

未来

​
2020 年 - 2021 年我们完成了 Serverless 向生产力工具的转变,2021 年 - 2022 年总体来看是彻底完成飞猪研发模式转变的目标,让 FaaS 成为前后端都习以为常的一环,规划还没做具体,有以下几个关键的事情要做:
​

  • 中后台和长尾函数 0 - 1 的弹起尝试:这块考虑到一些中后台函数和长尾函数每天可能只有几十个 Uv 够不到 Qps 级别,目前预留 1 核机器的方式仍是有些浪费,考虑在不影响初次请求的情况下尝试 0 到 1 的弹起,做到机器的极致利用率。
  • 飞猪物理网关的替换:目前虽然飞猪 Java 的网关出于维护状态投入较低,但是一旦流量发生变化,网关的稳定性会成为瓶颈,希望能够有 Fc 专门的团队接管流量网关,之前飞猪也是完成了一个线上试点,2021 年 - 2022 年继续推进。
  • 研发态和运行时问题的可观测增强:从 FC 底层容器到函数代码内部再到函数依赖、流量网关,不管是部署出现的问题还是线上的问题,都比较难定位,通常需要拉着 FC、研发平台、Runtime 的同学一块排查,后续希望能推动可观测性的增强,让业务开发能够快速发现问题。

写在最后

​
基于 Serverless 的云+端结合已经基本成型,这将是前端近些年来最大的变革之一,未来 FaaS 将是前端开发不可或缺的一环,我们需要用它来做研发模式升级,也需要用它帮助前端扩大职能,通过 FaaS 的能力让前端开发深入到服务层,更好地贴近业务、理解业务、帮助业务。
​

作者简介

​
王恒飞(承荫),飞猪旅行前端技术专家,飞猪 Serverless 引进和实践者,探索和推动云+端的研发模式。

原文链接

本文为阿里云原创内容,未经允许不得转载。

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

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

相关文章

unc 目录不受支持_Shopify平台对于店铺模版都提供哪些支持

在自定义Shopify模版之前,请确保您了解可用的支持级别。如果您要进行基本的自定义,则可以从模版开发人员处获取支持。如果您要对模版进行大量更改,请参阅我们的模版支持的其他资源列表。若要了解 Shopify 不支持的自定义,请参阅我…

CSS——定位、CSS高级技巧、修饰属性

1、定位 作用&#xff1a;灵活的改变盒子在网页中的位置 实现&#xff1a; 定位模式&#xff1a;position边偏移&#xff1a;设置盒子的位置 leftrighttopbottom 1.1 相对定位 position&#xff1a;relative <!DOCTYPE html> <html lang"en"> <…

数百万行自研代码都捐了,华为将欧拉捐赠给开放原子开源基金会

今天&#xff0c;操作系统产业峰会2021在北京国家会议中心线上线下同步举办。会上&#xff0c;华为携手社区全体伙伴共同将欧拉开源操作系统&#xff08;openEuler, 简称“欧拉”&#xff09;正式捐赠给开放原子开源基金会。这标志着欧拉从创始企业主导的开源项目演进到产业共建…

Hologres如何支持亿级用户UV计算

简介&#xff1a; 本文将介绍阿里云Hologres如何基于RoaringBitmap进行UV等高复杂度计算的方案&#xff0c;实现亿级用户万级标签亚秒级分析&#xff0c;帮助用户从Kylin平滑迁移到Hologres&#xff0c;实现更实时、开发更灵活、功能更完善的多维分析能力。 背景介绍 在用户行…

location 拦截所有_电脑广告拦截软件 Adguard Premium

每日一谈我们上个网的时候经常会遇到很多烦人的广告、在线跟踪等&#xff0c;不仅导致你的网站加载速度非常的慢&#xff0c;并且还可能会导致你遇到一些恶意软件和威胁。为了避免这种情况的产生&#xff0c;今天我为大家推荐这款广告拦截软件来阻止你浏览器中的广告&#xff0…

事务消息应用场景、实现原理与项目实战(附全部源码)

简介&#xff1a; 从应用场景出发&#xff0c;给出解决方案与实现原理&#xff0c;并提供整套工业级实现源码。 作者&#xff1a;丁威 活动中心场景介绍 在电商系统上线初期&#xff0c;往往会进行一些“拉新”活动&#xff0c;例如活动部门提出新用户注册送积分、送优惠券活…

mysql 别名 metadata_获取数据库元数据:DatabaseMetaData与ParameterMetaData与ResultSetMetaData...

(1)Meta-Data&#xff1a;关于数据的数据&#xff0c;在此是有关数据库和数据库表等数据库对象的信息&#xff1b;通过Connection的getMetaData()方法获得包含数据库元数据的DatabaseMetaData对象&#xff0c;然后在此对象上调用相关的方法获得对应的信息&#xff1b;(2)Databa…

request用法_3分钟短文:说说Laravel页面会话之间的数据保存Session用法

引言我们知HTTP请求是没有状态的&#xff0c;两个请求之间没有直接的关联关系。但大多数情况下&#xff0c; 我们需要保持用户的会话间数据的连续性&#xff0c;这时&#xff0c;为了数据安全起见&#xff0c; 有必要在服务器上临时存储一些上下文数据了。这就是 session 设计的…

调研邀请:我们到底需要什么样的低代码平台?

《乔布斯传》中有这样一段话&#xff1a;“有人会说&#xff0c;顾客想要什么产品就提供什么产品&#xff0c;但这并不是我的做事方式。我的职责是在人们还没有意识到需求之前&#xff0c;就研发出他们想要的&#xff0c;我们的任务是搞定那些还没有形成“定论”的事情。”这段…

面向K8s设计误区

简介&#xff1a; K8s 取其精华去其糟粕&#xff0c;是我们程序员应该做的事情。 K8s设计模式 Kubernetes是一个具有普遍意义的容器编排工具&#xff0c;它提供了一套基于容器构建分布式系统的基础依赖&#xff0c;其意义等同于Linux在操作系统中的地位&#xff0c;可以认为是…

电脑word在哪_word是什么?小学生:单词,大学生:论文排版工具

word是什么&#xff0c;对于不同人会有不同的理解&#xff0c;它可能只是一个单词&#xff0c;它也可能是一个排版工具。今天就以我自己的经历给大家讲述一下&#xff0c;人生的不同阶段&#xff0c;word分别是什么。一、小学阶段&#xff0c;好像是一个单词我们那个时候的小学…

Kubernetes 稳定性保障手册:洞察+预案

简介&#xff1a; 稳定性保障是个复杂的话题&#xff0c;需要有效、可迭代、可持续保障集群的稳定性&#xff0c;系统性的方法或许可以解决该问题。 作者 | 悟鹏 来源 | 阿里巴巴云原生公众号 《Kubernetes 稳定性保障手册》系列文章&#xff1a; ​ Kubernetes 稳定性保障手…

为啥学java要看那么多东西_编程语言那么多,为啥学Java的人那么多?

Java一直都是稳居排行榜第一的语言&#xff0c;在未来10年Java都会是最热门的语言之一&#xff0c;因为Java技术具有卓越的通用性、高效性、安全性和平台移植性&#xff0c;它可以跨平台的应用到不同的领域&#xff0c;工作需求足够大。为什么选择学习Java编程语言&#xff1f;…

墨奇科技:生物识别进入可信发展驱动的新阶段

编辑 | 宋慧 供稿 | 墨奇科技 头图 | 付费下载于视觉中国 在好莱坞电影大片中&#xff0c;经常有“换脸”或者指纹开锁的情节&#xff0c;戏中角色通过“戴上”足以以假乱真的“面皮”&#xff0c;或者按下“盗取”的指纹&#xff0c;顷刻之间就改变了身份&#xff0c;从而影…

安卓游戏开发用什么引擎_游戏开发学习第一天————用什么软件

今天开始了虚幻学习的第一天&#xff01;好的&#xff0c;那我们就开始学习做游戏吧&#xff01;始学习做游戏吧学习做游戏吧习做游戏吧做游戏吧游戏吧戏吧吧等等&#xff0c;要学做游戏啊。。。。。。第一步要做什么&#xff0c;我还完全不知道啊喂&#xff01;于是&#xff0…

360浏览器收藏夹_换了一台电脑,浏览器收藏的网站不见了,咋办?

导语&#xff1a;大家知道&#xff0c;用浏览器上网时&#xff0c;重要的网站要及时收藏&#xff0c;方便下次打开。但如果换电脑以后&#xff0c;收藏的网站就不见了。下面以360浏览器为例来说明一下工具&#xff1a;网络收藏夹、360浏览器说明&#xff1a;360的收藏夹就是网络…

Flink 和 Pulsar 的批流融合

简介&#xff1a;StreamNative 联合创始人翟佳在本次演讲中介绍了下一代云原生消息流平台 Apache Pulsar&#xff0c;并讲解如何通过 Apache Pulsar 原生的存储计算分离的架构提供批流融合的基础&#xff0c;以及 Apache Pulsar 如何与 Flink 结合&#xff0c;实现批流一体的计…

java stream optional_java成神之——Stream和Optional

Stream流基本使用Stream myStream Stream.of("a", "", "b", "c", "d");myStream.filter(item -> item!"").map(String::toUpperCase).sorted().forEach(System.out::println); // ABCD使用流注意点&#xff1…

pythonplot绘图xrd_一种简化的截面动量组合测试[PythonMATLAB]

下面的例子来源书籍策略比较简单&#xff0c;使用N只股票构建投资组合&#xff0c;计算每只股票的过去LookBack(参数)日的动量&#xff0c;并作标准化处理作为股票权重&#xff0c;持有Holding(参数)日&#xff0c;其中权重允许为负数&#xff0c;即允许做空股票。简要说来就是…

腾讯自研分布式远程Shuffle服务Firestorm正式开源

11月4日&#xff0c;在2021腾讯数字生态大会上&#xff0c;腾讯宣布将开源自主研发的分布式远程Shuffle服务Firestorm。该服务的开源不但可以助推分布式计算的云原生部署&#xff0c;还能解决大数据分布式计算过程中的痛点&#xff0c;提升计算资源的利用率。 在分布式计算领域…