Serverless 助力企业在高度竞争时代赢得比赛

July 5, 2021

Serverless 是云计算的自然演变阶段,它不再专注于底层基础设施,而是关注更高层级的通用解决方案,开箱即用、弹性计算,开发者无需再为闲置资源付费,极大提升了工作效率,并降低了运维成本。如何在 Serverless 的世界中更好地开发应用程序,提升开发者体验?本文由 Serverless.com CEO、腾讯云TVP Austen Collins 在 Techo TVP 开发者峰会 ServerlessDays China 2021上的演讲《Rethinking the Developer Experience:How to develop applications in the world of Serverless》整理而成,向大家分享,本次分享完整视频请见文末。

01. Serverless Framework

我是 Austin Collins(奥斯汀 · 柯林斯),在 2015 年我创建了一个很受欢迎的开源项目:Serverless Framework,它可以帮助开发人员更好地构建无服务器架构,并且从那时起,我也创办了一家名为 Serverless Inc 的公司,我目前是首席执行官。你可以在 serverless.com 上找到我们,我们有一个出色的团队,致力于提供在公司或组织中的团队开发能力,为开发团队提供构建、管理无服务器架构所需的一切。无论是创业公司还是世界 500 强,我们都可以提供服务。

首先也是最重要的,我是一名开发者,我一生中的大部分时间都是一名开发者。自从开始我的开发之旅以来,我常试图弄清如何将更多的精力投入到开发,并且简化管理工作。因为我更喜欢功能方面的创造性工作,而运维方面的工作更为基础,对我并不是那么有吸引力。正是这种对于开发新功能的渴望,牵引着我不断地在 Serverless 领域进行创造。

接下来,简单地介绍一下 Serverless Framework,它是一个非常受欢迎并且正在快速发展的开源项目。它目前在 GitHub 的 Star 数即将到达 4 万,总下载量约 5000 万次甚至更多。我认为,取得这些成就的原因是 Serverless Framework 给用户提供了一个完全平滑的应用开发体验,大大提升了开发人员的工作效率

我从事这项工作已经有好几年了,从 2014 年 AWS 推出 Lambda 的时候,我就开始使用 Serverless 技术,因此,在当前开发人员遇到不少开发体验问题之前,我就已经简要介绍过为什么要使用 Serverless。

当然,回过头来看,我之所以致力于 Serverless 应用程序或架构开发,与当前我们所处的时代相关性更高。具体来说,我们正处于一个高度竞争的时代。在你的左手边,是一些历史上的超大规模公司,在你的右手边,是大量的初创公司。我们所有人都在同一场创新竞赛之中,如果你想要独立构建和维护软件服务的每一个模块,你就很难赢得这场竞赛,甚至连跟上对手的进度都做不到。如果你想赢得创新竞赛,你必须学会把自己的业务进行拆分和托管。这就是云,也就是 Serverless 的作用,它甚至可以做得更好

Serverless 在我看来,只是云计算的自然演变阶段。Serverless 服务不再专注于底层基础设施,而是关注更高层级的通用解决方案 — Serverless 可以提供基于 API 服务,开箱即用的企业解决方案,具有完全弹性的计算能力,开发者无需再为闲置资源付费 — 大大提升了开发人员工作效率,并且极大地降低了运维成本。这就是我们使用云服务进行业务托管的意义所在

云厂商们都已经认识到了这一点,它们也致力于提供更多不同种类的 Serverless 服务,让更多的开发者在这个基础之上,开发他们自己的业务。没有什么比这些新的 Serverless 服务更容易来构建软件并提高开发人员的工作效率了。对于开发者而言,这些基础的 Serverless 服务是有史以来最好的开发资源。因此我认为,在未来,针对每个实际的业务场景问题,我们都可以看到一个专门处理问题的 API 或服务。同时,也期待着开发人员将这些出色的服务组合在一起,制造出突破性的产品。

除此之外,如果你希望以最少的维护成本来提高开发人员的工作效率,那这就是 Serverless 为什么如此重要的另一原因。

