Serverless世界中,我们仍然需要状态

2019 年 5 月 05 日

Serverless世界中,我们仍然需要状态

如今,企业的体系架构朝着 Serverless 架构迈进了一大步。在一篇博文中,Jonas Bonér认为,尽管他坚信 Serverless 的趋势,但编程的模式不应只关注无状态函数,这会限制能支持的用户场景的范围。


Bonér 是Akka的发明者和Lightbend的创始人,他指出,根据他的经验,函数即服务(FaaS)经常与 Serverless 混淆,并指出 Serverless 完全是关于用户体验(UX)的,而 FaaS 只是众多实现中的第一个。


通过明确定义的输入和输出,函数可以组成更大的函数。Bonér 用乐高来做了个比较,函数就像乐高积木,可以组成更大的积木。但他指出,尽管函数非常适合处理数据,但是在超出预期范围的情况下,它们就受到严重的约束和限制。


限制之一,FaaS 的函数的特性是,启动快速,无状态,生命周期短暂。从性能和延迟的角度来看,丢失计算上下文、不得不始终在后端存储中加载和保存状态的成本太高了。对 Bonér 来说另一个限制是,它们缺乏直接的寻址能力,因此所有通信都必须通过发布订阅来完成,这意味着所有数据都必须通过缓慢、昂贵的存储机制来处理。这可能适用于事件驱动型的用户场景,但对于通用分布式计算问题来说,延迟太高了。


虽然函数是一个很好的工具,但 Bonér 指出,如果想要 Serverless 满足在无操作(ops-less)世界中的期望和愿景,同时仍允许我们构建以数据为中心的实时应用程序,它必须能处理分布式系统中最难的问题 – 状态管理。这也是他认为 Serverless 最有趣的机会。对他来说,Serverless 过于关注基础设施的自动化,因而忽略了对状态的处理。状态被移出了应用层,但随着应用程序变得越来越以数据为中心以及数据为驱动,这并不是可行的一个解决方案。对于许多应用程序来说,存储请求的数据的每个往返太昂贵了。它们需要以近乎实时的方式连续处理数据,从数据流中提取知识。这是从“静止数据”到“动态数据”的转变,导致了许多公司转向采用基于分布式流处理和基于事件驱动微服务的体系架构。


对于 Bonér 来说,Serverless 的 1.0 版本都在谈无状态的函数。2.0 必须关注状态,这样我们就可以构建分布式的通用应用程序,同时从 Serverless 的优势中获益。端到端的正确性、一致性和安全性对于不同的服务意味着不同的东西,还取决于不同的使用场景。因此,保证系统的稳定性是应用程序的责任,下一代 Serverless 实现必须支持最重要的问题 – 如何在云中可靠、大规模地管理数据。


在 2018 年纽约的Serverless会议上,来自ConfluentGwen Shapira讨论了在无状态的基础设施上,构建数据处理架构时所面临的挑战。她指出,我们想要做的很多事情都需要考虑状态。因此,在 Serverless 的世界中,状态的管理仍旧很重要。因为函数的扩展性非常好,所以我们需要运行非常快的数据库,它的扩展性要和使用这些存储的函数一样好,还要有相同的付费模式。但是,在寻找替代方案时,她没有找到任何数据库具备所期望的自动扩展功能,也没有一个会使用按需付费(pay-for-use)的模式。她还指出,FaaS 模型类似流处理模型以及事件驱动设计,这意味着可以在这些模型中相互利用各自的模式,而且我们对它们很多的使用经验都是相关的。她建议我们更专注于应用程序的实际需求,充分利用更能准确反映真实世界的事件,而不是只关注所采取的函数。


MikeRoberts,来自Symphonia,在讨论无服务器架构的早期博客文章中指出,FaaS 的函数受限于本地的状态。即使状态存在,也不能保证它在多个调用之间、或在同一函数的不同调用之间的持久性。因此,它们通常被描述为无状态的。但对于他来说,更准确的说法是,任何必须持久化的状态都必须存在于函数的外部。可以选择使用一个快速的 NoSQL 数据库、一个对象或文件的存储,但他指出,它们会比本地内存或服务器上的持久层要慢得多。他还指出,不同方案的选择会对应用程序的体系架构产生很大的影响。


查看原文链接In a Serverless World, We Still Need State


2019 年 5 月 05 日 08:004443
用户头像

发布了 40 篇内容, 共 28.1 次阅读, 收获喜欢 117 次。

关注

评论

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

格一格你的情欲念

王进行

机器学习基石第一节 学习笔记

半亩房顶

Machine Learning

机器学习基石第二节 学习笔记

半亩房顶

Machine Learning

如何进行需求梳理及埋点方案设计

易观大数据

密码朋克的社会实验(三):比特币发明了什么

腾讯安全云鼎实验室

比特币 区块链 密码学

一年多远程工作经验,说说真实的感受

盛安德软件

秒杀系统

俊俊哥

秒杀

Go: 并发访问 Map — Part III

陈思敏捷

go golang 并发 map sync

别在网上乱找代码了,找了一段代码突然爆了!!!

导导

Java

ARTS打卡Week 09

teoking

新生必备清单:不想成为虚度青春的“小透明”,手机应该怎样选?

脑极体

Java七种排序算法以及实现

狸猫换太子

Java 排序算法 实现

信创舆情一线--抖音、微信读书被判侵害用户个人信息权益

统小信uos

【写作群星榜】7.24~7.31 写作平台优秀作者 & 文章排名

InfoQ写作平台

写作平台 排行榜

零代码可视化开发平台iVX是什么?

代码制造者

编程语言 可视化 零代码 iVX

我收集的 3 个企业经营“失败”案例

泰稳@极客邦科技

Android Development最佳实践

teoking

职场求生攻略答疑篇之 2 —— 无所适从的向上沟通

臧萌

【面试必问】Spring中的事务管理详解

只喝纯牛奶

JVM参数手册

Rayjun

JVM GC

机器学习基石第四节 学习笔记

半亩房顶

Machine Learning

数据结构与算法之排序

shirley

排序算法

JVM系列:通过一个例子分析JIT的汇编代码

简爱W

这16道Redis最常见面试问题,你能回答上来几个?

火羊哥

Java

dubbo-go 中使用 sentinel

apache/dubbo-go

golang dubbo sentinel

30岁的二三事

大唐小生

总结 个人感悟

架构师训练营第九周学习总结

张明森

webRTC框架下的视频主动丢帧

fumingwang

音视频 WebRTC

机器学习基石第三节 学习笔记

半亩房顶

Machine Learning

机器学习基石第五节 学习笔记

半亩房顶

Machine Learning

最牛逼的Java框架,没有之一

我是苞谷

Serverless世界中,我们仍然需要状态-InfoQ