近两年来,Serverless 无疑是前端圈里最火热的话题之一,在各种技术峰会、各种技术文章里都能看到它的身影。如果你是一名前端开发者,一定很奇怪:
“我们这些前端切图仔,为什么要关注 Serverless 这种云计算的概念?”
我们就从这个话题开始聊起吧。
为什么前端开发者要关注 Serverless ?
这个问题用一句话回答就是:
“Serverless 解放了端开发者(不仅仅是 Web 开发者)的生产力,让端开发者可以更快、更好、更灵活地开发各种端上应用,不需要投入太多精力关注于后端服务的实现。”
下面我们就来慢慢解释这句话。
在前端的史前时代,那个时候甚至还没有”前端工程师“这个职位分类,所有人都是后台开发,所有的网页和 Web 应用都是来自于后台渲染,CGI、PHP (甚至你可能都没听说过的 Perl)便是当时 Web 技术的代名词,那个时候的 JS 和 CSS,不过是“切图仔”在网页里写动效和弹窗的小玩具而已。
后来,AJAX 技术出现了,最早在 Outlook Web Access 中出现,随后随着 Google Map、Gmail 等大型 Web 应用的实践,逐步为人所知。这项技术让页面内的 JS 也能异步地向服务器发起各种请求,并且把数据渲染到页面上。这个时候,前端工程师们开始接管视图层逻辑:
再后来,Node.js 诞生,大大降低了前端开发者开发一个后台服务的难度,这也让前端开发者逐渐接管了接管了渲染逻辑,在这期间,各大前端框架(代表性的 React、Vue)的服务器端渲染也逐步成熟。
既然能用 Node.js 来做服务端渲染,那么拿 Node.js 来写后台业务逻辑、实现各种 HTTP API 当然也不在话下,所以在一些公司里,前端接管业务逻辑,后台只负责各种底层微服务的架构就出现了,这也是目前很多大公司在实行的架构:
细心的你可能已经注意到了,在这个时候,渲染、HTTP API、后台业务逻辑这些东西,从端的角度看是属于服务端的,但是从分工角度看却属于前端开发的范畴,这就是 BFF(Backend for Frontend)的概念,它的优势在于:
- 把核心业务逻辑完全交给前端工程师,让业务逻辑可以更加灵活快速地变更;
- 让后端工程师可以更加关注于海量服务的稳定性和可靠性,提升服务质量。
这就是为什么大公司的很多业务,都开始越来越多地招 Node.js 全栈工程师的原因。
但是 BFF 并不是银弹,它还是有一定问题的,比如在国内通晓前后端开发的全栈工程师太少,很难撑起大体量的业务开发。而且国内大多数前端工程师缺少服务端开发的经验,让他们运维上百台服务器和一整套海量服务,有点强人所难:
- 每个服务器实例应该有多少核?多少内存?
- 怎么优化 Linux 网络栈的各种参数?
- 服务器宕机怎么办?双活、多活、同城、异地怎么搞?
而 Serverless 正是帮助前端工程师解决运维开发 BFF 的良药。
Serverless 这个单词,直译成中文的话,应该是“无服务器”。当然,这里的“无服务器”绝对不是说不需要任何服务器资源了,而是说不需要关心服务器的具体运维和管理,只需要写代码然后发布即可。
它包含了 FaaS(函数即服务)和 BaaS(后端即服务)两大块功能,把各种基础设施进行了抽象,即使不熟悉后端的开发者,也能快速高质量地开发出海量、稳定的后端服务,而这对于前端工程师维护 BFF 服务来说,几乎是量身定做的。
举一个最简单的例子,你现在需要上线一个新的 HTTP API(比如 /getUser?id=123
),如果使用 Serverless 服务的话,有多快呢?
你只需要写下面这个云函数:
module.exports = async function(events, context) {
const {
id } = events.query.id
const userInfo = await fetchUserInfo(id) // 调用后端微服务,拉取用户信息
return userInfo
}
然后发布这个云函数(假设命名为 getUser
),并且为它设置一条路由:
cloudbase service:create -f getUser -p /getUser
然后你就可以通过 https://xxx.com/getUser
来拉取数据了,同时还附赠海量弹性伸缩、异地多活、日志监控等多方位的能力。
如果你觉得这样很酷炫,那么不如来试一试 云开发 Cloudbase 吧!
云开发是什么?
云开发(Cloudbase)是腾讯云 TCB 团队(Tencent Cloudbase)出品的云端一体化产品方案,为广大的小程序、Web、移动端开发者提供一站式的 Serverless 服务。
当然这是官方的说法,用人话讲就是:
用了云开发,各个端的开发者就可以一站式地解决后端服务问题了!
实际上早在 2018 年,云开发就联合微信团队推出了「小程序·云开发」,如果你对它还不怎么了解,可以看这两篇文章:
而现在,云开发 For Web 也正式上线了!
云开发有哪些能力?
云开发提供了云数据库、云函数、云存储、用户登录体系等一系列的后端能力,并且提供了各端的 SDK,让各个端的开发者能够基于这些能力,快速、优质地开发出功能丰富的应用。
Talk is cheap, Show me the code!
口说无凭,我们还是来直接看代码吧!
云数据库
云开发提供了一个文档型的 NoSQL 数据库,与传统的云上数据库不同的是,云开发的数据库可以在各种客户端内使用 SDK 直接进行读写,比如 Web 应用、小程序内、Flutter 客户端等等。
下面我们以 Web 应用为例,展示云数据库的一系列功能。
基础读写
CURD是数据库最基础的功能,云开发 SDK 提供了一套链式调用接口,对数据库进行读写:
// 使用 Web 端 SDK
const cloudbase = require('tcb-js-sdk')
const app = cloudbase.init({
/* 初始化... */ })
const db = app.database()
// 插入文档
await db.collection('messages').add({
author: 'stark',
message: 'Hello World!'
})