服务
关于
CloudProse博客
Think FaaS播客

状态状态-Think FaaS播客

您'经常会听到FaaS功能是无状态的,但是,如果您不打算使用FaaS功能,可能会有些急事't aware of them.
福雷斯特Brazeal Trek10 191210 171202
阿甘(Forrest Brazeal) | 2018年2月14日

2018年2月14日,星期三

在Google Play上订阅 订阅苹果播客

成绩单

Howdy,我是Trek10的Jared Short,这是“ Think FaaS”,在这里我们比运行AWS Lambda函数所需的时间更少,了解了无服务器计算的世界。因此,请紧紧等待五分钟-是时候开始思考FaaS了。

各位听众,我们的州是高度一致的!

当我们谈论无服务器计算中的状态时,我们需要考虑鲍勃·罗斯(Bob Ross)的两个架构问题。功能中的状态和数据存储中的状态。

您经常会听到FaaS“功能”是无状态的。尽管这确实是对的,但如果您不了解这些警告,可能会有些急事,使您陷入麻烦。

首先要意识到的是,几乎所有提供商都在后台使用容器来为其FaaS产品提供动力。

当平台需要处理请求时,他们会将请求穿梭到运行您的代码的容器中。您不在乎这种情况发生的地点或方式。但是,你呢 关心,就是在大多数平台上,一旦将包含您代码的容器旋转起来满足特定类型的请求,它就可以满足 或者更多 要求。这被称为“暖容器”,如果必须由新启动的容器来处理请求,我们将其称为“冷启动”(在此并不奇怪)。虽然性能肯定会受到影响,但是我们今天关心的是状态如何受到影响。

On a cold start on various FaaS providers, you typically get a clean slate. Some shared /tmp scratch space, clean memory, etc. Great! But where we can get in to trouble (and also do some neat tricks), is that state can persist across invocations of the function. Files that you drop in the scratch space, or variables that you hoist outside the main event loop in memory, will be accessible to by the second, third, and forth runs and so on.

这怎么可能不好呢?

例如,您可能正在暂存空间中进行图像处理。在测试过程中,没有出现问题,但是在大规模生产中,意外的结果是,临时空间被完全填满并产生了产品功能。如果您认为每次调用都清除了数组或列表,也可能会意外地在主事件循环之外提升一些变量,并开始吞噬内存或计算不正确的事情。

并不是所有的事情都不好!

如果您知道警告,则可以按照自己的意愿进行调整。暂存空间可用于将频繁访问的s3文件或索引存储在数据管道中,而不是每次都从s3中获取它们。主事件循环外部的缓存变量可用于初始化环境,解密内存中的变量以及缓存DynamoDB或其他数据存储调用。就像任何其他分布式系统一样,在任何可以安全,安全地减少功能外部请求的地方,都可以缩短功能响应时间,缩短执行时间(并节省成本!记住,时间就是金钱),并减少这些服务的负载。

永远记住,您绝对不能指望可靠地存在任何类型的缓存或其他技巧。旁注,一些FaaS提供商也开始提供一种更自以为是的方式来处理其产品中的持久性和状态,例如 Azure的持久功能.

那么,数据存储又如何呢?

数据存储是一个 巨大 主题,甚至整个播客,甚至可以集中讨论无服务器环境中数据存储中的内容。

1号,即使负载很大,也可以轻松扩展。

如果您的数据存储无法扩展以处理您的应用程序可以处理的代码,那么拥有一个可靠的FaaS平台来运行代码有什么好处?传统的关系数据库在这里很难卖,现在并不是说你 不能 做到,这只是挑战。您最好准备好管理集群,只读副本,分片,连接池……我宁可不要!您所寻找的是考虑到突发负载而设计的事物,以及服务器模型本身的完整抽象。像 DynamoDB, 动物数据库 ,以及即将推出的 无服务器的Amazon Aurora 接近无服务器方式。

2号,直接支付您的使用费。

现在,显然这是FaaS提供商的核心租户,但是为什么您的数据存储区应该有所不同?我建议不应该这样。您在所有层级的无服务器基础架构成本应与使用情况大致成线性比例。您不希望为关系数据库上的一堆只读副本容量付费而花钱,您需要知道是否将流量扔到数据存储上,要花费一定数量的现金才能达到高峰(现在的故事另一个时间实际上是成本控制和监视这些峰值。通常的怀疑者都满足了此需求,DynamoDB和FaunaDB再次成为不错的选择。

第三,复制和位置

对于本播客,我们已经开始有点杂草,但是当您深入探讨播客时,了解数据如何复制(跨可用区和区域)很重要。您的API是区域性的主动/主动还是主动/被动?您如何确保数据的完整性?您需要低延迟访问的数据是否脱离了您的功能?简而言之,请确保您的数据存储提供与您的可用性模型匹配的复制。最终跨区域的一致性以及对本地区域的低延迟一致性读取在许多情况下都可以很好地发挥作用。

时间到了,国家的状态保持高度一致,甚至更好的是最终保持一致,这就是我的意思!您可以关注 @ Trek10inc 还是我自己 @shortjared,在Twitter上。我希望您下次能和我一起参加另一集“ Think FaaS”。

作者
福雷斯特Brazeal Trek10 191210 171202
阿甘(Forrest Brazeal)