《Serverless架构:从原理、设计到项目实战》精读笔记

写在前面

  • 书籍介绍:本书通过对Serverless基础的介绍、对相关规范和标准的描述,对架构、应用的讲解与阐述,为读者提供相对客观和完整的学习资料及文档资料;通过网站后端、监控告警、大数据与人工智能、物联网与高可用服务等不同场景的应用实例,以及简单博客系统的建设与基于人工智能的相册小程序系统的建设等完整项目,为读者提供更多的灵感与启发。
  • 我的简评:目前Serverless是很火的一个东西,已经有不少公司尝试使用serverless来提升研发效能,相应的,它涉及的知识点比较多,建议研究一下。
  • !!福利:文末有pdf书籍、笔记思维导图、随书代码打包下载地址哦

1. 第1章 初识Serverless

1.1.什么是Serverless

    1. Serverless是一种构建和管理基于微服务的架构的完整流程,允许你在服务部署级别而不是在服务器部署级别来管理你的应用部署。
    1. 与传统架构的不同之处在于,它完全由第三方管理,由事件触发,存在于无状态(Stateless),暂存(可能只存在于一次调用的过程中)在计算容器内。
    1. 云计算的发展历程从 IaaS、PaaS、SaaS 到最新的 BaaS、FasS等。
    1. FaaS和PaaS在运维方面最大的差异在于缩放能力。
    1. Serverless的目的是让使用者只关注自己的业务逻辑,所以部分安全问题、资源调度问题(例如用户量暴增时如何实现自动扩容等)交给云厂商负责。

1.2.优势与劣势

    1. Serverless架构的优势主要包括降低运营成本和开发成本,拥有优秀的扩展能力、更简单的管理,以及符合“绿色”计算的思想。
    1. Serverless架构难以进行状态管理,冷启动带来的延迟问题, Serverless架构项目本地测试难度相对较大,还有语言版本落后、完全依赖于第三方服务等缺点。
    1. Serverless的技术特点就是按需加载、事件驱动、状态非本地持久化、非会话保持、自动伸缩和应用函数化。
    1. Serverless架构优势就是节约成本(包括时间成本、人力成本等)、减少运维需求、缩短迭代周期。
    1. Serverless架构也有与云厂商高度耦合、难以解绑,冷启动问题严峻,函数编排较困难等劣势。

1.3.影响力和价值

    1. 2019年,Serverless被Gartner称为最有潜力的云计算技术,是必然的发展趋势。
    1. 价值在于,它对成本的降低,在于它对传统分工的改变,也在于它通过为开发者创造一个更加人性化和美好的开发环境和运维条件,进而节约精力、节约人力、节约成本,让开发者可以更加关注自身代码、自身业务、自身逻辑和自身产品。
    1. 影响力在于,它正在不断地、迅速地融入“云计算”的大家庭,正在为“理想中的云计算”贡献自身力量,为整个云计算的发展贡献巨大的力量。

1.4.技术难点与挑战

    1. 冷启动问题确实存在,而且不同厂商、不同语言、不同测试方法得到的冷启动数据都是有差异的。
    1. 目前函数冷启动产生的主要原因是容器启动、代码载入及网络等周边资源准备得从零开始,占用了大量的时间。
    1. 从复用层面来说,对容器的复用是相对来说比较重要的
      1- 4. 从预热层面来说,解决冷启动问题或者说降低冷启动率,可以从容器预创建、热点代码缓存、网络优化、预启动等几个维度进行探索及优化。

1.5.典型应用场景

    1. 视频转码服务
    1. 数据ETL处理服务
    1. 网站(服务)后端
    1. 人工智能推理预测
    1. 物联网相关应用

1.6.发展与展望

    1. Google Cloud Functions、Microsoft Azure Functions、Tencent Cloud Serverless Cloud Function、IBM OpenWhisk、Fission和Kubeless等各种开源平台都提供了类似的服务。

2. 第2章 Serverless入门

2.1.Serverless基础

    1. Serverless 是包括两种角色的:一种角色是 Developer,即开发人员,开发人员在指定平台编写代码并且部署执行,这里的指定平台就是Serverless平台;另一种角色则是Provider,即供应商,他们为外部或内部客户部署Serverless平台。
    1. 可以优先考虑采用Serverless架构的情况:1. 异步、并发、易于并行化为独立的工作单元;2. 不经常或有零星的需求,在扩展要求方面存在巨大的、不可预测的差异;3. 无状态、短暂的、对瞬间冷启动时间没有过多需求;4. 在业务需求变更方面具有高度动态性,需要加快开发的速度;5. 执行逻辑以响应数据库更改(Insert、Update、Delete);6. 流处理(分析或修改动态数据);7. 管理单次提取、转换和加载的作业,这些作业需要在短时间内进行大量处理(ETL);8. 通过聊天机器人界面提供认知计算(异步,但有关联);9. 调度执行时间很短的任务,例如Cron或批处理调用等;10. 服务于机器学习和 AI 模型(检索一个或多个数据元素,如表格、NLP 或图像,并与预先学习的数据模型匹配,以识别文本、面孔等);11. 持续集成Pipeline,按需为构建作业提供资源,而不是保留构建从属主机池等待作业分派。
    1. 典型应用实例包括多媒体处理、数据库操作、物联网传感器输入消息、大规模流处理及聊天机器人、批处理作业、HTTP Restful API、Web应用程序、移动后端等。

