耐用的功能-简化后端开发(而且便宜!)

关于新的无服务器的想法。

耐用的功能-简化后端开发(而且便宜!)
扇出/扇入模式

一段时间以来,使用功能应用程序实现无服务器吸引力已经相当诱人了。 不必为24/7的基础设施付费,但是获得完全的自动缩放比例将改变游戏规则。 但是从来没有感觉到无服务器功能可以取代您的堆栈。 对于简单的Slack应用程序有好处吗? 当然。 但不是复杂的后端。 到现在。

Azure的持久功能扩展了它们已经建立的功能即服务(FaaS)平台。 最后,无服务器功能具有状态。 您可以在代码中定义工作流程,同时享受无服务器的诸多好处。

在许多方面,持久功能感觉就像无服务器功能的本意。 Azure是当前唯一提供这种工具的云提供商。 耐用的功能使您可以将功能链接在一起。 您甚至可以并行运行它们,并轻松跟踪工作流程进度。 您可以立即使用强大的错误处理和重试机制。

在构建了少量概念证明之后,我被卖了。 是时候重构某些生产应用程序了,并且从头开始了一些。 到目前为止,这是我发现的内容。

编码更多,管道更少

我已经开发了许多具有不同用例的大规模Node.js应用程序。 但是似乎无论如何,都需要某种队列处理,而这正是我大部分时间所花费的时间。

当然,那里有很棒的框架,例如KueBull ,它们为您完成了很多繁重的工作。 看看那些自述文件。 有很多设置,还有更多的工作来进行故障排除和维护。

耐用的功能-简化后端开发(而且便宜!)
这对我来说足够了。 戴蒙榄Unsplash

耐用功能在幕后使用了许多相同的机制,但是这些都是为您处理的。 起初这有点吓人。 特别是来自队列管理是我大多数问题的根源的世界。 但是Azure有一个更好的解决方案,不需要照顾每一个最后的交易。

这大大提高了产量。 我花了几天的时间自己完成了数小时的重新创建功能。 定期任务,自动重试策略和计划的作业都可以正常工作。 而且,如果您必须进行故障排除,则可以在表存储中查询所有内容。 不再需要通过Redis键进行解析。 我可以专注于业务逻辑,而不必担心预定的工作。

超级轻松托管

对于大型企业应用程序而言,托管当然是轻而易举的事。 但我看不到自己将传统托管用于个人项目了。 我不再需要为免费的托管层提供的马铃薯CPU和128字节的RAM苦苦挣扎。 或按月付费以保持演示应用程序的状态。

哎呀,如果您需要快速解决问题,甚至不需要GitHub存储库或IDE。 我已经使用Azure中的在线代码编辑器来托管几个演示功能以进行测试。 现在,我拥有自己的服务器,可以随时托管任何内容。 而且我不必付一角钱。

仍处于前沿

虽然开发耐用功能是一种很好的经验,但是仍然存在一些问题。 一切仍然很新,并且有很多活跃的开发正在进行中。

工具问题

我花了大部分时间在Mac上开发耐用功能。 不要误会我的意思,作为.NET开发人员多年,能够在任何地方构建.NET应用程序都是一种享受。 但是有些事情是行不通的。

Azurite (适用于Mac / Linux的本地Azure存储模拟器)无法正常工作。 有一个适用于Windows的不同模拟器,效果很好。 但是Azurite还不耐用。 这意味着我在进行本地开发时要付出(最少)的费用。 我必须使用Azure存储。

建议使用VS Code的功能扩展 但这也不是很持久。 它没有按照建议的方式设置项目。 而且似乎甚至不知道持久功能是一回事。 因此,我发现自己从头开始创建函数,而不是按预期使用该工具。

语言选项

耐用功能承诺对C#,JavaScript,F#,Java等的支持。 这是个好消息。 这意味着一旦您学习了“耐用功能”模式,您就不会被语言选择所束缚。

不幸的是,我发现C#是目前唯一有效的选择。 它是唯一的“通用(GA)语言-完全支持并批准用于生产用途”。 Azure Functions在GA中具有更多语言。 因此可以肯定地说持久功能支持即将到来。

耐用的功能-简化后端开发(而且便宜!)
Azure 函数支持的语言,但不持久(

JavaScript缺少使耐用功能更出色的关键实现。 仍然有很多东西行不通。 而且该文档与C#同行的文档甚至不相近。 我发现JavaScript的开发经验非常令人沮丧。 C#则相反。

我怀疑只要JavaScript成为GA,Microsoft都会解决这些问题。 但是,似乎C#始终是首选子级。

“ JavaScript支持通常依赖于我们的.NET实现。” -耐用功能首席软件工程师Chris Gillum

这并不是说它将无法使用,而是在做出语言决定时要记住的一些事情。 即使在我使用持久功能进行重构的JavaScript应用程序中,C#也是语言选择。 JS尚不存在。

大幅降低成本

通常,无服务器的最明显优势是节省成本。 您仅在使用功能时付款。 这是巨大的,特别是如果您不是Twitter且一天中的所有时间都没有大量流量。

持久功能增加了更多的成本,因为它们大量使用Azure存储来保持一切良好,持久。 不过,该成本是最小的。 比托管您自己的Redis实例来模拟功能要好得多。

我不确定Azure如何在这些事情上赚钱。 普通的Web应用程序永远不会接近拥有任何重大成本。 但是我认为这是他们让开发人员开始使用该平台的一种方式。 开始使用带有功能的CosmosDb之类的东西非常容易,而且这并不便宜。

试试看

总而言之,持久功能框架是一个了不起的工具。 它改变了我对后端开发工作方式的看法。 所以试试吧! 它是免费且易于操作的。 您甚至不需要IDE,就可以直接从Web门户构建概念证明。

From: https://hackernoon.com/durable-functions-backend-development-made-easy-and-cheap-cbab7acc7050