PCon全球产品创新大会(北京站)来啦~了解最新日程 了解详情
写点什么

Stateful Functions 开源:集成了 Flink 和 FaaS 的流处理优点

  • 2019 年 11 月 05 日
  • 本文字数:2123 字

    阅读完需:约 7 分钟

Stateful Functions开源:集成了Flink和FaaS的流处理优点

近日,有状态函数(Stateful Functions ,statefun.io)宣布开源,它可以极大降低构建和编排分布式有状态应用程序的复杂性,集成了 Apache Flink 和函数即服务(Function-as-a-Service,FaaS)的流处理优点,为下一代事件驱动架构提供了强大的抽象能力。这篇博客将为开发者介绍有状态函数产生的原因、概念以及如何使用。


问题:有状态应用仍然很难

在 Kubernetes 和 FaaS 等技术的推动下,无状态计算的编排已经取得了长足进步,但是由于大多数产品主要关注的是计算,而不是状态,所以当涉及到有状态的分布式应用程序时,这些技术仍然不能很好得满足要求。此外,函数之间的交互仍然会为开发的整体易用性和分布式数据的一致性带来挑战。


Stateful Functions 是专门为突破这些限制而构建的,它让开发者能够定义松耦合、独立的函数,这些函数占用空间很小,可以在共享资源池中进行一致且可靠的交互。该框架由实现“Stateful Functions”的抽象 API(图 1)和基于 Apache Flink 用于分布式协调、通信和状态管理的运行时组成。


Stateful Functions API

该 API 基于 Stateful Functions,封装了业务逻辑的小功能片段,有点类似于actors。这些函数以虚拟实例的形态存在,虚拟实例通常是指应用程序中的每个实体(例如,每个用户都有一个虚拟实例),并且这些函数分布在碎片上,从而使应用程序具有开箱即用的水平可伸缩性。每个函数在局部变量中都有持久的用户定义状态,并且可以随意向其他函数(包括它自己)发送消息,并能保证只发送一次。


运行时(Runtime)

支持 Stateful Functions 的运行时是基于 Apache Flink 流处理的。状态保存在流处理引擎中,与计算位于同一位置,并能提供快速且一致的状态访问。状态的持久性和容错性是建立在 Flink 具有鲁棒性的分布快照模型上的。



图 1


计算状态,而不是根据状态计算

该框架不是为了替代 FaaS 或者 Serverless,相反,Stateful Functions 的目的是提供一组类似于 Serverless 计算属性的功能,但这些功能是用于解决以状态为中心的问题。


以状态为中心(State-centric)

有状态函数主要用于衡量状态和不同状态与事件之间的交互,以促进这些交互的逻辑作为计算的主要焦点。事件驱动的应用程序需要处理交互状态机并且记录上下文信息,这非常适合以状态为中心的范例。


以计算为中心(Compute-centric)

另一方面,FaaS 和 Serverless 应用程序框架主要擅长弹性扩展专用计算资源。与状态和其他函数的交互,整合的不是很好,当然这也不是它们的核心优势。拟合用例中一个很好的例子是经典的“使AWS Lambda实现镜像的伸缩”。



图 2


为了实现这一点,Stateful Functions API 下的运行时依赖于 Apache Flink 的流处理,并且扩展了其强大的状态管理容错模型。容错模型的主要优点是状态和计算共存于同一网络,这意味着不需要记录每次往返,就可从外部存储系统(如 Cassandra、DynamoDB)中获取状态,也不需要使用特定的状态管理模式来实现一致性(如事件源、CQRS)。其他优点还包括:


  • 不需要管理动态消息,也不需要维护复杂的复制或重新分区策略,因为持久性和为状态快照提供对象存储一样简单;

  • 流(快速实时)处理和批(离线)处理的高吞吐量允许开发者模糊事件驱动应用程序和通用数据处理之间的界限。


Stateful Functions 对计算和存储的划分与经典的两层架构不同,它维护了一个短暂的状态/计算层(Apache Flink)和一个简单的持久化 blob 存储层(图 2)。在编程上,持久性是基于持久化值的概念,这使得每个函数实例都能够独立维护和跟踪容错状态。


扩展流处理范围

尽管 Stateful Functions API 独立于 Flink,但运行时是在 Flink 的DataStream API之上构建的,并且使用了轻量版的过程函数(即访问状态的低级函数)来实现底层抽象。与 vanilla Flink 相比,核心优势在于函数可以任意将事件发送给其他函数,而不仅仅是 DAG 的下游。



图 3


Stateful Functions 应用程序通常是模块化的,包含了多个函数包,这些函数包可以一致且可靠地交互,并复用到一个 Flink 应用程序上(图 3)。这使得许多小工作可以共享相同的资源池,并根据需要加以利用,而无需预订高峰时可能需要的资源。在任何时候,绝大多数虚拟实例都是空闲的,不会消耗任何计算资源。


