前端为什么有人说要关注Serverless

Serverless 的概念或应用场景我们以前讲过很多,这里不再冗述。
概括性地讲 —— Serverless 的内涵就是对全部底层资源和运维工作的封装,让开发者更专注于业务逻辑。
完备的基础性文章推荐阅读这两篇:Serverless 基本概念入门 https://www.toutiao.com/i6794284259960947203/ Serverless 的运行原理与组件架构https://www.toutiao.com/i6794713387138810371/ 本回答尝试从出圈的角度,以更接地气的方式聊聊 Serverless。
先讲个故事,疫情期间在家办公,大家肯定没少做饭,自己做饭才体会到家务不易,你需要:买菜买锅、处理食材、煎炒蒸煮、最后洗碗。
听起来是不是还挺像软件开发?
你需要有云服务器、后台开发、前端开发、还有运维。
你想着,要是我能只翻两下铲子,然后就能吃饭那该多好。
巧了,有一些商家就提供了这种服务,帮你准备好了锅、洗干净的食材、专业的厨师指点,你只要进去翻两下铲子,就能煮一顿精美的饭食!而且不用洗碗。
对应到软件开发,开发者只需要
终于到了正式复工的时间,你不用再自己做饭,新买的厨具就闲置了。
你回想起昨天在商圈里的美好体验,家里的厨具要是也在能用的时候付费,不用不收费多好啊。
嘿嘿,Serverless 亦如此,按水电般计费,当部署在其上的函数运行时才收费。
所以回到题目中来,Serverless 本身是云计算相关技术,并非前端技术,为何前端要
你的厨房里已经准备好了所有厨具和处理好的食材,你现在只需要关心火候认真炒菜,成为美食博主指日可待。
也就是文首所说的 —— 开发者能更专注于业务逻辑,其他的底层资源和运维工作已经全部封装好了。
Talk is cheap, show you the code先给大家展示一个基于 Serverless 构建 docsify 文档的 demo。
这个三分钟的 demo,不仅完成了 docsify 发布代码的上传,还包括了腾讯云对象存储 COS 资源的申请和配置。
要知道,demo 作者本身并非前端工程师,甚至不是开发者。
, "ultra": , "normal": }} --}原文链接:https://www.toutiao.com/i6795809244907045379/再进一步,我们演示个 Fullstack Application。
该项目借助 Serverless 社区现有的 @serverless/tencent-express 和 @serverless/tencent-website 组件来完成。
下面是一张简单的组件依赖图:在开始所有步骤前,需执行 命令,全局安装 。
1. 准备新建项目目录 ,在该项目目录下新增 和 目录。
然后新增 和 配置文件,项目目录结构如下:├── README.md // 项目说明文档├── api // Restful api 后端服务├── dashboard // 前端页面├── .env // 腾讯云相关鉴权参数:TENCENT_APP_ID,TENCENT_SECRET_ID,TENCENT_SECRET_KEY└── serverless.yml // serverless 文件2. 后端服务开发进入目录 `api`,新增 `app.js` 文件,编写 `express` 服务代码,这里先新增一个路由 `/`,并返回当前服务器时间:```jsconst express = require('express')const cors = require('cors')const app = express()app.use(cors())app.get('/', (req, res) => ` }))})module.exports = app```3. 前端页面开发本案例使用的是 `Vue.js` + `Parcel` 的前端模板,当然你可以使用任何前端项目脚手架,比如 Vue.js 官方推荐的 [Vue CLI](https://github.com/vuejs/vue-cli) 生成的项目。
进入 `dashboard` 目录,编写入口文件 `src/index.js`:```js// 这里初始是没有 env.js 模块的,第一次部署后会自动生成require('../env')const Vue = require('vue')module.exports = new Vue(,methods: ,},})```4. 配置前后端代码都准备好了,再简单配置下 `serverless.yml` 文件了:```yamlname: fullstack-application-vuefrontend:component: '@serverless/tencent-website'# inputs 为 @serverless/tencent-website 组件的输入# 具体配置说明参考:https://github.com/serverless-components/tencent-website/blob/master/docs/configure.mdinputs:code:src: distroot: frontendhook: npm run buildenv:# 下面的 API服务部署后,获取对应的 api 请求路径apiUrl: $api:component: '@serverless/tencent-express'# inputs 为 @serverless/tencent-express 组件的输入# 具体配置说明参考:https://github.com/serverless-components/tencent-express/blob/master/docs/configure.mdinputs:code: ./apifunctionName: fullstack-vue-apiapigatewayConf:protocol: https```5. 部署部署时,只需要运行 `serverless` 命令就行,当然如果你需要查看部署中的 `DEBUG` 信息,还需要加上 `--debug` 参数,如下:```$ serverless# or$ serverless --debug```最后终端会 `balabalabala~`, 看到绿色的`done`就行了。
既然是全栈,怎么少得了数据库的读写呢?
读者可移步作者原文继续阅读:《基于 Serverless Component 的全栈解决方案》https://www.toutiao.com/i6799170151217365507/从这两个小项目中已然得解 —— Serverless 的内涵就是对全部底层资源和运维工作的封装,让开发者更专注于业务逻辑。
写在后面在问题描述中的思考很有价值,其实 Serverless 的确不是一个前端的概念,甚至都不是为了解决前端的问题而出现的,它其实就是云计算发展的必经过程。
就好比,底层语言的发展趋势肯定是高级语言。
而高级语言肯定也会封装起底层的硬件,让程序员无需关心硬件的状态,专注编码。
十年前编程还是比较难的高级学科,如今小学已经开展编程课程。
其实就是因为程序语言的发展,让编程变得更加友好。
同样地,Serverless 的出现和完善,也是让软件开发变得更加友好。
不仅前端需要
而这会淘汰后端吗?
并不会!后端会更聚焦于业务逻辑、数据处理、算法策略等更专精的事情。
汽车的出现让马车夫成为了司机,技术在变革,工程师也将成长。

