FEDay会后-Serverless与云开发,可能是前端的下一站
进化本身是生物体与环境之间持续不断的信息交换的具体表现。
—— 摘自《信息简史》
很荣幸在9月21号成都举办的第五届FEDay上作为讲师为大家分享腾讯云在近两年推出的云开发相关的技术和知识,成都是个非常好的城市,就是火锅太辣,费马桶~
我初次接触前端是读书期间的第一份实习工作,在SAP上海研究院TIP BI部门开发基于SVG的Charts库,99%的代码逻辑是将数据用SVG转化为可视化的UI。毕业后成为了一名传统的web前端开发者,期间还折腾过富本文编辑器。后来有近一年的时间研究效率工程,也就是大众口中的前端工程化。然后在加入腾讯之前的工作是地图,技术核心是WebGL。可以说除了音视频以外,5年多的经历基本涵盖了前端领域绝大部分的技术方向。不论是大众的web还是小众的SVG,不论是宏观到web整体的工程化还是微观到像素的图形编程。表面看上去似乎每一份新工作跟之前的工作都关联甚微,比如在使用WebGL期间积累的矩阵、向量、三角剖分等数学和图形学知识基本上在现阶段工作中得不到体现。我不知道各位前端开发者在生涯初期的几年内是否有过一些迷惘,我至今工作5年,但在加入到腾讯之前其实一直是比较茫然的状态。经常思考一些关于职业前景的问题,比如前端的核心价值是什么?前端的发展方向是什么?等等。我尝试在不同的工作内容中寻找这些问题的答案,而在FEDay的这次分享便是我个人认为最接近理想的答案:Serverless。
我分享的主体是《从前端到全栈:依托云的Serverless落地实践》,需要说明的是这里的“全栈”指的是开发模式。通俗地说就是让前端开发者能够以很小的成本介入到前端以外的工作,具体来说就是服务和数据。进而从开发模式上,一个前端开发者可以掌控应用整体从前到后所有的功能。
云开发
首先简单介绍一下什么是云开发。云开发并不是Serverless,准确的说它不是Serverless的全部。目前业内对Serverless的普遍认知是FaaS+BaaS,腾讯云基于这种认知的具象实现包括两部分:
- FaaS层:云函数SCF;
- BaaS层:云数据库和云存储。

云开发其实是在FaaS和BaaS基础上针对应用端的一套完整的解决方案,包括两部分:
- 端-SDK:目前小程序端和web端已经推向市场,Android和IOS端即将面世;
- 云-接入层:本质上是一个API Gateway,与端SDK配合完成FaaS和BaaS的能力调用。

为何云开发可能会改变前端的开发模型?回答这个问题可以对比目前一种比较流行的架构模型:BFF(Backends for Frontend,为前端服务的后端)。
BFF
BFF简单来说就是在原有的一体化服务端基础上,针对不同的业务平台分别开发一层独有的、很薄的服务,见下图:

BFF承担了一部分的业务逻辑,这部分逻辑通常是平台独有的。举一个现实中的例子:在线视频提供商有多种平台,比如网站、app。由于版权限制有些影片只能在特定的平台播放。具化到技术层面,实现此类逻辑包含分平台鉴权、数据查询策略等等,这些便是典型的平台差异化业务逻辑。独立于核心业务逻辑之外的BFF层能够实现差异化逻辑的松耦合,进而令迭代和维护更高效和安全。
目前业内对BFF普遍实践模式是将BFF分发到负责各平台技术开发的团队,比如App团队负责Mobile BFF、前端团队负责PC web和H5 BFF等等。那么对于前端工程师来说,这种模式是否意味着前端兼顾BFF层?理想的场景是这样的,但现实工作中并非如此。BFF本质上仍然是服务层,除了编程语言之外,一名合格的服务端开发者还需要具备一些独有的领域知识以及服务管理、数据管理理念。所以目前大多数BFF仍然由传统前端之外的专人负责,即便是Node.js BFF。

而Serverless和云开发解决的便是编程语言以外的这些问题。
云开发与前端
以云开发体系提供的功能和服务为基础支撑,前端开发者的关注点除了UI和交互逻辑以外,能够以很小的成本介入以云函数为承载的业务逻辑层和以云数据库、云存储为支撑的数据存储层。简而言之,前端的关注点为:交互逻辑+业务逻辑(云函数)+数据(云数据库/云存储)