Serverless 的架构究竟是怎样的?这是我谈到的将托管服务、Serverless 服务结合在一起的想法,我们应该尽可能在不同开发场景下使用它们,并将自定义代码集中在 FaaS 平台或容器中。并且,需要真正将应用托管到云服务平台,以提高开发人员的工作效率,并将维护成本降至最低。这就是 Serverless 架构的重要价值所在

如果你想快点行动,赢得创新竞赛,而不是陷入困境。考虑到维护复杂的基础设施、成本管理、定期更新安全机制等,这一定是目前最好的选择。现在,每一种新的架构、新的技术,没有绝对完美的。Serverless 当然也是一种新的架构,是我们还没有真正在市场上看到的东西。

一些挑战和差异也会随之而来。我把它们归类为三大领域,特别是在第一个领域,这些 Serverless 架构将由大量的云基础服务和复杂的部署单元组成

如果你正在构建项目,把你的自定义代码放在函数上,你就是在做一个微服务架构。架构里的每一个功能都对基础服务有着一定依赖,比如云数据库、消息队列、事件总线等,所有这些的结果就是你实际上在构建一个分布式系统,而分布式系统本质上更加复杂。

其次,这个分布式系统由专门在云平台运行的托管服务组成,因此,这些服务不像你习惯的那样,只需在本地笔记本电脑或本地机器上启动即可,它们只存在于云中。所以,这种开发方式破坏了很多开发人员习惯的传统工作流程。

第三,因为应用由很多云上托管服务构成,开发者可以更专注于配置的管理,有很多配置需要仔细考虑。同时,对于权限的管理也会更为复杂,因为每一个云上服务都有各自的权限控制机制,这些限制需要开发者重点关注。每个 Serverless 服务都会有自身的限制,你知道你可以用它做什么,我认为这是有帮助的,因为提前知道这些限制,远比正在构建或维护并试图自己扩展的应用时再发现它们要好得多。

我之所以提出这个问题,是因为这影响了我们对开发人员体验的思考,这些挑战从根本上挑战了我们现有的软件开发观念。作为一个开发者,知道 Serverless 的概念和价值是一个巨大的范式转变。我认为我们正处于 “青春期的早期阶段”,仍然在尝试使用过去的很多东西,尽管范式已经发生了一些变化,事情也已经在我们脚下运转了。

为了明确 Serverless 开发和传统开发相比需要改变的内容,我调研了我们的公司团队之后提供了大量的解决方案,我们将其归类为三个不同的领域,各式各样的解决方案都取得了不同程度的成功。

从本地开发体验开始,我们提供了更简洁的开发方式,比如可以直接在本地创建云上基础服务,并将它们进行编排整合,集中开发,也解决了很多传统开发时遇到的挑战。

接下来,当开发者认为本地项目已经开发完成,可以直接更新云上应用。实际上,在一个开发团队中,每个开发人员都在自己本地的机器上进行开发工作,他们都在尝试进行项目的更新。当他们准备把项目推送到生产环境时,会通过 CD 把它推到指定的 stage。

我们团队从第一天就开始致力于这个场景的优化,因为我们了解开发人员的实际开发需求,我们提供了离线开发的能力以及本地模拟云上环境的能力,开发者可以通过屏幕上这个指令本地模拟开发环境,通过 Node、Python、Ruby 等开发语言本地运行项目。

同时,也可以模拟 API 网关服务,让 API 在本地进行调用。这个功能十分成功,也是目前 Serverless Framework 最受欢迎的命令之一。

02. Serverless 开发的优缺点

这种方法的利弊是什么?

从 2015 年开始做到现在,我们学到了很多。我们已经看到从项目开发角度,开发者开始接受和使用这种方法理念,也看到不少开发团队使用这种方法理念进行团队的规模扩展。这种本地开发和运行的模式与传统开发方式一致,整个开发运行速度非常快,也广受开发人员欢迎。无论是代码修改,或者本地调用 API,开发者都可以快速获取应用的返回结果,比如运行日志、错误信息等,这个功能对于保持开发的高效率非常重要。