参考:
最近给同事也讲了一下,要不部门内部我们自己尝试尝试Serverless?
同事问我收益是啥,我也一时说不上来,后来整理了一下,同步发一下吧。
首先如果在公司内部做serverless 的尝试方案:先搞清楚下面这几个问题:1,什么是 serverless,对于前端和客户端以及运维来说有什么收益。
1.1 首先理解 serverless,需要先理解以下几个概念:Serverless 的演进和形成主要经历了:1,IaaS(Infrastructure-as-a-Service,提供物理机服务),2,PaaS(Platform-as-a-Service,平台既服务,如阿里云,七牛,甚至我们自己的 nvm ,sce等),3,CaaS(Container-as-a-Service,容器既服务,类似我们现在内部的 docker k8s服务),4,FaaS(函数既服务,一个容器一个函数,使用时才消耗资源,不含存储,只包含逻辑),5,Baas(backend-as-a-service,后端既服务,提供存储,数据库操作,消息转发,静态服务等云服务功能)。
我们目前整体新浪还处于 IaaS,PaaS结合 Caas 的阶段,我们的服务目前有部署在物理机的,有部署在 nvm 平台的,有部署在 容器cs服务中的。
那么我们现在理解了 serverless 的演进后,我们可以认为 Faas 和 Baas 才是最终 serverless 的最后形态。
1.2 他对于前端和客户端开发人员来说:1,可以直接使用客户端代码编写后端和前端服务逻辑,利用 BaaS 提供的云服务,关联到 FaaS 中,实现对数据的操作,文件的上传,接口的调用,路由的注册等,可以更快速无损的开发 app 应用和前端应用。
2,面向业务编程,不需要了解复杂的后端服务配置和部署等,只需要编写函数完成 API 开发即可,加快生产力。
1.3 他对于后端人员来说:1,不需要
2,只需要面向 API编程,而不是业务编程。
1.4 他对于运维人员来说:1,只需要维护好 faas 和 baas 的服务集群即可。
2,更节约成本,而且会比 caas 和 paas 更节约服务器资源,因为只有当函数接口被调用时,才会启动容器,执行函数,执行完毕后再释放函数,没有调用则不会有资源浪费。
2,serverless 的使用场景:2.1,首先我们说的主要还是 faas 和 bass 的使用场景。
2.1.1 纯函数,比如计算,接口调用中转,查询服务,接口拼接,SSR等。
2.1.2 由事件触发,比如数据处理,接收数据消费,定时任务,消息转发等。
2.1.3 如果有存储逻辑,比如上传图片,裁切,处理音视频等等,可以提供通用的 baas 服务的 sdk 或者 api 来进行处理即可。
2,结合部门自己的业务,我们什么地方可以使用 serverless:2.2.1 c 端场景需求:我们开发创新产品或者小程序,app,前端网页时可以无需后端开发人员配合支持。
比如 我们要开发一个 ugc 的社区,类似微博,绿洲这种 app,我们需要的是注册,登录,feed 流,增删改查文章,上传图片,视频等功能。
场景1:那么比如注册,登录统一的 api(现在 sso 服务就可以直接复用,在 faas 中调用 sso 服务接口就可以)。
场景2:用户的头像上传,图片,视频上传可以直接调用 s3的服务接口或者 cdn 接口直接用 faas 包装即可,无需后端配合。
场景3:用户发布文章,删除,修改文章等,需要操作数据库,这里包含了简单的 curd 的业务逻辑,我们可以直接使用云平台创建好服务器,然后接入 baas 中的比如 mysql 的 client,直接在 faas 中编写对应的 curd 逻辑即可,或者利用一些开源的 curd 包,aws,阿里云都有类似的功能,在新浪我们可以拆开成faas 和 baas 结合+paas 的解决方案。
那么我们开发这么一个 ugc 社区,当我们拥有了 serverless 架构服务后,我们完全可以纯前端完成功能。
(理想情况)2.2.2 内部 b 端场景:场景1:我们要实现一套无纸化办公 app 或者 web 系统,比如我们的 scheme 服务,hybrid 后台发布服务中的部分逻辑,比如圈用户,圈版本等接口都可以直接拆分到 faas 服务中。
场景2:我们经常要分析处理一些数据,定时进行数据计算,我们可以直接在 faas 中的定时任务完成计算逻辑和消息转发功能。
其中场景2,我们目前需要申请服务器,开发 crontab脚本,再申请数据库,进行数据二次处理写入。
或者还要在luwak上编写 sql,配置任务,但是如果和 sql 无关的任务则luwak无法满足需求。
3,serverless 的实现和开源方案,业界对比:1,阿里云,腾讯云,云,AWS,google 的云服务等。
2,开源服务:Openfaas(社区的),KNative(google 的),OpenWhisk(IBM,太老了这个多个开源系统拼接),Kubeless,Fission(k8s 官方的),Fn(Oracle的,兼容 AWS 的 Lambda 函数服务)建议选 openfaas 或者 kubeless尝试一下,看大家都比较推荐,因为咱们肯定是自建。
总结:其实还不错,如果公司不用,我自己的个人项目还是可以选择试试的。

