在前端圈中最不缺少的就是新技术,几乎每个月都会出现一些新的 npm 包、新框架、新名词。当一篇流行框架发布新版本时,或者当一篇文章解释某个新即使时,下面的评论往往都是:
求求你别更新了,我已经学不动了。
或者
来人啊,扶我起来,我还能学。
亦或者
能不能直接出 v999 啊,让我一次学完得了。
只有一张图能描述前端开发者此时此刻的心情:
2020 年初的一场疫情让我们有了更多宅在家里学习的时间了。前不久我也受邀担任了腾讯主办的「协力抗疫,码力全开」线上公益黑客马拉松的嘉宾评委。这次黑马大赛和以往不同之处在于全程都是线上,自由组队,通过 2 天时间开发一款和抗击疫情相关的微信小程序。2 天时间有近 200 人提交了 80 多个参赛作品。
这次大赛还有一个技术上的两点就是“云开发”。
提到云开发,我们自然会想到另一个概念,那就是 Serverless。毫无疑问 2019 年是 Serverless 大规模推广的一年,无论是 Serverless 相关书籍和文章,还是各种大会上关于 Serverless 相关的主题,都是非常热门的。甚至有很多文章称 Serverless 为前端 3.0。
- 以 ajax 为代表的前端 1.0
- 以 Node.js 为代表的前端 2.0
- 以 Serverless 为代表的前端 3.0
Node.js 更是把前端 JavaScript 的能力带到了服务器端,使得前端开发者可以方便的搞 Full Stack 或者 (BFF)Backends for Frontend。很多前端开发者也把自己的职业目标定义为了全栈工程师。显然这与主流软件开发的理念是违背的:让专业的人做专业的事。很多开发者也慢慢从“全栈工程师”变成了“全干工程师”——什么都会干,却什么都干不好。
你作为前端开发者,还懂如何配置 nginx。但是你配的 nginx 真的是最优的吗?为什么不交给专业的人去做呢?
你作为前端开发者,还懂如何配置 mysql。但是你配的 mysql 真的是最优的吗?为什么不交给专业的人去做呢?
你作为前端开发者,真的懂并发、网络、扩容、容灾、监控、日志吗?为什么不交给专业的人去做呢?
通过本次黑马大赛期间我和几名开发者聊天,大概了解到了云开发的概念。基本上可以认为是一套构建于 Serverless 的最佳实践和解决方案,涵盖了 FaaS(Function as a service,函数即服务)和 BaaS(Backend as a service,后端及服务)的综合体。
具体实现为下图所示的模型:
以云开发体系提供的功能和服务为基础支撑,前端开发者的关注点除了 UI 和交互逻辑以外,能够以很小的成本接入以云函数为承载的业务逻辑层和以云数据库、云存储为支撑的数据存储层。简而言之,前端的关注点为:交互逻辑 业务逻辑(云函数) 数据(云数据库/云存储)。
很多将 Serverless 的文章都会提到 CDN(Content Delivery Network,内容分发网络),这也是大多数前端开发者接触到的第一个 Serverless 服务,即使在 Serverless 这个名词诞生之前我们就已经使用了很久了。使用 CDN 开发者不需要关心文件的私密性、安全性、鉴权机制,不需要了解 CDN 服务器的状态、文件存储的具体位置,只需要部署文件即可,CDN 对于前端开发者来说就是 Serverless 的。
在本次黑马大赛中 80% 多的开发者使用了云开发,而其中使用最多的功能则是云函数。云函数类似 AWS Lambda,开发者只需使用平台支持的语言编写核心代码并设置代码运行的条件,即可在腾讯云基础设施上弹性、安全地运行代码。
云函数带来的最明显的优势就是用户只需编写最重要的“核心代码”,不再需要关心周边组件,极大地降低了服务架构搭建的复杂性。无需任何手动配置,云函数即可根据请求量自动横向扩缩。不管您的应用每天的请求数处于波峰还是波谷,SCF 均可自动安排合理的计算资源满足业务需求。
本次黑马大赛采用云开发还有一个最大的优势就是“零部署,零维护”,因此参赛者都是开发者,没有专业的运维工程师。而任何一个小程序的上线,除了大家看到的小程序,背后还有网关、计算服务、基础设施管理、数据库、文件服务、缓存服务等等。云开发提供了较完整的服务器架构,并且能够保证服务的稳定性。
在已经到来的 2020 年,Serverless 还有更多的可能性。最后还是那句老话:来人啊,扶我起来,我还能学。