Skip to content

前端 Serverless:面向全栈的无服务器架构实战 -- 杨凯

🏷️ Serverless

本书前面介绍了 Serverless 的起源、定义以及优缺点等。后面详细介绍了 Serverless 的两个主要组成部分:FaaSBaaS,并且基于阿里云做了示例。

总体来说个人感觉作为入门的介绍书籍还是蛮好的,比较容易理解,介绍也比较详细。比较适合于我这样经常听到,但是又没有使用过的开发者。

由于作者是阿里的员工,书中的示例都是基于阿里云的,所以有不少的篇幅用于介绍具体服务的使用。我这里只是大概瞄了一下,没有实际去操作。

这里仅记录下 Serverless 相关的核心名词和书的目录,以作备忘。

核心名词

  • Cloud Native:云原生
    • 云原生的代表技术包括:容器、服务网格、微服务、不可变基础设施和声明式 API。
  • CNCF:Cloud Native Computing Foundation,云原生计算基金会
  • CI:Continuous Integration,持续集成
  • CD:Continuous Delivery,持续交付 / Continous Deployment,持续部署
  • DevOps:Development & Operations,开发运维
  • NoOps:No Operations,无需运维
  • BFF:Backend For Frontend,服务于前端的后端
    • 由 ThoughtWorks 公司的 Sam Newman 在一篇名为 Pattern: BVackends For Frontends 的博客文章中提出。
    • BFF 主要通过在前端和后端之间增加一个“胶水层”(这个“胶水层”由对应的客户端负责编写),实现对客户端所需要的 API 的聚合裁剪,从而解决前后端分离之后所带来的协作问题。
  • FaaS:Function as a Service,函数即服务。提供基于事件驱动的计算服务。开发者以函数片段的方式来管理应用代码,这些函数通过事件或 HTTP 请求来触发。
    • 如:Amazon AWS Lambda、Google Cloud Functions、Microsoft Azure Functions、IBM OpenWhisk、阿里云 Function Compute。
  • BaaS:Backend as a Service,后端即服务。指的是可以用来替换应用程序中的一些核心能力,且直接通过 API 的方式提供的第三方服务。
    • 如:GitHub Pages、CDN(Content Delivery Network,内容分发网络)、OSS(Object Storage Service,对象存储服务)、RDS(Relational Database Service,关系型数据库服务)、MQS(Message Queue Servie,消息队列服务)。
  • Serverless:指的是无论在应用的构建环节还是运行环节,都无需对服务器进行维护和管理。Serverless 计算平台应该包含以下一种或两种能力:FaaSBaaS
    • 中文译为“无服务器的”;但并不是真正意义上没有服务器的架构,而是针对开发者来说,无需关心服务器。包括服务器的资源情况、部署情况、操作系统以及依赖软件等在内的所有细节,开发者均无需关注,这一切由平台完成,开发者只需要专注于业务实现。
    • 首次提出于 2012 年 Ken Fromm 发表的 The Future Of Software And Apps Is Serverless
    • 因 2014 年 Amazon 推出的 AWS Lambda 服务而广为人知。
  • Pay As You Go:按量付费
  • Elastic Compute:弹性计算
  • IaaS:Infrastructure as a Service,基础设施即服务
  • PaaS:Platform as a Service,平台即服务
  • SaaS:Software as a Service,软件即服务
  • 容器化:容器化技术进一步将操作系统虚拟化。通过 Linux 的 Control Groups 和 Namespace 两大特性,实现了对资源(主要是 CPU 和内存)的隔离,提供了能使不同容器独立并且安全运行的环境。代表产品是 Docker。
  • CaaS:Containers as a Service,容器即服务

目录

第一部分 Serverless 综述

  • 第 1 章 什么是 Serverless
    • 1.1 Serverless 的价值
    • 1.2 Serverless 是一种理念
    • 1.3 Serverless 一词的诞生
    • 1.4 CNCF Serverless 白皮书
    • 1.5 Serverless 与前端架构
    • 1.6 从前端到全栈
    • 本章小结
  • 第 2 章 何时应用 Serverless
    • 2.1 Serverless 的优势与劣势
    • 2.2 服务端的应用场景
      • 2.2.1 多媒体处理
      • 2.2.2 数据库变更捕获
      • 2.2.3 处理 IoT 请求
      • 2.2.4 聊天机器人
      • 2.2.5 计划任务
      • 2.2.6 通用后端服务
    • 2.3 前端的应用场景
      • 2.3.1 Web 应用
      • 2.3.2 SSR 应用
      • 2.3.3 移动客户端应用
      • 2.3.4 小程序
    • 本章小结
  • 第 3 章 Serverless 与服务端技术
    • 3.1 应用分层架构
    • 3.2 微服务架构
    • 3.3 云计算
    • 3.4 容器化
    • 3.5 NoOps
    • 本章小结
  • 第 4 章 Serverless 与前端技术
    • 4.1 Backend For Frontend
    • 4.2 Node.js
    • 4.3 TypeScript
    • 4.4 GraphQL
    • 4.5 NoBackend
    • 本章小结

