当前位置: 首页 > 科技观察

Serverless风暴来袭,前端工程师如何应对?

时间:2023-03-13 01:45:38 科技观察

虽然大部分前端工作不涉及Server,但Serverless这个词以及它在过去六个月里引发的热议,深深打动了阿里巴巴资深前端技术专家鲁鑫。作为接触前端十多年的老开发者,法新认为Serverless可能是下一个将在前端领域引起革命性变化的技术之一。今天整理一下Serverless的历史发展历程及其对前端的影响,希望对前端工程师有所启发。上图显示了过去5年Serverless这个词在Google的搜索趋势。可以看出,它在过去六个月中达到了顶峰。Ajax的诞生,历史上前端领域的一次重要技术革命让我们回顾一下前端技术领域的重要历史节点。第一个节点是2005年,Google的JesseJamesGarrett发表了一篇文章—《Ajax:Web应用程序的新方法》,发布了Ajax这个新词汇(准确的说不是新技术,而是新词汇),当时我还在大二的时候时间。虽然Ajax并不是什么新技术,它只是对XmlHttpRequest等技术的一种封装,但是这项技术在被谷歌推广之后,成为了全球Web开发的标杆,间接推动了富客户端应用程序(RIA)和单一应用程序的普及。页面应用程序(SPA)。这些应用大多拥有丝滑的体验(局部刷新),并且一直伴随着web2.0的发展。前端js的普及使得前端js的工作变得更加复杂和重要,专业分工也越来越细,间接促进了全职前端开发者角色的诞生。在此之前,Web开发不区分服务器端和浏览器端工作,所以Ajax是前端领域的一个重要事件。Nodejs推动前端标准化和工程化前端变革的下一个里程碑事件是2009年诞生的nodejs(包括commonjs和npm)的出现和流行,它对前端领域的意义不仅仅是让前端-结束用js快速写一个服务器就是这么简单。我个人认为它的典型贡献是commonjs、npm推动的前端工程化及其便捷的开发体验。它使前端从与传统软件工程不兼容的刀耕火种部署方式开始发展。企业应用的研发模式。在此之前,前端开发在资源引用、依赖管理、模块规范等方面缺乏有效的工具和标准。但是在nodejs流行之后,基于commonjs的模块和npm包部署和依赖管理成为了主流(类似Java的maven系统),各种基于nodejs开发辅助前端开发的cli工具(比如grunt,gulp),npm是目前全球最大的包管理仓库,已经成为前端项目包依赖管理的事实标准。webpack的出现使得前端代码的部署变得更加简单,让前端能够以类似于javajar包的形式发布应用(bundle),而不管项目中的资源类型。React的组件化和vdom概念的第三次革命事件是react,它在2013年开始出现,虽然在此之前已经发布了webcomponents标准,但是真正让组件化概念深入人心,应用最广泛的库使用的是反应。至少有两个特性足以让它成为史上最具前瞻性的前端库。第一个特征是vdom的出现。在此之前,所有的ui库都是直接关联dom的,而react是在UI创建和渲染引擎之间,增加了一个中间层——vdom(一种使用轻量级json来描述UI结构的协议)。除了提升自身的domdiff性能外,还有一个意义重大的就是UI的编写和渲染开始分离,一次性编写,可以实现多端渲染UI,这个多端包括server端,移动端端、pc端等需要显示UI的设备。之后reactnative、weex都是这种分层思维的受益者。除了vdom之外,react还有一个重要的概念是非常高级的,那就是UI是一个函数(类),函数输入一个状态,必须返回某个视图。在此之前,大部分的框架和库都会把UI分离成一个html片段(通常支持写模板渲染数据),一个为html片段绑定事件的js,虽然这样比较容易理解,但是react对UI的抽象体现了UI的actualnature,以及这个functionalstyle的概念,后面你会看到,将会和faas以及serverless技术发生奇妙的碰撞。React的诞生对之前的框架和库产生了深远的影响,包括不限于angular和vue,相继采用了它的很多技术思想,成为为数不多的稳定下来的前端开发领域之一.技术选项之一。综上所述,ajax让前端的角色逐渐分离,nodejs推动前端的开发模式向传统编程语言(工程)靠拢,react的出现基本结束了后端的频繁吐槽前端“快速的技术变化”。至此,前端技术体系逐渐成熟和规范。Serverless这个概念和前端的关系那么为什么说下一个对前端技术领域影响比较大的概念就是Serverless呢?其实serverless这个词虽然亚马逊提出的时间还不到几年,但这个概念并不具有爆炸性。新概念,早期CDN还没有普及的时候,web工程师会把js资源和查看文件(可能是静态的也可能是动态的)传输到服务器。那个时候前端需要关心服务器,但是CDN和回源策略的普及,工程建设系统的大量使用,让前端可以快速抛出一个js或者静态文件到CDN节点。通过回源机制(cdn回源到一个动态服务),半动态视图层渲染也变成了或许,在整个过程中,前端开发不需要关心任何服务器知识,也不知道CDN有多少个节点,怎么做负载均衡,做gslb,也不需要知道qps的数量,一个CDN可以容纳各种业务,各种开发,可以说CDN是无服务器概念的先驱。回到应用程序部署。在前几年nodejs刚刚流行的时期,开发者已经意识到应用和机器的部署和运维成本将是业务方的问题。出现了一些容器化的想法,比如2015年的cbu,在naga容器中,业务逻辑是一个插件。容器负责请求的路由分发、负载和稳定性管理。业务方只需要编写和上传最直接的业务代码。对于业务端它实现了serverless的概念,因为naga的维护者帮你解决了部署运维的问题。此外,与前端密切相关的页面构建系统和bff层,无论是各种构建系统(如zebra,积木盒子,TMS),还是基于graphQl的平台,或者快速编写API网关通过webide的产品——比如cbu的mbox,让业务开发只关心业务逻辑,不需要关心部署运维知识。它们在一定程度上体现了Serverless的概念。Serverless对前端的影响综上所述,前端已经和Serverless联系在一起了,只是很多人还没有感知到。接下来,Serverless的爆发式爆发将对前端产生更深远的影响,主要体现在三个方面。前端将回归Web应用工程师的功能。前面说过,前端是社会分工的细化,起源于2007年左右,在此之前,并没有专门的前端开发角色,通常称为web工程师。或者网站工程师,早期的网页大多是服务器渲染,使用asp、php、jsp等服务器页面技术,js只是web工程师需要掌握的小技能之一,但是随着web2.0和互联网,移动互联网、电商网站的开发需要有专心的人专注于编写兼容性和体验好的UI,于是逐渐出现了专注于浏览器和移动端的前端工程师。不过,前端技术领域已经逐渐趋于稳定。经过十多年的发展,各种开箱即用的库、垂直解决方案和工程方法一应俱全。甚至还有一些辅助工具可以根据设计师的视觉稿生成UI代码,前端可以用极低的成本安心编写UI和业务逻辑,无需在选型、造轮、视觉还原、处理兼容性、性能优化、调试部署上花费大量精力。这种情况下,前后端工作分离带来的协作成本反而被放大了,因为前后端角色分离时,后端往往扮演的是BFF层的角色,比如为前端表现层封装各种API网关,经常有相互等待和联调协议。情况,而bff层通常只是一些数据处理,其他角色经过短期培训后可以很快上手,所以前端一直在尝试访问server端的bff层。2015年前端开始推广使用nodejs部署应用。阿里内外涌现了很多nodejs框架,比如业界的express。在生产环境中,包括买家、商家、内部人员的系统,很多都会用到。nodejs,但是今年2019年,我们回过头来看,发现这个数字并没有超出预期。造成这种现象的原因,在我看来是分工过于细化导致的前端服务器知识匮乏。Nodejs本身的定位是服务端技术。本质上,服务器面临的问题和java一样。现有的前端京东招聘的人才,很少能游刃有余的在服务端工作。除非专门招聘nodejs人才,服务器服务长期运行会暴露出很多问题,比如接口慢、进程核心、CPU飙升、内存泄漏等。另外还有负载均衡、扩缩容、高低延迟等知识等等,大部分前端都没有这样的经验。云计算的本质是让业务开发专注于业务逻辑。业务下的软硬件设施按需采购,开箱即用。Serverless的概念和相关技术会让开发者不再需要关心应用和机器的问题,甚至不需要关心流量是否能够支撑。它可以自动扩展和收缩。因此,未来web开发者的运维成本将大大降低。前端也可以参与bff层的开发,后端可以专注于数据处理、业务逻辑和算法。这一变化符合提高研发效率的背景。未来云设施会非常厚实、专业和稳定,前端开发者可以在云设施上快速、低成本地构建业务逻辑、前端和服务器前端。(对于整个请求环节来说,前端是相对的,只要离客户请求较近的角色都可以称为前端),分工不会那么明确。以前浏览器的前端会逐渐承担一部分服务器端的连接。入口层和bff层的工作回归基础,回归历史上web开发工程师的角色。这对于前端来说是一个很大的变化。当然,serverless技术让前端回归到传统的web层,并不是说前端不需要掌握服务器知识。掌握操作系统内核和网络编程知识仍然有助于编写高性能、高可用性的业务应用程序。实时SSR将成为展示UI的主要开发模式。最早的web开发,其实UI的处理主要是基于服务端渲染,比如perl、php等动态web技术,但是前端逐渐成为一种工种,开始负责大部分用户界面。经过发展,技术领域逐渐缩小到客户端,静态网页和客户端渲染逐渐成为主流。但是这种模式对于用户体验来说肯定是有问题的,导致白屏时间比较长,而且由于在vdom层抽象了react、vue等新的前端库,服务端渲染的技术成本更低。但是难点也正是我前面说的,缺乏服务端人才。虽然nodejs和vdom的流行提高了SSR的实现效率,但是由于缺乏服务器知识,通常只有少数知识全面的前端才会深入实践这一领域。Serverless技术的普及将消除这个问题。借助serverless技术,前端可以快速搭建一个ssr场景,从服务端取数据,在服务端渲染,直接输出html给客户端,不管渲染服务能不能挂掉能处理交通吗?这些事情将由云设施提供商来解决。前面说了,react的一个核心理念就是把UI看成一个函数。如果一个页面由多个组件组成,那么该组件就是一个函数。我们可以把一个页面看成是多种功能的组合。不同的功能不同导购场景的组合,如果把一个功能看成一个微服务,一个场景就是微服务的聚合,这正是faas的概念。通过serverless低成本实时ssr,提升客户体验。借助算法和大数据,还可以快速实现UI的千面,打造真正的导购大脑。场景化云开发(webide)将成为主流开发模式。提到Serverless技术,有一个相关领域是必须要提到的,那就是WebIDE。很多互联网大公司都把一个webide当作云基础设施,并且投入巨资,为什么呢?个人认为有两个原因。一是Serverless目前在行业内主要应用于垂直场景。它们有一个共同点,就是代码足够标准规范,场景比较垂直,代码复杂度不是很大,可以使用webide快速与云平台集成。实现一键发布,因此该场景更适合轻量级在线编码到部署的全链路。还有一个原因是目前所有的云设施都是解决业务运营问题,但是软件开发有一个非常大的痛点可能被大多数人忽略,那就是环境问题。相信很多人都有克隆别人的项目,但是千辛万苦都启动不了的问题就废了,因为需要安装各种环境?另外,在和别人联调的时候,是不是因为没有部署各种环境导致联调效率很低?借助docker等容器等技术,软件运行调试环境,可以快速移植到别人身上进行复用,而目前基于js的代码编辑器已经很强大了,vscode编辑器就是基于js编写的,并且已经沉淀alibraryMonacoEditor,soyoucan换句话说,webide在语法提示和intellisense方面可能不如localide的大部分想法已经过时了。同时,webide可以与平台快速集成,深度定制,打通业务平台,一键部署,大大提高了研发效率。WebIDE还可以解决异地办公的问题,因为它解决了长期存在的环境准备问题,你可以在家里,在公司,甚至在火车上快速编写和交付代码。因此,未来的PaaS平台将关联深度定制的WebIDE。当需要编写业务逻辑时,可以跳一个连接到webide进行编码。无需关心当地的环境问题,真正的无敌环境。比如你要开发一个TMS模块,点击“新建”跳转到webide,代码会帮你初始化,点击运行,就会在云端启动服务器运行组件。写好后,一键发布到TMS。各种faas、api网关系统等云服务也会一样。WebIDE将成为企业云化的基础设施。虽然阿里云目前还没有推出媲美cloud9和coding.net的webide,但令人欣慰的是看到集团内部已经涌现出一些优秀的产品,比如aone的ide和数据平台的appstudio,其体验接近行业水平。结束语在云计算领域,Serverless将掀起一场革命。就连看似与这个领域联系不大的前端,也会在ajax、nodejs、react之后发生又一次重大变革。你准备好应对了吗?【本文为专栏作者《阿里巴巴官方技术》原创稿件,转载请联系原作者】点此查看作者更多好文