这些一定是本地开发的优势,但反之,这样的开发模式的不不足之处是什么?我认为,本地开发最大的问题是:对于个人的独立小项目或者分工十分精细的团队项目而言,这样的开发方式非常容易上手,但随着项目规模和复杂性,或者随着团队规模和数量增长,这种方式的局限性开始显现

第一个问题:本地的模拟环境与实际的生产环境并不完全一致,它在很多方面都是不够精确的。

具体地说,就是权限问题。只有在云上的实际开发环境下,我们才能知道项目是否拥有正确的权限配置。除非你处于云上环境,否则不会知道是否达到了某些 Serverless 服务的默认限制。因为开发与生产中使用的环境不同,当你尝试将其投入生产环境时,可能会遇到令人不快的意外。因此我个人认为,如果使用本地开发模式,你实际上并不能在只依赖本地环境完成全部开发工作,必须在云端环境继续开发工作,因为最后 20% 或某些功能必须通过部署到云上才可以完成开发。

第二个问题:目前并没有很多很好的本地开发工具,可以在本地完美模拟所有的云上服务环境。你做不到这一点。大多数人只能模拟函数服务或者 API 网关,或者其他的一些云服务,所以它是非常有限的。

另一个可能发生的情况是,Serverless 架构下的应用并不会只限于当前它们使用的云服务,往往会扩展得更多,一旦你开始为自己的应用接入更多的新服务,就会发现这些服务可能根本无法在本地进行维护或使用。在这种应用规模不断扩大的场景下,本地开发会带来大量的问题,最终导致极大的运维负担。

从我接触到的场景看,许多团队一开始怀着良好的意愿,从小规模项目扩大到复杂项目和大量的团队成员。他们的本地模拟环境极为复杂,并且需要花费大量时间来维护,太高的维护成本反而让他们失去了使用 Serverless 架构原本的优势,因为他们把所有空闲时间都花在了调研和维护本地模拟环境上

这些都是本地开发的问题所在。

那么我们该如何应对?几年前我们就已经看到了这些问题,因此我们的目标就是专注于从本地开发到云上开发的迁移。如果你仔细想想,就会觉得很有道理。你正在开发的服务只需要在云上运行,那么为什么不直接尝试在云中进行开发呢?只需要把应用的更新直接部署在云上,并且在云上使用和生产环境完全一致的服务进行开发,在理想模式下,这显然是一种更快的部署开发体验。但实际上,这种方案的部署速度往往会受到市场上的技术基础设施或架构的阻碍。

当开发人员试图将一行新代码部署到云中时,他们通常需要忍受 30 秒到几分钟的部署速度。要等那么长时间才能看到云上的变化,实在是太慢了,太乏味了。与我们所习惯的开发方式相比,这感觉太老套了。然后,从云上的日志服务中获得项目的日志又需要长达 30 秒的时间,加起来显然是一个非常漫长的开发流程。

所以云端开发的速度体验是这里的关键。我们和腾讯公司合作的 Tencent Serverless Framework 产品在这方面有很大的创新

这个应用开发工具是我们和腾讯公司合作,专门为中国的开发者社区提供的产品。我们密切的合作伙伴关系让我们能够真正尝试在提升开发者体验方面,做一些开箱即用的有趣功能。在这里,你可以通过你的本地账号信息和 CLI 工具,基于 Serverless Framework Component 组件,构建云服务,并快速部署到腾讯云平台,我们花费了大量时间来确保应用的快速部署。

另外,你还可以快速地在命令行获取到应用的实时日志。我们也花了很多时间给开发者提供快速的云端开发体验,解决云端开发的问题:

  • 基于本地的应用更新,快速部署到云端;
  • 没有本地云端交互的差异;
  • 以及快速的输出运行日志,定位运行错误。

这些功能已经腾讯云上实现了,通过 Tencent Serverless Framework,就可以快速体验这些能力。腾讯云团队在这里做了一些非常棒的工作,我认为这是一个很大的飞跃,解决了一些开发人员体验方面的挑战,真的很棒。

