进化本身是生物体与环境之间持续不断的信息交换的具体表现。
—— 摘自《信息简史》
很荣幸在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,为前端服务的后端)。
BFFBFF简单来说就是在原有的一体化服务端基础上,针对不同的业务平台分别开发一层独有的、很薄的服务,见下图:
BFF承担了一部分的业务逻辑,这部分逻辑通常是平台独有的。举一个现实中的例子:在线视频提供商有多种平台,比如网站、app。由于版权限制有些影片只能在特定的平台播放。具化到技术层面,实现此类逻辑包含分平台鉴权、数据查询策略等等,这些便是典型的平台差异化业务逻辑。独立于核心业务逻辑之外的BFF层能够实现差异化逻辑的松耦合,进而令迭代和维护更高效和安全。
目前业内对BFF普遍实践模式是将BFF分发到负责各平台技术开发的团队,比如App团队负责Mobile BFF、前端团队负责PC web和H5 BFF等等。那么对于前端工程师来说,这种模式是否意味着前端兼顾BFF层?理想的场景是这样的,但现实工作中并非如此。BFF本质上仍然是服务层,除了编程语言之外,一名合格的服务端开发者还需要具备一些独有的领域知识以及服务管理、数据管理理念。所以目前大多数BFF仍然由传统前端之外的专人负责,即便是Node.js BFF。
而Serverless和云开发解决的便是编程语言以外的这些问题。
云开发与前端以云开发体系提供的功能和服务为基础支撑,前端开发者的关注点除了UI和交互逻辑以外,能够以很小的成本介入以云函数为承载的业务逻辑层和以云数据库、云存储为支撑的数据存储层。简而言之,前端的关注点为:交互逻辑+业务逻辑(云函数)+数据(云数据库/云存储)
在云开发支撑的前端架构模型基础上,前端开发者与其他职能团队协作的工程模型也被彻底改变:
业务逻辑由前端开发者负责,不再需要专职的后端开发者;