一、概要
Flink 的Stateful Function 2.0 也已经出来一段时间了,不清楚它的用途适用场景。本篇会有Stateful Function的一些相关概念,搬运了多位大神文章内容。
二、Stateful Function是什么
官方定义:有状态函数是一种简化构建分布式有状态应用程序的API。
它基于具有持久状态的函数,这些函数可以动态交互,并提供强一致性保证。
看完解释之后,还是不理解这个是什么。继续看其他解释。。。
在 Kubernetes 和 FaaS 等技术的推动下,无状态计算的编排已经取得了长足进步,但是由于大多数产品主要关注的是计算,而不是状态,所以当涉及到有状态的分布式应用程序时,这些技术仍然不能很好得满足要求。此外,函数之间的交互仍然会为开发的整体易用性和分布式数据的一致性带来挑战。
Stateful Functions 是专门为突破这些限制而构建的
FaaS概念再回顾下。
什么是 Serverless/FaaS
Serverless(无服务器)这个概念存在已经很久了,最早指不需要服务器端的软件,比如纯客户端软件以及 peer-to-peer (P2P) 软件,在云时代,这个概念才表示不需要关心服务器端的相关技术,比如按量计费的 PaaS 服务(比如 FaunaDB serverless,Aurora Serverless, 对象存储等),BaaS (Backend as a Service),以及 Google App Engine 这样的托管 Application PaaS 也可包含在内。
但传统的 Application PaaS 平台,开发者对服务运行的实例还是有感的,即便是没有调用,也依然需要占用资源,并对资源付费,并不是完全的 Serverless,直到 FaaS 出现。FaaS 全称 Function-as-a-Service,可以理解成给 Function 提供运行环境和调度的服务。Function 可以理解为一个代码功能块,这个功能块具体包含多少功能,无法明确给出定义,但有一个明确的指标:冷启动时间需要在毫秒数量级。因为 FaaS 的本质上是以程序的快速启动来实现正真的按需运行,按需伸缩,以及高可用。Function 配合调度系统,就可以完全做到开发者对服务运行的实例无感,真 Serverless。
也就是说,从外延来看,Serverless 比 FaaS 的外延要广,FaaS 主要解决的是用户自定义的代码逻辑如何做到 Serverless,可以叫做 Serverless Compute,同时它也是事件驱动架构的一种,从一张图可以看出二者区别。
一定要看=> AWS 的 lambda动画
在上面动图中Function按照调用次数收费。毫秒级创建并且启动一个Function实例,运行若干秒后销毁。只有在真正运行,用到Function的时候才计费。
到这里,我们对于前面的内容做一下总结:
Stateful Function是为了解决现有的FaaS无法满足有状态计算,而做出的一款有状态的FaaS产品
那么,问题来了?Stateful Function是如何解决有状态这个问题的呢?
官方说实现的方式有点类似Actor。再一次回顾下知识点。
什么是Actor模型
Actor模型是一个概念模型,用于处理并发计算。Actors一大重要特征在于actors之间相互隔离,它们并不互相共享内存。也就是说,一个actor能维持一个私有的状态,并且这个状态不可能被另一个actor所改变。
更多Actor模型信息可以进入下面链接。
三、参考
1.Serverless/FaaS 的现状和未来
2.10分钟了解Actor模型
3.Stateful Functions 开源:集成了 Flink 和 FaaS 的流处理优点