在云开发支撑的前端架构模型基础上,前端开发者与其他职能团队协作的工程模型也被彻底改变:
- 业务逻辑由前端开发者负责,不再需要专职的后端开发者;
- 服务保障和线上监控由云开发平台承担,不再需要专职的运维人员。

能力模型
具体到现实上手开发,开发者们需要了解三种角色:端、云和控制台。

- 端的表现形式是对应各平台的SDK,是与前端开发者关系最紧密的一个角色;
- 云指的是支撑Serverless体系的后台系统,这部分对于开发者来说是无感知的,与其对接的工作由端SDK承担。细化到子角色可以分为接入层和基础服务,接入层负责代理转发和用户鉴权等工作;基础服务提供基本的能力支撑,包括云函数、云数据库和云存储;
- 控制台的功能分为两大类:一是管理功能,比如云函数的部署、数据和文件的管理等等;二是运营,控制台提供产品线上监控以及数据的统计和可视化,以辅助运营。
场景多样化支撑
任何一种新技术或者架构落地到具体的业务场景中都难免会遇到由于业务特殊性造成的迁移困难问题,所以在基础的开发生态之外,云开发为支撑多样化的业务场景建立了必要的策略以及对应的工具。比如对于数据私密性存在高要求的产品,可以通过控制台选择严格的CURD权限管理策略;并且可以使用wx-service-sdk在云函数中进行私密数据的CURD以保障安全性;再比如对实时性要求较高的场景,比如在线客服、多人游戏等,云数据库的实时推送功能可以保障此类功能的高效表现。

落地案例
现阶段云开发的落地场景有两个:小程序和web端(其他端的落地近期到来)。分享现场有一位观众提出了一个问题:云开发能支撑多大的用户量和请求量?如果对云开发和Serverless有基本了解的话,这个问题其实就相当于问1+1等于几一样。云开发最大的优势之一便是根据请求量进行动态的扩缩容,其背后是腾讯云庞大的计算能力做支撑。不过为了更具体的回答这个问题可以参考一个现实中的案例:腾讯相册。
2018年3月份推出腾讯相册小程序在9个月的时间里实现了用户量破亿的成绩,而这个爆款小程序的开发只占用了一个人力,在云开发基础上,一个人完成了从客户端到服务端到数据的全部工作。这个案例足以说明云开发的便利和强大,更多细节可以参考这篇文章。
总结&展望
现阶段前端社区对于前端开发者的进化方向有两种较流行的认知:以Node.js为支撑包揽前后端的大前端和以ReactNative和Flutter为支撑的泛前端。云开发非常接近大前端,并且不仅限于服务端,更进一步地深入到数据和存储。小程序其实非常接近泛前端的概念,它是web和native的综合体,大部分场景下开发者均无需关注平台差异性。那么综合大前端和泛前端,在云+端的支撑下是否能够展望一下前端在未来会成为“全栈+全端”?我们拭目以待。

