通过 Serverless 架构构建更好的软件
我们软件工具行业为开发者提供的支持还很不到位,无法帮助他们构建更好的软件。
尽管在过去 30 年中,我们开发软件的方式已经发生了巨大变化。就可用的技术和工具而言,我们确实已经取得了巨大进步。
但这些发展对开发者的生产效率实际上有什么作用呢?
使构建软件变得更容易了吗?
更便宜了吗?
更迅速了吗?
在过去 6 年的职业生涯中,我一直在尝试构建能提高开发者生产效率的工具(先是在一家初创公司,后来在 CircleCI,如今在 Serverless)。在寻找这些问题答案的过程中,我发现答案基本上是 否定 的。
虽然既有的一些工具确实有助于我们开发更强大的软件,但它们只是在渐进式地提高生产效率。作为一个行业,我们仍然面临着同样的基本问题:软件开发极其困难,成本高昂。
云服务即是明证
一个典型的例子就是「云」。「云」的一个重要特点是让其他人管理我们的服务器,而让开发人员能够更加专注于代码。
这是一个非常好的想法。正是由于该价值主张,过去十年间涌现了大量的云服务,而 Amazon 的市值也已达到 1.19 万亿美元(截至 2020.04)。
然而,尽管云服务将软件开发人员从处理物理服务器的工作中解放了出来,却没有消除处理服务器中令人头疼的许多根本因素,例如预配、缩放、维护和调试等。
对于我们这个行业(包括我自己)所创造的许多技术,同样如此。
虽然 CI/CD 平台有助于简化软件的测试和部署(尤其是对于团队协作的情况),但是它们仍然需要编写测试、配置环境以及处理出错的生成容器。GitHub 为我们提供了更好的软件协作开发用户体验,但它并没有从根本上消除团队在复杂代码基础上进行协作时所面临的问题。
总之,我们行业取得的大多数进步都是渐进式的。 我们未能显著地让软件开发变得更容易、更便宜和更迅速,而这是我们希望实现的最终状态。
构建更优软件的途径
答案很简单,即 Serverless(无服务器);或者更确切地说,在 Serverless 技术的稳健性方面继续投入。
Serverless 是在应用开发过程中尽可能将底层结构抽象出来,当前主要的体现形式是云函数 等函数即服务 (FaaS) 产品/服务。
这些产品/服务以及更广泛的 Serverless 服务非常有趣,因为它们能显著地提高生产效率。
也就是,使创建高度自定义式工具的能力大众化、通过代码复用消除工作冗余、使数据访问更加容易。
简化工具定制
就软件开发工具而言,我们和任何潜在的 SaaS 客户都面临着相同的问题:自行构建还是购买?
投资构建完全满足我们需求的工具,然后再花大量精力进行维护?或者采用第三方产品/服务,但不可避免地会包含一些并非我们期望的附带工作流?这两种办法都不理想;两种方案都会导致脆弱、昂贵且易出错的问题,并且不能帮助我们高效地开发高质量软件。
最理想的情况是,我们能够采用一种有强大开放源代码社区或者商业公司提供支持的工具,而且这种工具可以轻松实现高度自定义。
该答案似乎显而易见,但我们现阶段仍然无法做到。不断增长的开放式 API 虽然打下了一定的基础,但距轻松自定义大多数工具还非常遥远。
不过,Serverless 具有让这种理想状态变成现实的潜力。
如果您的源管理、CI/CD 和项目管理系统全都能统一地公开事件,使您能够通过部署到任何所选平台的 Serverless 函数轻松处理这些事件,那真的是一种非常理想的情况。
虽然距离这一目标还很遥远,但 Auth0 Extend 和 CNCF CloudEvents 等项目正在朝着这个目标努力。
简化代码复用
作为开发人员,最令人沮丧的事莫过于日复一日地编写重复代码。
要是我们能够重复利用一条条代码来构建不同的应用,然后将编码的时间集中到可以带来独特价值的业务逻辑上,那该有多好啊!
如今,Serverless 架构本质上是微服务架构:具有常见功能的函数组。这些函数组一起部署,并共享 API 网关等基础结构资源。
我相信,随着 Serverless 工具的发展,这些服务将变得更小更具体,并且涵盖更广泛的用例(例如,一个函数可用于部署和配置特定基础结构,或执行负载测试)。随着这些服务变得更小更具体,除原始开发人员以外的其他人也可以更容易地共享、配置和使用这些服务。
这最终将使我们步入一个新的时代:那时,公开和在组织内部私下共享、部署和复用微服务将变得十分容易。
这会大大降低我们重复工作的时间,使我们能够更专注于独特的功能和业务价值。
当前已有一些项目向这方面努力,例如 Standard Lib。未来这方面的发展值得期待!
简化数据访问
如今,所有数字业务都会产生和收集海量的数据。这些数据是非常宝贵的资源。尤其值得注意的是,我们可以使用这些数据来为用户构建更强大的功能。
这种海量数据伴随着一个问题:这些数据以各种不同的格式存放在各种不同的地方,难以得到利用。
事件驱动架构(Serverless 架构通常构建于该类架构之上)能够以事件形式公开所有数据。而这些事件可以直接通过 Serverless 函数得到利用。
尽管这种通用架构模式还不成熟,但如果所有数据都能以事件的形式存在,且能够通过托管在任意位置的函数进行处理,我们就能够解决如今面临的数据可移植性和访问方面的诸多挑战。
最终,我们的开发效率将显著提高。
总结
对于开发人员来说,当下是一个激动人心的时代。我们很有可能会见证到我们目前可用的工具实现前所未有的根本改进。
我们每个人都有责任继续追求并推动这一改变。
传送门:
- GitHub: github.com/serverless
- 官网:serverless.com
欢迎访问:Serverless 中文网,您可以在 最佳实践 里体验更多关于 Serverless 应用的开发!