目录
●前言
第1章 Serverless架构的概述
1.1什么是Serverless架构
1.1.1后端服务的演化
1.1.2小颗粒度服务的流行
1.1.3Serverless架构的难点
1.2Serverless架构的作用
1.2.1屏蔽运维需求
1.2.2降低编码门槛
1.2.3搭建低成本流水线
1.3Serverless架构的应用场景
1.3.1初创企业
1.3.2敏捷开发团队
1.3.3无需架构管理
1.4主流Serverless架构设计的问题
1.4.1非通用使用设计
1.4.2回调与返回设计
1.4.3中心化路由和分布式路由设计
1.4.4黑盒和显式引用设计
1.4.5生态和过于依赖厂商
1.5Serverless架构的目标
1.5.1开源与生态
1.5.2完善的标准
1.5.3私有化部署能力
1.5.4去中心化服务
第2章 Serverless的总体设计
2.1项目的结构
2.1.1设计结构一览
2.1.2虚拟机结构设计
2.1.3框架结构设计
2.1.4平台结构设计
2.2虚拟机的结构拆分
2.2.1VM模块
2.2.2上下文设计
2.2.3模块系统设计
2.2.4变量代理设计
2.3框架的结构拆分
2.3.1命令行工具设计
2.3.2基础库设计
2.3.3中间件设计
2.3.4线程系统设计
2.4框架线程系统的结构拆分
2.4.1线程池设计
2.4.2回收机制设计
2.4.3动态运行时设计
2.5运行时模块拆分
2.5.1运行时与虚拟机的关系
2.5.2环境变量注入与模块逻辑设计
2.5.3服务载入虚拟机设计
2.6平台的结构拆分
2.6.1去中心文件系统设计
2.6.2代码服务端部署设计
2.6.3配置与注册中心设计
2.7平台功能结构设计
2.7.1App的注册与配置
2.7.2分流和灰度配置
2.7.3App域名配置
第3章 Serverless架构的脚手架设计
3.1脚手架功能概述
3.1.1服务运行
3.1.2代码编译
3.1.3服务部署
3.2服务运行功能概述
3.2.1配置获取设计
3.2.2开发模式设计
3.2.3可插拔扩展设计
3.3可插拔扩展设计与功能实现
3.3.1插件出口入口设计与实现
3.3.2依赖扩展设计与实现
3.3.3扩展链路设计与实现
3.4项目初始化功能设计
3.4.1初始化模板的构建
3.4.2模板拉取功能的实现
3.5产物构建设计
3.5.1打包的前置检测
3.5.2文件的构建和编译
3.5.3单应用和多应用打包的实现
3.6服务部署设计
3.6.1App的上传与同步
3.6.2服务器的服务载入
3.6.3部署通知逻辑
3.7分布式代码更新
3.7.1分布式代码更新的目的
3.7.2单机和多机代码更新的区别
3.7.3分布式代码更新实现
第4章 Serverless架构的模块设计
4.1设计模块化系统的目的
4.1.1代码的解耦合和复用
4.1.2互不影响的模块
4.1.3规范和模块的扩展
4.1.4依赖的权限控制
4.2上下文的注入实现
4.2.1上下文概述
4.2.2模块和文件的上下文
4.2.3全局变量和方法上下文的注入
4.3上下文的代理
4.3.1上下文代理的原理
4.3.2上下文和App绑定原理
4.3.3上下文代理的具体实现
4.4重新设计模块化系统的实现
4.4.1重写require功能
4.4.2权限系统判断的实现
4.4.3外部文件引用的剥离
4.5import实现原理
4.5.1import和require的关系
4.5.2import的转化实现
4.5.3执行import的实现
4.6代码文件加载实现
4.6.1VM递归加载实现
4.6.2文件相互引用加载实现
4.6.3高级语法支持
第5章 Serverless架构的函数设计
5.1Serverless架构采用函数的原因
5.1.1什么是函数
5.1.2降低编写门槛的设计
5.1.3接口职责的设计
5.1.4相对灵活的服务
5.2Serverless架构函数功能概述
5.2.1主流Serverless架构的函数式设计问题
5.2.2数据返回和异常处理设计概述
5.2.3分布式路由设计概述
5.2.4代码黑盒设计
5.3函数的实例化实现
5.3.1函数调用过程实现
5.3.2线程实例化服务类实现
5.3.3线程监听调用事件实现
5.4函数参数注入实现
5.4.1线程的参数序列化
5.4.2线程中重新实例化参数对象
5.4.3参数原值通信
5.5函数数据返回和异常设计实现
5.5.1数据返回的实现
5.5.2二进制数据和文件流的返回实现
5.5.3异常在线程中的实例化
5.5.4异常中间件捕捉实现
5.6跨App函数调用设计与实现
5.6.1RPC函数调用链路概述
5.6.2RPC函数实现
5.7分布式路由设计实现
5.7.1路由装饰器实现
5.7.2线程的路由通信
5.7.3动态路由挂载实现
第6章 Serverless结构设计
6.1Serverless架构结构概述
6.1.1项目结构设计概述
6.1.2App结构设计概述
6.1.3代码结构设计概述
6.2项目结构设计
6.2.1配置文件的设计与实现
6.2.2项目的编译构建设计
6.2.3项目依赖结构设计
6.3App结构设计
6.3.1App入口文件结构设计
6.3.2App隔离结构设计
6.3.3App运行与管理结构设计
6.4代码结构设计
6.4.1框架引用设计
6.4.2依赖引用设计
6.4.3服务类和函数设计
6.4.4代码透出设计
6.5编译结构设计
6.5.1编译目录结构设计
6.5.2编译配置解析
6.5.3增量编译实现
第7章 Serverless架构的配置设计
7.1配置模块分类概述
7.1.1框架配置
7.1.2App配置
7.1.3部署配置
7.1.4流量配置
7.2框架配置设计
7.2.1项目基本配置设计
7.2.2异步获取配置设计
7.3App配置设计
7.3.1优选线程配置设计
7.3.2系统权限管控配置设计
7.3.3超时配置设计
7.3.4VM和资源配置设计
7.4部署配置设计
7.4.1部署版本配置设计
7.4.2部署数据地址配置设计
7.5请求流量配置设计
7.5.1域名配置实现
7.5.2分流配置实现
7.5.3路由配置实现
第8章 Serverless架构的协议设计
8.1Serverless架构的协议组成
8.1.1代码协议
8.1.2请求协议
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方法暴露协议
8.3请求协议设计
8.3.1请求方式协议
8.3.2请求分发协议
8.4应用隔离协议设计
8.4.1隔离方式协议
8.4.2影响协议
8.5通信协议设计
8.5.1调用协议
8.5.2沟通协议
8.5.3唤起协议
8.6执行协议设计
8.6.1执行入口协议
8.6.2返回值协议
8.7部署协议设计
8.7.1构建协议
8.7.2请求部署协议
8.7.3版本升级协议
8.8函数配置协议设计
8.8.1App配置协议
8.8.2分流配置协议
8.8.3部署配置协议
第9章 Serverless架构的实践
9.1部署方案
9.1.1部署依赖
9.1.2部署规模准备
9.2容器部署实现
9.2.1Dockerfile准备
9.2.2K8s接入
9.2.3弹性伸缩配置
9.3Serverless架构的实例
9.3.1Serverless架构构建App
9.3.2开发者的权限控制实例
9.3.3开发者代码引用规范实例
9.4基于Serverless架构开发
9.4.1接入数据库
9.4.2增删改查的实例
9.4.3前端页面的渲染实例
9.5用户模块的实现
9.5.1登录和注册功能实现
9.5.2Token的校验和App交互
9.6聊天系统功能实现
9.6.1实时聊天实现
9.6.2消息通知实现
9.7App上线实践
9.7.1应用发布实践
9.7.2域名的绑定实践
9.7.3分流和灰度发布实践
第10章 Serverless架构最终形态的演变
10.1Serverless架构的困境
10.1.1伴随着异常的服务
10.1.2开发和调试的相对困难
10.1.3异常无法自行处理
10.2过渡的Serverless架构方式
10.2.1高信任度的提供商
10.2.2标准化的服务设计
10.3真正的Serverless架构
10.3.1服务的非中心化
10.3.2服务的真正开源
10.3.3标准的语言设计
10.4当前互联网的瓶颈
10.4.1算力、存储和网络性能的瓶颈
10.4.2过渡的中心化
10.5发展中的机遇
10.5.1非中心化应用的爆发
10.5.2瓶颈的移除
10.5.3信任危机出现
10.6形态的演变
10.6.1代码即所有
10.6.2去中心化的到来
内容介绍
Serverless作为一种近几年流行的架构,其内部的设计相对复杂。本书尽可能使用通俗易懂的语言来帮助读者理解和掌握Serverless的开发与设计。
本书以JavaScript为主要语言进行讲解,以Node.js运行时为主要运行环境进行服务设计的讲解。本书共10章,分别为:Serverless架构的概述、Serverless的总体设计、Serverless架构的脚手架设计、Serverless架构的模块设计、Serverless架构的函数设计、Serverless 结构设计、Serverless 架构的配置设计、Serverless架构的协议设计、Serverless架构的实践以及Serverless架构最终形态的演变。内容主要涉及JavaScript语言的开发(包括前端和后端的代码和功能的实现)、数据库的开发(如MongoDB、ETCD等)、容器层面的开发(如Docker、......