FEDay会后-Serverless与云开发,可能是前端的下一站的更多相关文章
- mpvue+小程序云开发,纯前端实现婚礼邀请函
请勿使用本文章及源码作为商业用途! 前言 当初做这个小程序是为了婚礼前的需要,结婚之后,希望这个小程序能够留存下来,特地花了一些空闲时间将小程序转化成为“相册类小程序” 体验码 准备工作 mpvue框 ...
- mpvue+小程序云开发,纯前端实现婚礼邀请函(相册小程序)
请勿使用本文章及源码作为商业用途! 前言 当初做这个小程序是为了婚礼前的需要,结婚之后,希望这个小程序能够留存下来,特地花了一些空闲时间将小程序转化成为“相册类小程序” 体验码 准备工作 mpvue框 ...
- 开发基于vue前端框架下的系统的UI自动化,记录总结踩的坑
在使用了pytest完成了一个系统的UI自动化后,因为系统的前端框架,是 基于VUE写的,这就让我编写脚本的时候踩了些坑. 无法用JS 修改标签属性,从而进行的操作 比如上传图片,我们的上传是这样子的 ...
- 聚焦“云开发圆桌论坛”,大前端Serverless大佬们释放了这些讯号!
4月14日,由云加社区举办的TVP&腾讯云技术交流日云开发专场,暨"腾讯云-云开发圆桌论坛"在北京.深圳两地同步举行. 当天下午,一场主题为"基于大前端和node ...
- 微信小程序云开发
什么是云开发? 云开发是由腾讯云联合微信团队为开发者提供的 包含 云函数.云数据库和云文件存储能力的后端云服务 云开发为开发者提供完整的云端支持,弱化后端和运维概念,无需搭建服务器,使用平台提供的 A ...
- 热度3年猛增20倍,Serverless&云开发的技术架构全解析
『 作为一个不断发展的新兴技术, Serverless 热度的制高点已然到来.』 或许,Google Trends 所显示的 3 年猛增 20 倍的" Serverless " 搜 ...
- 云开发如何解决serverless对端的最后一公里问题
前端圈从来不缺少新的技术.点子和话题,有些留下来了而有些则转瞬即逝.在决定一种新技术是否能够长久的所有因素里,最核心的必然是自身实力过硬能够经受住实践检验.而除此之外,这项技术所解决问题的广泛程度.受 ...
- 支付宝小程序云开发(Serverless)
支付宝小程序云开发(Serverless) 博客说明 文章所涉及的资料来自互联网整理和个人总结,意在于个人学习和经验汇总,如有什么地方侵权,请联系本人删除,谢谢! 一.在支付宝账号里面开通小程序云服务 ...
- Serverless介绍篇(一)云开发在Serverless方面取得了怎样的新成果?
过去几年间,Serverless 发展迅猛,与其相伴的还有从小程序.移动端等到前后端一体化的演进与实践,也正因如此,从云计算到前端,众多开发者都极为关注.本文介绍了腾讯云CloudBase 的 Ser ...
随机推荐
- 用python解析JSON
先来认识下JSON JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.它基于ECMAScript的一个子集. JSON采用完全独立于语言的文本格式,但是也使 ...
- 深入浅出TCP与UDP协议
深入浅出TCP与UDP协议 网络协议是每个前端工程师的必修课,TCP/IP协议族是一系列网络协议的总和,而其中两个具有代表性的传输层协议,分别是TCP与UDP,本文将介绍这两者以及他们之间的区别. 一 ...
- 以帧为存储单位的循环stack
此stack主要是作为存储空间使用,主要的借口就是push和pop. stack frame的src以及例程位于stack_FrameTest这个库当中,其中有readme文件,可以快速上手. sta ...
- urllib.request.urlretrieve()用于下载制定url内容到本地
函数:urllib.urlretrieve(url[, filename[, reporthook[, data]]]) 参数说明: url:外部或者本地url ,url中不要含有中文,好像会出错.f ...
- C# 中的数据库操作~存储过程篇Mysql SqlServer
Mysql 存储过程查询方式 SQL server 普通数据库操作 EF 调用SQL SERVER存储过程 Mysql 存储过程查询方式: public NetPort GetNetdevicePor ...
- Cassandra查询操作趟坑记录
例子表 CREATE TABLE employee ( name TEXT, age SMALLINT, phone TEXT, bornDate DATE, createDate timestamp ...
- Python数据分析之pandas基本数据结构:Series、DataFrame
1引言 本文总结Pandas中两种常用的数据类型: (1)Series是一种一维的带标签数组对象. (2)DataFrame,二维,Series容器 2 Series数组 2.1 Series数组构成 ...
- [The Preliminary Contest for ICPC Asia Nanjing 2019] A-The beautiful values of the palace(二维偏序+思维)
>传送门< 前言 这题比赛的时候觉得能做,硬是怼了一个半小时,最后还是放弃了.开始想到用二维前缀和,结果$n\leq 10^{6}$时间和空间上都爆了,没有办法.赛后看题解用树状数组,一看 ...
- 使用SpringSecurity保护程序安全
首先,引入依赖: <dependency> <groupId>org.springframework.boot</groupId> <artifactId&g ...
- NLP(十二)指代消解
代词是用来代替重复出现的名词 例句: 1.Ravi is a boy. He often donates money to the poor. 先出现主语,后出现代词,所以流动的方向从左到右,这类句子 ...