本文是 serverless 入门与实践 的第11篇
学习<华为 Serverless 核心技术与实践>, 计划: 1篇前言 + 10篇/章 + 1篇总结
有状态函数编程模型
现有Serverless开发方式中缺乏状态处理机制,而大多数应用是有状态的,华为元戎的有状态编程模型可以为开发者提供更好的开发体验。我们在本章探讨有状态函数,详细介绍有状态编程模型的设计原理和实现。
设计原理
维基百科将计算机科学中的有状态系统定义为:需要记住之前的事件或用户交互的系统
随着机器学习、大数据和各种在线应用的迅猛发展,系统状态的数量、大小和访问频度都有较高提升,用户更加需要低时延、高性能、高可靠的状态管理。
有状态函数的特征
- 程序状态由系统管理
- 状态是编程模型的核心
- 函数是处理状态的接口实现
无状态函数的问题
- 外部依赖性
- 网络开销增加
- 可用性要求高
- 编程复杂
有状态函数的优势
- 更易于理解和实现编程模型
- 数据本地化
- 更高的可用性
有状态函数编程模型的实现
- 状态和函数的关系描述
- 状态的定义和操作
- 操作 ACID: 原子性 一致性 隔离性 持久性
- 函数的定义和操作
- 通过有状态函数支持函数编排
- 函数编排实际上是对函数的执行进行状态机管理
有状态函数帮助开发者屏蔽了状态管理的复杂过程,为开发者提供了原生的单机编程体验。
- 对状态的操作如同操作变量一样简单。
- 对同一个状态的并发操作保证一致性,不同状态的操作可以并行执行。
- 系统对开发者屏蔽了容器崩溃异常
函数编排应当遵循以下原则
- 函数应当被视为“黑盒”。
- 替换原则,即编排也是一个函数。
- 编排应该避免双花问题,即重复计费。
使用有状态函数实现6种通用应用模式
- 编排函数相关接口
- 通用模式: 函数链
- 聚合器
- 异步HTTP API
- 监视
- 人机交互
有状态函数的并发一致性模型
- 并发访问不同状态实例
- 相同状态实例递归调用
有状态函数应用场景
- 微服务的应用场景
- 现有Serverless平台的应用场景
- 新一代Serverless的应用场景
- 机器学习中的迭代计算场景
- 大数据计算场景
- 实时交互型场景
有状态函数的使用原则
- 以数据为中心原则
- 状态选取原则
- 按需演进原则