热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

serverless框架_我在GMTC上的分享:腾讯Serverless前端落地与实践

本文由我在GMTC2019深圳站的演讲整理而成,感谢infoQ对讲稿的整理和编辑。原文同步首发于前端之巅:https:mp.weixin.qq.coms
c5543322bb2cdc1475e3db0b2ba2faee.png

本文由我在GMTC 2019深圳站的演讲整理而成,感谢infoQ对讲稿的整理和编辑。

原文同步首发于前端之巅:https://mp.weixin.qq.com/s/fWQkdXU-QMDYafHQjX1gcw

作者 | 王俊杰

整理 | 李俊辰

导读:Serverless是当下炙手可热的技术,被认为是云计算发展的未来方向,拥有免运维、降低开发成本、按需自动扩展等诸多优点。尤其是在前端研发领域,使用 Node开发云函数,可以让前端工程师更加专注于业务逻辑,实现全栈工程师的角色转变。但现有的开发模式、工具、脚手架已经标准化、流程化,存量业务正在线上稳定运行,如何将Serverless融入到现有开发模式和工具中? 如何将Serverless和当前的业务进行结合落地?本文将尝试给出解法,内容整理自腾讯Serverless技术专家王俊杰在GMTC 2019深圳站的演讲。

前端与Serverless的不解之缘

目前很多前端同学都在学习Serverless,很多文章和教程对Serverless都有不同方式的解读。今天我们首先来回顾三个问题:

  • 究竟什么是Serverless?
  • Serverless是否等于FaaS加BaaS?
  • 我们所说的FaaS是什么?

加州大学伯克利分校2019年3月份发表过一篇论文,名为《Cloud Programming Simplified: A Berkeley View on Serverless Computing》,文中对“Serverless是什么”进行了一些描述:

Put simply,serverless computing = FaaS + BaaS.

简单来理解,Faas+BaaS是Serverless的一种实现方式,这也是主流对Serverless的一种理解。那Serverless的真正概念是什么呢? 论文最核心的摘要部分,我们可以看到如下图的一段话,它说出了Serverless真正内涵:

6640bffdba93a5b6763cd07a76dc2623.png

中文大意就是:

“无服务器云计算(Serverless Computing)几乎封装了所有的底层资源管理和系统运维工作,使开发人员更容易使用云基础设施。它提供了一个方式,极大地简化了基于云服务的编程,犹如汇编语言到高级编程语言般的转换。

这段话中举了一个例子非常生动:

Assembly Language to high-level programming Languages.

“Serverless给云计算带来的改变,就是相当于从汇编语言到高级语言"。汇编语言,计算机专业的学生都有了解过。写汇编的话,首先需要了解CPU的结构,知道加法器、寄存器,需要自己管理内存、IO设备等一些底层资源。但开发者的目的并非如此,开发者应该是以业务为导向的。而高级语言提供了诸多能力和框架支持,可以令开发者专注于更快地完成业务上的事情,这才是高级语言所具备的优点,而不是让开发者把精力浪费在底层资源管理。有此可见,Serverless的内涵就是对全部底层资源和运维工作的封装,让开发者专注于业务逻辑。

理解完Serverless的内涵,我们再来谈一下FaaS(Function as a Service)的本质。一句话而言,FaaS就是至今为止最细粒度的算力分配方式。我们先理解下什么叫算力分配方式,当我们谈论计算机应用科学的时候,共有三个维度:“算力、算法、数据” 。在“算力”又有两个方向:一是如何让算力更强,让CPU运行的更快;二是如何让算力分配的更合理。

传统计算机,从单任务实时操作系统到多任务分时操作系统,是解决算力的分配问题,云计算诞生的初衷以及要解决问题,也是解决巨大算力资源的合理化分配。云的算力分配方式主要是以什么为粒度的呢?

答案是虚拟机。

比机器再降维一点的分配粒度是什么?

答案是容器。

那比容器再降一级的功能是什么?

答案是函数。

最早期的算力分配是物理机为单元,后来是虚拟机和容器。这个算力分配细化的过程,也基本是云计算发展的过程。现在云上可以函数作为一个计算单元,变成每一次业务执行分配一次资源,没有业务就没有资源分配。所以,FaaS是一个以函数(业务)为粒度的算力分配方式。