它的优点在于,保持本地云端开发环境完全一致,可以在相同的基础设施上进行开发,但体验上,仍然感觉像是本地开发,而且还挺快的,只需要 14 秒部署。在 5 - 14 秒的部署时间和获取实时日志功能上看,这个体验已经相当不错了。它非常好,可伸缩性也很好,你可以用它来建造复杂的项目,可以用很多云基础设施,因为使用的内容与生产中使用的内容相同。

现在我们用这种方法遇到的最大的问题是什么?那就是共享托管服务和云帐户。

你最终仍然要在整个开发团队中做很多这样的工作,这还是会导致冲突,需要团队协调如何在这些分布式系统之间共享所有云上资源。所有这些导致的最大的问题就是降低了开发的自主性,开发人员不能按照自己的开发节奏进行开发,不能在一个独立的开发环境中快速工作。

03. Serverless Cloud

因此,我们也一直在考虑如何解决这个问题。我们认为自己在这方面已经取得了很大的进步,但是也还在尝试一些其他的东西,试图成为解决所有这些挑战的银弹。

我们推出了名为 Serverless Cloud 的全新产品,想让开发人员能够在多云上进行开发。这意味着开发人员可以在云上进行开发,但很容易克隆他们的所有代码、基础设施甚至数据,我认为这是前所未有的,以实现开发人员的完全自主。当然,最好的介绍方式是展示它的功能,所以这里我打开了 VSCode 为大家介绍一下 Serverless Cloud 的体验。

我们可能需要不同的用例,比如 API、数据库、计划任务等等。我有一个待办事项应用程序将于周五发布,它有一个后端,全部建立在 Serverless Cloud 上。我的第一步是将其部署到生产阶段,过五秒钟,它就可以启动并运行了。

我有一个 url,还有一个 Serverless 应用程序,我会在这里和 Firefox 上打开,在那里它有一个前端,还有一个 Serverless API,这些任务都是在后端持久化的。所以现在做一些任务,我也要改变这些任务的状态。

这一点很重要,因为接下来我将返回并输入另一个命令,将生产环境克隆到一个完整的独立应用程序中。这不仅仅是克隆代码基础设施,也是克隆数据。

五秒钟后,我就有了一个全新的 url,指向另一个完全孤立的应用程序。你甚至可以看到数据的消耗与生产应用程序的状态一模一样。

同样,在几秒钟内,开发人员能够将一个环境、一个 stage 克隆到一个孤立的 stage、一个独立的基础架构或者自己的沙箱(自己的工作空间),在那里他们可以进行快速更改开发而不会被阻止,不会遇到多团队开发的冲突。

他们现在要做的就是运行 cloud start。在这里,他们可以观察变化,观察事件的保存;可以开始迭代应用程序。我只需要更新待办事项应用上的标题,按下保存键。

大约三秒钟后,这些更改就部署了,我将回到我的沙箱应用程序,你可以看到标题已经更改了,生产环境的应用程序仍然保持原样。

这种开发模式最终提供了高效率的云上开发体验,同时解决了维持开发独立性的问题。可能是除了最前沿的技术发展之外,我们在这里能做的最好的工作,通过这种方式解决开发人员的体验问题,完成开发方式的转变。

非常感谢大家的聆听,如果大家有任何问题,可以在 Twitter 上搜索 Austen Collins 找到我,当然你在 serverless.com 了解到更多的产品信息,谢谢。

分享嘉宾

Austen Collins,Serverless.com CEO,腾讯云 TVP。Serverless.com 为在 Serverless 云服务上构建应用程序的开发者和组织制作工具。他在 2015 年创建了 Serverless Framework,这是一个无服务器应用框架,后来发展成为世界上最受欢迎的开源项目之一。他也是 CloudEvents(一种事件数据的标准格式)的创建者之一,并且是云原生计算基金会的 Serverless 的指定发言人。

点击查看本次分享完整视频