Serverless 入门

概念


Serverless 从字面看是 "少服务" 的意思, 也就是网上常说的 "无服务架构", 当然并不是说基于 Serverless 架构的软件不需要服务器就可以运行, 它指的是用户无需关心服务器的状态、资源(CPU、内存、磁盘、网络), 也就是说运维部分不需要用户关心, 只需要将精力集中到业务逻辑上的开发。

其实 Serverless 早已与前端产生了联系, 比如 CDN, 我们将静态资源发布到 CDN 之后, 就不需要关心 CDN 有多少个节点, 节点是如何部署的, 也不用关心负载均衡、网络加速等问题。

而在我们前端使用 Serverless 的场景主要会有 SSR、大前端方向的全栈开发。

优缺点


根据 Serverless 的特性, 我们可以总结出以下优点:

  1. 低运维成本 (云计算资源、All on Cloud)
  2. 事件驱动触发 (云资源事件触发、 HTTP 请求触发)
  3. 安全可靠 (云厂商保障、代码加密托管、抵御网络攻击)
  4. 按需计费 (百毫秒级别计算计量、每月免费额度前 100 万次调用免费)
  5. 弹性伸缩 (方便扩容、提前应对峰值流量)

同样 Serverless 也是一把双刃剑, 它也有它的缺陷:

  1. 可移植性 (Serverless 应用的实现在很大程度上依赖于 Serverless 平台及该平台上的其他服务, 然而不同厂商的 Serverless 平台和解决方案的具体实现并不相同)
  2. 执行时长 (Serverless 一个重要的特性是按需加载执行, 而不是长时间部署在主机上, 目前大部分 Serverless 平台对执行时长都有限制, 如阿里云函数计算最大执行时长为 10 分钟)
  3. 性能 (Serverless 长时间没有被调用, 会被主机卸载, 当再次调用时, 会触发冷启动, 冷启动包含了代码下载、启动函数实例容器、运行时初始化)
  4. 调试与测试 (由于本地环境跟平台环境存在一定的差异性, 开发者需要不断的调试代码打印日志, 并提交到函数平台进行测试, 在此期间会带来一定的开发成本和产生一些费用)

入门


本次入门采用阿里云的函数计算做为此次 Serverless 平台服务, 开发语言选择 node

实践

Get/POST 请求

  1. 首先创建一个 serverless 函数,选择"处理事件请求方式"。这里我们需要注意,选择 "处理事件请求" 需要搭配 API 网关使用。选择 "处理 HTTP 请求",则可以直接使用。在这里我们选择 "处理事件请求"的方式。
  2. 创建 API 网关,选择允许 APPCode 认证
  3. 输入请求的 path地址,并且选择 Http 请求方式
  4. 选择刚才创建的 serverless 函数
  5. 进行 API 授权
  6. 开始调试 API,看接口返回的是否与 serveless 的一致

直接使用 HTTP 方式请求

  1. 与上面的稍微有一点不同,这里选择的是 "处理 HTTP 请求"的方式,下面的触发器可以自定义选择
  2. 可以在测试函数中,找到请求地址
  3. 它跟 "处理事件请求方式" 区别如下

注意事项


mysql 链接字符串涉及到信息安全问题

  1. 我们首先将 Mysql 的 JSON 配置通过 JSON.stringify 转化为字符串, 然后再通过 btoa 函数转化为 base64
  2. 然后在 Serverless 的环境变量中存储 Mysql 配置
  3. 也可以将 MYSQL 配置写到 template.yml 文件中, 这样每次发布之后, 都会保证环境变量存在 Mysql 的配置
  4. Serverless 解析的时候需要从 process.env 中取到 Mysql 配置, 然后通过 atob 解码成字符串, 再通过 JSON.parse 转成 JSON

入参如何获取

  • 默认的参数是字符串格式的, 需要在 Serverless 入口通过 JSON.parse 转化成 JSON 格式

如何给出返回结果

  • Serverless 第三个参数为 callback, 可以通过这个函数将返回结果抛给请求者, callback 第一个参数是错误信息, 给定 null, 表示成功, 第二个参数为成功的返回结果, 如果是 HTTP 方式请求, 需要使用 JSON 格式返回 statusCode 和 body

如何获取到 Post 参数

  • 通过 event 的 body 获得 Post 参数, 它是 Base64 格式, 需要通过 atob 解码成字符串, 再通过 JSON.parse 转成 JSON

如何获取到 Get 参数

  1. 需要先创建 API 的第二步, 定义 API 请求中设置入参请求模式为入参透传
  2. 之后通过 event 的 queryParameters 获得 Get 参数

如何查看 Log

  1. 需要先在阿里云平台上开启日志服务, 创建 Project
  2. 之后在 template.yml 文件中加入 LogConfig

总结


Serverless 技术的诞生, 为前端走向更远的道路提供了一种方向。它的作用对于前端而言, 更多的在于我们不需要过多的关心服务器的运维, 不需要关心我们不熟悉的领域, 只需要将精力集中在业务逻辑上的开发。

未来也可能给前端带来更加便捷的开发方式, 前后端可以统一语言、统一规范, 缩短了联调时间和人力成本, 让前端工程师向全栈开发进行转型。

相关推荐
qq_390161773 分钟前
防抖函数--应用场景及示例
前端·javascript
John.liu_Test33 分钟前
js下载excel示例demo
前端·javascript·excel
Yaml41 小时前
智能化健身房管理:Spring Boot与Vue的创新解决方案
前端·spring boot·后端·mysql·vue·健身房管理
PleaSure乐事1 小时前
【React.js】AntDesignPro左侧菜单栏栏目名称不显示的解决方案
前端·javascript·react.js·前端框架·webstorm·antdesignpro
哟哟耶耶1 小时前
js-将JavaScript对象或值转换为JSON字符串 JSON.stringify(this.SelectDataListCourse)
前端·javascript·json
getaxiosluo1 小时前
react jsx基本语法,脚手架,父子传参,refs等详解
前端·vue.js·react.js·前端框架·hook·jsx
理想不理想v1 小时前
vue种ref跟reactive的区别?
前端·javascript·vue.js·webpack·前端框架·node.js·ecmascript
知孤云出岫1 小时前
web 渗透学习指南——初学者防入狱篇
前端·网络安全·渗透·web
贩卖纯净水.1 小时前
Chrome调试工具(查看CSS属性)
前端·chrome
栈老师不回家2 小时前
Vue 计算属性和监听器
前端·javascript·vue.js