当我们理解了Serverless和 FaaS的内涵,我们再讨论下这些跟前端有什么关系。

随着Node的流行,前端工程师一直希望回归Web工程师的角色,全栈工程师的也在各种场合和文章被提到,最近几年大前端组织架构也成为超火话题。

第一,从前端工程师自身视角来讲,希望扩大自己的业务范围,进而才能有职业发展,仅仅做前台展现相关的东西,碰不到核心业务,价值得不到展现。

第二,如果从组织或是技术leader视角上来看问题的话,则会更关注技术对业务的贡献,关注团队的整体的执行效率、质量控制、角色合作这样一些问题。大前端的开发模式,会提升业务的迭代效率。

  1. 前端和后端都使用JavasScript,技术栈是统一的。从写代码,到编译、打包、脚手架、组件化、包管理,再到CICD,采用同一套都不是问题。
  2. Client Side Javascript和Server Side Javascript本身就有很多可服用的代码,例如现在行业里有很多同构代码的CSR和SSR解决方案。
  3. 优化研发组织结构。大前端的开发模式,让接口定义、接口联调、环境模拟等,原来需要两种不同技术能力栈的工程师互相协作的模式,变为同一种技术技术能力栈的工程师独立完成的模式,让沟通和推动的成本降到最低。

想法很美好,但是实话实说,大前端这条路一直走的不是很顺畅。我个人认为,其中主要的原因还是对Full-Stack的理解问题,在Google上搜full-stack有很多图示,其中大多数长成下面这样子:

ecb1443894360a45e159339a7b0e3dbf.png

这个理解是建立在业务功能实现层面的,好像有了前端+后端+数据库,基本业务就能做出来了。而实际上真实情况往往与之相差甚远!真正能够支撑业务的full-stack架构,至少分为四层。

  • 第一层,是核心业务逻辑,前、后端功能、API、数据
  • 第二层,是业务架构,具体包括应用框架、技术架构、数据库等
  • 第三层:是业务运维,包括日志、监控告警、扩展性、负载均衡等
  • 第四层:是底层架构,包括计算资源、系统及网络安全、灾备等
40aba8acd45a7e958f465b112959babf.png

越往上层,对业务价值的驱动力更高,因为聚焦业务逻辑;而越往底层,往往技术难度越大,对于人员的技术能力要求越高。继续分析,我们就可以的发现:

  • 第一层:全栈工程师们想做的东西
  • 第二层到第四层:Serverless可以解决的问题

在Serverless的赋能下,前端工程师依旧只需要关注核心的业务逻辑,而底层的技术架构、计算资源、稳定性、系统运维工作,则可以完全由Serverless进行支撑。即实现了从前端到真全栈的可能。这也就回答了我们的主题,Serverless为何与前端有不解之缘。

Serverless前端工程化的基本思路

当今的前端研发,组件化、工程化都有比较好的解决方案。那么我们要问的是,对于Serverless开发有没有比较好的解决方案呢?那么我们到底要不要用一个框架?前端开发者最喜欢用框架了。因为框架能解决很多问题:代码重用、统一规范、降低门槛、专注业务逻辑、社区优势、易于维护、提升效率......好处多的犹如一段相声贯口。

那么一个理想的Serverless框架应该是什么样子?我觉得需要满足两个要求。

9aad707549d9e5dfcb2d443bddcbe064.png
  • 组件化

利用组件机制,以业务功能为单元,进行代码的组织和管理,可以在业务内部、跨业务或跨公司进行重复使用,达到易于维护、提升效率的目的,好处很多,不在赘述。

  • 标准化

对于开发者提供一套标准的接口和使用方式,屏蔽底层云的异构系统之间的差异。就好比前端工程师熟悉的JQuery或者Polyfill,它们不用关注浏览器的差异,直接用就完了。Serverless的框架也应该做到这点。

Serverless的原理与实现

6642e9b64e8ffa3eb19e640d1be4b3eb.png

Serverless Framework就是这样的一款标准化、组件化的框架。在底层,提供了针对开发者的基础支持,包括开发、部署、调试、监控,这些支持针对云厂商接口进行了封装,开发者完全不用关注云计算平台的差异;在上层,每一个业务场景、业务框架都以组件化的方式进行封装,以更好的进行维护和复用。Serverless Framework是一个拥有34.5K star的开源框架,如下:

