耐用的功能-简化后端开发(而且便宜!)
关于新的无服务器的想法。
一段时间以来,使用功能应用程序实现无服务器吸引力已经相当诱人了。 不必为24/7的基础设施付费,但是获得完全的自动缩放比例将改变游戏规则。 但是从来没有感觉到无服务器功能可以取代您的堆栈。 对于简单的Slack应用程序有好处吗? 当然。 但不是复杂的后端。 到现在。
Azure的持久功能扩展了它们已经建立的功能即服务(FaaS)平台。 最后,无服务器功能具有状态。 您可以在代码中定义工作流程,同时享受无服务器的诸多好处。
在许多方面,持久功能感觉就像无服务器功能的本意。 Azure是当前唯一提供这种工具的云提供商。 耐用的功能使您可以将功能链接在一起。 您甚至可以并行运行它们,并轻松跟踪工作流程进度。 您可以立即使用强大的错误处理和重试机制。
在构建了少量概念证明之后,我被卖了。 是时候重构某些生产应用程序了,并且从头开始了一些。 到目前为止,这是我发现的内容。
编码更多,管道更少
我已经开发了许多具有不同用例的大规模Node.js应用程序。 但是似乎无论如何,都需要某种队列处理,而这正是我大部分时间所花费的时间。
当然,那里有很棒的框架,例如Kue和Bull ,它们为您完成了很多繁重的工作。 看看那些自述文件。 有很多设置,还有更多的工作来进行故障排除和维护。
耐用功能在幕后使用了许多相同的机制,但是这些都是为您处理的。 起初这有点吓人。 特别是来自队列管理是我大多数问题的根源的世界。 但是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中具有更多语言。 因此可以肯定地说持久功能支持即将到来。
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