结束语

如果开发者对这个项目感兴趣,可以进行尝试,建议开始前先查阅文档并遵从介绍演练,从简单的有状态的“Hello World!”(图 4)到更复杂的拼车应用程序。如果发现了 bug 或有其他改进想法,建议通过GitHub提交问题或打开 pull 请求。任何时候,开发者都可以用 #statefun 标签向项目创建者询问堆栈溢出问题。



图 4


Stateful Functions 是一项正在进行中的工作,未来将持续改进来建立和扩大价值,例如支持非 JVM 语言、细粒度的可观察性和更严格的恢复时间。对运行时和操作进行增强的可能性也会随着 Apache Flink 的发展而完善。该项目创建者的目标是为 Apache 软件基金会(Apache Software Foundation)贡献 Stateful Functions,并使其成为 Apache Flink 的一部分,在一个开放的社区中发展,与开发者密切合作,解决真实的问题,这是学习和成长的最佳方式,然而是否接受这个项目最终取决于 Flink 社区。


原文链接:


https://www.ververica.com/blog/announcing-stateful-functions-distributed-state-uncomplicated


2019 年 11 月 05 日 09:003872

评论

发布
暂无评论
发现更多内容

字节面试坎坷之路,第一次二面凉了!捞起来之后一面就凉了;我太难了呀!

Java架构之路

Java 程序员 架构 面试 编程语言

LeetCode题解:剑指 Offer 40. 最小的k个数,sort,JavaScript,详细注释

Lee Chen

算法 大前端 LeetCode

ARTS打卡 第28周

引花眠

微服务 ARTS 打卡计划 springboot

阿里“云钉一体”加速整合 低代码开发平台“钉钉宜搭”发布

人称T客

大佬带你看源码!阿里内部Android笔记火爆IT圈,3面直接拿到offer

欢喜学安卓

android 程序员 面试 移动开发

利用文字技术帮助选购商品,慧眼“识”物的人都这样做……

华为云开发者社区

文字识别 智能 识别

3D 可视化突发公共卫生事件 ,防护效率高达90%

一只数据鲸鱼

疫情 物联网 数据可视化 数据监测 3D可视化

Java程序员晋升之路:“Java高级核心知识全面解析”

Java架构之路

Java 程序员 架构 面试 编程语言

第八课性能优化作业-判断合并链表

Geek_michael

极客大学架构师训练营

甲方日常 75

句子

工作 随笔杂谈 日常

ModelArts黑科技揭秘|弹性训练,让训练资源张弛有度

华为云开发者社区

学习 华为云

CEG挖矿系统APP开发|CEG挖矿软件开发

系统开发

这份阿里P8级别内部疯传的“Linux私房菜”让你一次吃个饱

Java架构之路

Java 程序员 架构 面试 编程语言

程序员开发指南!1-3年的Android开发工程师看过来,经典好文

欢喜学安卓

android 程序员 面试 移动开发

软件测试所需要掌握的技能

测试人生路

软件测试

Alibaba面试官:“这该死的程序员,知识竟如此渊博!”

Java架构之路

Java 程序员 架构 面试 编程语言

ZooX首发双向电动无人车,会成为自动驾驶出行的主流吗?

脑极体

大作业一

黄立

如何通过一个SDK轻松搞定人脸识别,拯救初入职场的程序猿

华为云开发者社区

人脸识别 智能 识别

智慧平安小区整体解决方案,智慧社区管控系统开发

13530558032

区块链食品溯源系统开发,农产品溯源小程序搭建

13530558032

SpringBoot系列(7)- 自动装配

引花眠

springboot

圣诞狂欢,保险师APP赋能精细、个性化的运营服务

DT极客

窝家恶补三月,字节跳动三面,终于喜提offer!分享面试感受

Java架构之路

Java 程序员 架构 面试 编程语言

业务架构设计迭代演进思路

程序员架构进阶

架构 中台 业务架构

工具词典:精力管理

lidaobing

精力管理 张遇升 28天写作

为新基建按下加速键:从openEuler看中国操作系统的产业生态未来

脑极体

(经验分享)作为一名普通本科计算机专业学生,我大学四年到底走了多少弯路

Java鱼仔

Java 程序员 面试 大学生

浅谈如何做客户端性能测试

行者AI

性能测试

阿里P8大牛手把手教你!高级Android晋升之View渲染机制,先收藏了

欢喜学安卓

android 程序员 面试 移动开发

腾讯大牛亲自带你学:Java安全weblogic T3协议漏洞!

比伯

Java 编程 架构 面试 计算机

TDSQL前沿技术进展和趋势——数据异常基础理论研究

TDSQL前沿技术进展和趋势——数据异常基础理论研究

Stateful Functions开源:集成了Flink和FaaS的流处理优点-InfoQ