2.2.Serverless架构规范

  • 1.处理模型:我们可以将FaaS解决方案概括为包括Event Sources、Function Instance、FaaS Controller及平台服务等元素
  • 2.函数相关规范:1. 函数定义;2. 元数据详细信息;3. 数据绑定;4. 函数约束;5. 函数调用类型
  • 3.函数生命周期:1. 函数部署流程;2. 函数操作;3. 函数版本控制和别名;4. 事件源;5. 函数关联的事件源;6. 函数代码;7. 函数的输入与输出
  • 4.工作流程

2.3.事件与规范

  • 1.相关术语:1. Occurrence:是指软件系统运行期间捕获的描述信息,是一个状态或事实的记录;2. Event:是表示事件及其上下文的数据记录;3. Producer:创建描述CloudEvents数据结构的一个具体的事例、过程等,可以理解为生产者;4. Source:是指 Occurrence 发生的上下文;5. Consumer:是事件的接收者并对事件采取行动;6. Intermediary:接收了包含将事件转发给下一个接收者的提示,下一个接收者可能是另一个中间人或Consumer;7. Context:表示上下文,元数据将封装在 Context 的属性中;8. Data:关于Occurrence的特定领域的信息;9. Message:事件通过Message从数据源传输到目标地址;10. Protocol:消息可以通过各种行业标准协议、开源协议或平台/供应商特定协议进行传递
  • 2.上下文属性

2.4.开源项目与技术

    1. OpenWhisk项目:1. Apache OpenWhisk是一个开源FaaS平台,是由IBM和Adobe驱动的开源项目,可以部署在云或数据中心内;2. OpenWhisk 是一个健壮的、可扩展的平台,支持数千并发触发器和调用;3. 主要特点:部署灵活、多种编程语言、与多种流行服务集成、拓展性;4. 核心组件包括Nginx、Controller、CouchDB、Consul、Kafka、Invoker等组件。
    1. Fission项目:1. Fission是一款基于Kubernetes(K8S)的FaaS框架。通过Fission可以轻而易举地将函数发布成HTTP服务;2. 在平台选择上,目前主流的开源FaaS平台基本都是基于Kubernetes和Docker来实现的,但是相对来说更倾向于Kubernetes;3. Fission包含Function、Environment、Trigger三个核心概念。
    1. Kubeless项目:1. Kubeless是一个相对成熟的项目

2.5.工业化产品

  • 1.AWS Lambda:1. AWS团队的FaaS产品叫作Lambda, Lambda是一项Severless计算服务,可运行代码来响应事件,并为用户自动管理底层计算资源;2. AWS Lambda的执行机制是Runtime,目前支持Go、.Net、Node.js、Python、Ruby等在内的多种编程语言,相对其他工业化Serverless平台,可以说Lambda支持的语言是最多的,同时支持自定义语言,相对其他平台来说也是非常灵活的;3. 在触发器层面,Lambda拥有HTTP触发器、定时触发器、API网关、消息队列、对象存储、日志服务等数十种触发器
  • 2.Google Cloud Function:1. 目前Google Cloud Function采用Runtime作为执行机制,支持 Node.js、Java 及 Python 等语言。
  • 3.Azure Functions:1. Azure Functions是在云中轻松运行小段代码或“函数”的一个解决方案;2. Azure Functions是一个理想的解决方案,用于处理数据、集成系统、使用物联网(IoT),以及生成简单的API和微服务
  • 4.腾讯云SCF:1. 云函数,即SCF(Serverless Cloud Function)是腾讯云为企业和开发者提供的Serverless执行环境,帮助用户在无须购买和管理服务器的情况下运行代码;2. 目前云函数支持以下触发器:对象存储COS、 定时器、手动触发、 CMQ主题队列触发、CKafka消息队列触发、 API网关触发

2.6.开发运维工具

  • 1.CLI命令行工具:1. Serverless Framework:一款开源的命令行工具;2. Create、Deploy、Invoke、Remove是通用指令,Plugin及相关的List、Search、Install、Uninstall为插件通用指令;3. SCF CLI是腾讯云无服务器云函数SCF(Serverless Cloud Function)产品的命令行工具
  • 2.插件:1. 为了更好地帮助用户编写代码,以及在线调试、部署函数,很多厂商都基于不同的编辑器开发了插件;2. AWS提供Visual Studio Code、Eclipse插件

3. 第3章 Web与监控告警场景实践

  • 3.1.运维、监控与告警:1.网站状态监控告警;2.服务状态监控告警;
  • 3.2.Web后端与应用服务器: 1.上传图片加水印; 2.用IP地址查天气并在小程序中应用;3.简易用户反馈功能与快应用实践

4. 第4章 大数据与人工智能场景实践

  • 4.1.大数据技术之MapReduce的简单实现
  • 4.2.人工智能领域的实践: 1.自然语言处理为你的网站赋能;2.智能客服与微信小程序;3.简单的车牌识别系统; 4.视觉:对象检测系统

5. 第5章 物联网和其他场景实践

  • 5.1.物联网相关-定制智能音箱小工具
  • 5.2.其他场景实践:1.OJ判题机/小程序在线编程系统实现;2.Serverless与高可用服务-使用云函数实现双机存储;3.Serverless与高可用服务-基于Serverless架构的高可用模型;4.微信公众号机器人

写在后面