https://github.com/serverless/serverless

Serverless Framework的CLI就叫“serverless”,以命令行的形式提供了全部功能。

08deaa314534c2dde949d6706056bffc.png

Serverless Framework 有一个很重要的机制就是Component机制。

07f1ec3017a0da12b1c2373f34f87264.png

每个component都是一个NPM模块。它使用一个YML的配置文件,用来描述该component如何使用和分配云平台上面的资源。上图是一个Express Component的架构图,它由包括了Tencent API gateway、Tencent SCF和Tencent PostgreSQL。

3f101844d4e4f4f7dc279ca347c2c3ad.png

Component代码结构非常清晰,遵循NPM module标准。一个非常值得提起的特性 —— 组件支持嵌套使用。例如一个 Serverless Full-stack Application 包括了Express Component用于处理服务端逻辑,还包括一个Website Component组件用于管理静态文件和资源。而这两个组件又分别包括了它们的子组件。

4c53d183b28d2ad47a20d1acfe2d4384.png

Serverless Now

理解完Serverless Framework的基础结构之后,我今天要给大家展示一个Servereless Hexo博客的demo,让大家对Serverless Framework有一些感觉。这个Demo是团队一个MM做的。她不是学计算机的,其次她没有任何代码经验,没写过前端Javascript,我们需要让她来用Serverless Framework和Website组件完成一个静态博客的部署。

这个三分钟的video demo,不仅是完成了Hexo发布代码的上传,还包括了以下云资源的申请和配置。这说明我们的产品是非常有弹性的。所谓技术产品的弹性,就是可选配置特别多,但是默认必填项特别少。如果你富有经验,技术功底很深,让你自由的去编写每一个配置,以达到你想要的效果;反之,如果你跟这位MM一样是一名初学者,你也可以快速上手,再几分钟内用起来。

8a1460d1129c18a99b06645a70863e46.png

除了Website组件,下面整个图中都是Serverless Framework 现在已经支持的组件,包括了Node、Python、PHP语言的各种框架。

d837481903442a26cea434c84e51ec57.png

如果你对Serverless Express感兴趣可以关注这个Github网址:

https://github.com/serverless-components/tencent-express

如果你已经有一个Express的项目,你现在就可以利用Serverless framework将它部署上云,具体的操作步骤也可以访问上面的Github.

  • 第一步,通过npm安装 serverless;
2c25c5017ce64d4797d2ee5724cb5205.png
  • 第二步,安装Express,然后创建app.js文件;
ca4ffea7783ab17446529c405f039848.png
  • 第三步,配置serverless.yml,最简单的配置如左图,仅有四行代码(右边是可选配置项)
6161a0c3dfb00112891c8f105f0dbb0c.png
  • 第四步,微信扫描二维码进行授权注册或登陆,然后执行sls命令(serverless简写)进行部署。
926ae6d8d57c99809d72a3ef0369e0a7.png
  • 第五步,使用remove删掉这个项目,同时清理云资源。
8e05acd3a85c3f88dd4314d34ddc7e6c.png

对于前端开发者来讲,你甚至不需要了解什么是云,做了哪些事情。这一切都有Serverless framework给你做好了。除了Express.js,Koa和Eggjs同样由社区开发者贡献支持。

aeddb735dbeea6478ca7affe64d6ab40.png

总结

总结下来,本文主要分为四点:

  • 前端和Serverless的确是不解之缘,只有Serverless能够真正让一个前端工程师去挑大梁,full-stack完成一个产品;
  • Serverless前端工程化的基本思路,直接在云厂商的云函数上自己去做,还是基于现有的Serverless Framework;
  • 讲了一些Serverless Framework的原理,包括底层以标准化方式对云厂商接口的支撑,上层是利用Serverless的组件化,进行业务复用,提升效率;
  • 最后通过视频,演示了一位从未学过编程的女生的第一个 Serverless Demo。
e5e7b66a77ddea82e063c0a0491aee5d.png

