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

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

相关推荐
轻口味1 小时前
【每日学点鸿蒙知识】AVCodec、SmartPerf工具、web组件加载、监听键盘的显示隐藏、Asset Store Kit
前端·华为·harmonyos
alikami1 小时前
【若依】用 post 请求传 json 格式的数据下载文件
前端·javascript·json
吃杠碰小鸡1 小时前
lodash常用函数
前端·javascript
emoji1111112 小时前
前端对页面数据进行缓存
开发语言·前端·javascript
泰伦闲鱼2 小时前
nestjs:GET REQUEST 缓存问题
服务器·前端·缓存·node.js·nestjs
m0_748250032 小时前
Web 第一次作业 初探html 使用VSCode工具开发
前端·html
一个处女座的程序猿O(∩_∩)O2 小时前
vue3 如何使用 mounted
前端·javascript·vue.js
m0_748235952 小时前
web复习(三)
前端
AiFlutter2 小时前
Flutter-底部分享弹窗(showModalBottomSheet)
java·前端·flutter
麦兜*2 小时前
轮播图带详情插件、uniApp插件
前端·javascript·uni-app·vue