参考:
Serverless 是一种 “无服务器架构”,让用户无需关心程序运行环境、资源及数量,只要将精力 Focus 到业务逻辑上的技术。
现在公司已经实现 DevOps 化,正在向 Serverless 迈进,而为什么前端要
一定会改变前后端联调方式,让前端参与服务器逻辑开发,甚至 Node Java 混部。
大大降低 Nodejs 服务器维护门槛,只要会写 JS 代码就可以维护 Node 服务,而无需学习 DevOps 相关知识。
对一个自由开发者:未来服务器部署更弹性,更省钱。
部署速度更快,更不易出错。
前端框架总是带入后端思维,而 Serverless 则是把前端思维带入了后端运维。
前端开发者其实是最早享受到 “Serverless” 好处的群体。
他们不需要拥有自己的服务,甚至不需要自己的浏览器,就可以让自己的 JS 代码均匀、负载均衡的运行在每一个用户的电脑中。
而每个用户的浏览器,就像现在最时髦,最成熟的 Serverless 集群,从远程加载 JS 代码开始冷启动,甚至在冷启动上也是卓越领先的:利用 JIT 加速让代码实现毫秒级别的冷启动。
不仅如此,浏览器还是实现了 BAAS 服务的完美环境,我们可以调用任何函数获取用户的 Cookie、环境信息、本地数据库服务,而无需关心用户用的是什么电脑,连接了怎样的网络,甚至硬盘的大小。
这就是 Serverless 理念。
通过 FAAS(函数即服务)与 BAAS(后台即服务)企图在服务端制造前端开发者习以为常的开发环境,所以前端开发者应该更能理解 Serverless 带来的好处。