第二部分 FaaS 技术

  • 第 5 章 理解 FaaS
    • 5.1 FaaS 的特性
      • 5.1.1 函数由事件驱动
      • 5.1.2 无状态的函数
      • 5.1.3 函数应当足够简单
    • 5.2 FaaS 的优点
      • 5.2.1 更高的研发效率
      • 5.2.2 更低的部署成本
      • 5.2.3 更低的运维成本
      • 5.2.4 更低的学习成本
      • 5.2.5 更低的服务器费用
      • 5.2.6 更灵活的部署方案
      • 5.2.7 更高的系统安全性
    • 5.3 FaaS 的缺点
      • 5.3.1 存在平台学习成本
      • 5.3.2 较高的调试成本
      • 5.3.3 潜在的性能问题
      • 5.3.4 供应商锁定问题
    • 本章小结
  • 第 6 章 第一个函数
    • 6.1 从控制台创建
      • 6.1.1 开通产品
      • 6.1.2 创建一个函数
      • 6.1.3 调用函数
    • 6.2 基于命令行工具
      • 6.2.1 安装命令行工具
      • 6.2.2 身份认证配置
      • 6.2.3 初始化 FaaS 项目
      • 6.2.4 本地调试
      • 6.2.5 发布项目
    • 6.3 Serverless Framework
      • 6.3.1 初始化命令行工具
      • 6.3.2 阿里云授权
      • 6.3.3 开通配套服务
      • 6.3.4 创建项目
      • 6.3.5 发布部署
      • 6.3.6 远程调用
    • 本章小结
  • 第 7 章 函数的生命周期
    • 7.1 函数的定义
      • 7.1.1 函数名
      • 7.1.2 参数
    • 7.2 函数的调试
      • 7.2.1 本地调用
      • 7.2.2 在线调用
    • 7.3 函数的发布
      • 7.3.1 配置
      • 7.3.2 编译
      • 7.3.3 部署
    • 7.4 函数的更新
      • 7.4.1 测试与发布
      • 7.4.2 灰度与 A/B 测试
    • 本章小结
  • 第 8 章 理解函数运行时
    • 8.1 函数的触发
      • 8.1.1 客户端触发器
      • 8.1.2 实践:通过 Web API 调用函数
      • 8.1.3 消息触发器
      • 8.1.4 实践:通过消息触发函数
      • 8.1.5 存储触发器
      • 8.1.6 实践:生成上传图片的缩略图
      • 8.1.7 其他触发器
    • 8.2 函数的执行
      • 8.2.1 入口方法
      • 8.2.2 运行时
      • 8.2.3 日志输出
      • 8.2.4 实践:查询函数调用日志
    • 本章小结
  • 第 9 章 自建简易 FaaS
    • 9.1 基础能力
      • 9.1.1 基于进程隔离运行函数
      • 9.1.2 标准函数的执行能力
      • 9.1.3 更安全的执行环境
      • 9.1.4 增加 HTTP 服务
    • 9.2 进阶挑战
      • 9.2.1 提升性能:通过进程池管理子进程的生命周期
      • 9.2.2 增强安全性:限制函数的执行时间
      • 9.2.3 确保稳定性:对函数资源进行限制
      • 9.2.4 提高效率:内置前端常用服务
    • 本章小结

第三部分 BaaS 技术

  • 第 10 章 BaaS 的由来
    • 10.1 传统的 IT 时代:原始部落的刀耕火种
    • 10.2 云计算时代:现代城市的集中供应
    • 10.3 新一代基础设施:CaaS
    • 10.4 PaaS 的演进:BaaS
    • 10.5 Google Firebase
    • 10.6 BaaS 的优势和价值
    • 本章小结
  • 第 11 章 初始化 BaaS 应用
    • 11.1 注册小程序的账号
    • 11.2 配置云服务
    • 11.3 初始化代码
    • 11.4 添加 BaaS SDK
    • 本章小结
  • 第 12 章 数据的持久化
    • 12.1 数据库设计原则
      • 12.1.1 BSON 与数据类型
      • 12.1.2 三大范式与 NoSQL 数据库
      • 12.1.3 引用方式:规范数据模型
      • 12.1.4 内嵌方式:高效数据模型
    • 12.2 使用数据存储服务
      • 12.2.1 通过控制台管理集合
      • 12.2.2 通过客户端查询数据
      • 12.2.3 在云函数中调用
      • 12.2.4 数据权限管理
      • 12.2.5 实践:数据的 CURD
    • 本章小结
  • 第 13 章 文件的存储与分发
    • 13.1 内容分发网络(CDN
      • 13.1.1 性能优化的利器
      • 13.1.2 CDN 加速的基本原理
      • 13.1.3 文件存储与 CDN
    • 13.2 使用文件存储服务
      • 13.2.1 通过控制台管理文件
      • 13.2.2 文件的权限管理
      • 13.2.3 使用 SDK 上传
      • 13.2.4 实践:实现图片的上传和展示
    • 本章小结
  • 第 14 章 用户身份识别与授权
    • 14.1 认证的演进
      • 14.1.1 统一身份认证:OpenID
      • 14.1.2 第三方授权登录:OAuth
      • 14.1.3 进一步完善:OIDC
    • 14.2 身份认证即服务:Auth0
      • 14.2.1 注册并创建租户
      • 14.2.2 控制中心概览
    • 14.3 实践:实现基于 Auth0 的身份认证
      • 14.3.1 创建并配置应用
      • 14.3.2 创建登录页面
      • 14.3.3 启动 Web 服务
      • 14.3.4 实现登录与注销
      • 14.3.5 用户体验改进
    • 14.4 实践:实现 GitHub 账号授权
      • 14.4.1 开通 GitHub OAuth
      • 14.4.2 配置第三方登录
      • 14.4.3 测试与认证
    • 14.5 扩展:详解 JWT
      • 14.5.1 令牌的类型
      • 14.5.2 构造一个令牌
      • 14.5.3 深入理解 JWT 原理
      • 14.5.4 JWT 的优势/劣势与应用场景
    • 本章小结