结束之前展示一张照片,最右边是《Serverless架构》的作者刘宇,中间是Austen Collins,他是 http://Serverless.com的CEO和Founder,也是Serverless Framework的作者。我希望用他一段话来结束今天的演讲:Serverless是云的未来。Serverless就是我们开发者的一个非常有利的力量,我们相信未来Serverless一定能够赋能开发者。尤其对端开发者而言,从前端工程师的角色升级为全栈工程师,独立完成整个应用的从0到1。



推荐阅读
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • Tomcat/Jetty为何选择扩展线程池而不是使用JDK原生线程池?
    本文探讨了Tomcat和Jetty选择扩展线程池而不是使用JDK原生线程池的原因。通过比较IO密集型任务和CPU密集型任务的特点,解释了为何Tomcat和Jetty需要扩展线程池来提高并发度和任务处理速度。同时,介绍了JDK原生线程池的工作流程。 ... [详细]
  • 单点登录原理及实现方案详解
    本文详细介绍了单点登录的原理及实现方案,其中包括共享Session的方式,以及基于Redis的Session共享方案。同时,还分享了作者在应用环境中所遇到的问题和经验,希望对读者有所帮助。 ... [详细]
  • 深度学习中的Vision Transformer (ViT)详解
    本文详细介绍了深度学习中的Vision Transformer (ViT)方法。首先介绍了相关工作和ViT的基本原理,包括图像块嵌入、可学习的嵌入、位置嵌入和Transformer编码器等。接着讨论了ViT的张量维度变化、归纳偏置与混合架构、微调及更高分辨率等方面。最后给出了实验结果和相关代码的链接。本文的研究表明,对于CV任务,直接应用纯Transformer架构于图像块序列是可行的,无需依赖于卷积网络。 ... [详细]
  • 阿里Treebased Deep Match(TDM) 学习笔记及技术发展回顾
    本文介绍了阿里Treebased Deep Match(TDM)的学习笔记,同时回顾了工业界技术发展的几代演进。从基于统计的启发式规则方法到基于内积模型的向量检索方法,再到引入复杂深度学习模型的下一代匹配技术。文章详细解释了基于统计的启发式规则方法和基于内积模型的向量检索方法的原理和应用,并介绍了TDM的背景和优势。最后,文章提到了向量距离和基于向量聚类的索引结构对于加速匹配效率的作用。本文对于理解TDM的学习过程和了解匹配技术的发展具有重要意义。 ... [详细]
  • 一、Hadoop来历Hadoop的思想来源于Google在做搜索引擎的时候出现一个很大的问题就是这么多网页我如何才能以最快的速度来搜索到,由于这个问题Google发明 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 阿,里,云,物,联网,net,core,客户端,czgl,aliiotclient, ... [详细]
  • 本文介绍了PhysioNet网站提供的生理信号处理工具箱WFDB Toolbox for Matlab的安装和使用方法。通过下载并添加到Matlab路径中或直接在Matlab中输入相关内容,即可完成安装。该工具箱提供了一系列函数,可以方便地处理生理信号数据。详细的安装和使用方法可以参考本文内容。 ... [详细]
  • Google Play推出全新的应用内评价API,帮助开发者获取更多优质用户反馈。用户每天在Google Play上发表数百万条评论,这有助于开发者了解用户喜好和改进需求。开发者可以选择在适当的时间请求用户撰写评论,以获得全面而有用的反馈。全新应用内评价功能让用户无需返回应用详情页面即可发表评论,提升用户体验。 ... [详细]
  • Java在运行已编译完成的类时,是通过java虚拟机来装载和执行的,java虚拟机通过操作系统命令JAVA_HOMEbinjava–option来启 ... [详细]
  • 浏览器中的异常检测算法及其在深度学习中的应用
    本文介绍了在浏览器中进行异常检测的算法,包括统计学方法和机器学习方法,并探讨了异常检测在深度学习中的应用。异常检测在金融领域的信用卡欺诈、企业安全领域的非法入侵、IT运维中的设备维护时间点预测等方面具有广泛的应用。通过使用TensorFlow.js进行异常检测,可以实现对单变量和多变量异常的检测。统计学方法通过估计数据的分布概率来计算数据点的异常概率,而机器学习方法则通过训练数据来建立异常检测模型。 ... [详细]
author-avatar
壹舊雲A
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有