无服务器已准备好,但开发人员尚未准备好

2025-06-04

无服务器已准备好,但开发人员尚未准备好

受到Andrew Brown在 Twitter 上分享的课程的启发,以及对我所在公司采用云和无服务器的经验的不断反思,我决定分享一些我对当前格局变化的看法,以及在这种背景下成为一名开发人员的意义。

这是对我来说最有启发的部分:

无服务器时代的幽灵

过去 4 年来,我一直想在 AWS 上采用无服务器架构,但每次尝试都会遇到严峻的挑战:

使用现有的关系数据库(例如 Postgres / MySQL)很困难

DynamoDB 难以学习,没有备份,容量管理也令人困惑

Lambda 的大小和运行时限制使得常见任务无法完成

为了集成服务,需要编写大量的样板文件

我无法使用我最喜欢的 Web 框架,因此必须从头开始

在本地运行或调试无服务器服务几乎是不可能的,而且很痛苦

编写 CloudFormation 模板需要做很多工作

可观察性极其有限

冷启动太慢,影响用户体验

实现无服务器在很大程度上依赖于昂贵的第三方提供商来填补这些功能空白

无服务器已准备就绪

我相信现在到了 2021 年,AWS 已经解决了这些先前的问题,并且无服务器优先方法已准备好适用于任何规模的项目或团队。

开发人员不是

然而,快速提升开发人员或团队的技能仍然需要几个月甚至一年的时间。因此,尽管有可能,但为了按时完成任务,团队和开发人员很快就会回到老路,这也就不足为奇了。

播客《现代运维的艺术》中有一集精彩的节目,题为《科技即时尚:工具会推动开发者文化变革吗?》。这让我思考,为什么我们的“技术”决策有时根本就不是技术性的。有时我们会追随潮流。撇开这种趋势是好是坏不谈,这些潮流往往忽视了无服务器方法带来的文化、社会和组织变革(以及一些尚待发现的变革)。

我们还没有准备好。我们不可能做好准备。

让我们回顾无服务器和云出现之前的 Web 开发时代:有前端人员和后端人员。或者至少,有职位描述、品牌、课程、我们自己的身份,以及我们自己。这种文化范式深深地扎根于我们心中,改变了我们的观点,并创造了社会动态。

前端后端部门

这种划分在不久前引起广泛关注的一条评论中得到了充分体现(考虑到我们的情况,“资历”与前端没有某种联系,即使是浏览器(或者实际上有很多不同版本的浏览器),正如 Douglas Crockford 曾经说过的,“最恶劣的开发环境”):

绝对不应该有超级初级前端开发人员。所有开发人员都需要思考他们构建的所有层面,才能高效工作。

— 托比·卢特克 (Tobi Lutke) 🌳🌲🛒🕹 ( @tobi ) 2020 年 12 月 22 日

We should add Twitter as another hostile environment.

专业化、关注点分离等等有很多好处,但我们应该交付的商业价值并非单一或单一,而是服务/产品与技术的具体化行动,我认为这更像是一个光谱。我给自己贴上“全栈”的标签——这更多的是一种必然,而不是必须尽可能多地承担各种角色的选择——但我并不认为这是一个静态的类别,而是一个构成服务/产品的光谱。

正因如此,一个人不可能精通所有技能,从而在两个方面都达到全能——<sarcasm>或许是神话中的“10 倍速开发者”?但他们或许不会接触前端系统/讽刺>`。没错,你可以,而且我认为你应该在两个方面都努力,但你很可能总是倾向于其中一个方面。而且,这永远不会是一成不变的。很多事情都可能随着时间的推移而改变。我自己一开始完全专注于前端领域,现在发现自己在前端方面效率更高(这对我来说很重要)。生活中没有全局常量,只有作用域变量。

全栈连续体

即使是全栈开发人员,也无法将每个领域对应成一张1:1的地图。我们每个人都分散在这个连续体中。

云计算正在吞噬世界

请记住,这还没有考虑所有其他不完全属于这个范围的角色,例如 QA、Ops、安全、DB、网络……但开发,即使是 Web 开发,也是一项相当新的工作。尽管我们希望它们分离,但最终我们的后端应该只存储和处理有意义且能为客户增加价值的内容,而客户又将通过前端应用程序与该系统交互。但事情曾经很简单:你用某种语言编写代码,生成 HTML 并通过服务器将请求发送给客户端。而且,即使在今天,这基本上也是正在发生的事情。但是,曾经在机器(你的工作站)上开发的东西,后来开始需要在某个地方(你的数据中心或第三方)配置一台更大的机器,而那台机器,从操作系统到服务器,包括所有的调整、补丁和依赖项,不仅是我们的责任,而且我们所有。(从技术上讲,有时你会租用一台机器,甚至与他人共享一台带有下划线默认设置的机器)。

云计算的采用一如既往地始于一项新技术的采用:效仿旧方法。杰出的媒体思想家马歇尔·麦克卢汉认为,为了充分理解一项新技术的影响,必须将图形(媒介)和背景(语境)结合起来考察,因为两者缺一不可。麦克卢汉认为,我们必须在历史背景下研究媒体,尤其是在技术演变的背景下。

云计算最初的运作方式与本地部署和租用机架空间相同。你创建了一台新的“机器”实例。但这当然是全新的体验。你可以利用海量资源,而无需制定容量规划来订购线缆、驱动器和软件许可证。这种实质性差异有时会被忽视。但这使得许多企业无需巨额资本支出就能创建和发展壮大。从更全球化的视角来看,对于世界各地的一些公司来说,从AWS、谷歌或微软获得资源意味着可以访问各种前所未有的架构。云计算在我们这个世界的影响是巨大的:从经济、环境(冷却所有这些计算需要大量的水)、文化、社会和技术层面来说。甚至“全栈”一词也无法形容这个新世界的复杂性。在这种背景下,“云工程师”和“云开发者”的概念蓬勃发展,并在不同的公司中赋予了它们不同的含义和角色。

无服务器的寒武纪大爆发

正如 Andy Jessy 在 re:Invent 2020 大会上所说,亚马逊内部构建的新应用中有一半都在使用 Lambda ,这还不包括集成的其他 140 项 AWS 服务。正如 2020 年 8 月的《亚马逊网络服务概览》中所述,服务/产品的数量为 175 项(后来 re:Invented 大会又增加了更多)。想想看, Lambda去年刚满六岁。

“无服务器”这个词本身就总是会引起一些争议,但如果开发者们为了分号而争吵,还能指望什么呢?命名是计算领域最难的事情之一,因此命名始终是个问题。我很喜欢 Ben Ellerby 的那篇文章《捍卫“无服务器”——这个词》(我特别喜欢),作者提出了这个话题:

@zackkanter的#serverless观点很棒!Lambda 提供函数即服务。托管服务也提供功能即服务。pic.twitter.com /QlbpHzOwDQ

— Jeremy Daly(@jeremy_daly2020 年 12 月 9 日

无服务器也是一个多态词。Lambda 只是一个子集。由于它无处不在,有时甚至被误认为是“无服务器”本身。Lambda 提供函数即服务。M 托管服务提供功能即服务。无服务器是服务的超集,它提供原语,以便开发人员能够在云中构建和架构应用程序,专注于领域。

看看 Amplify,这个工具体现了 Nader Dabit 的全栈无服务器宣言

放大

人与技术的关系是一场微妙的舞蹈,其中技术对象以不同程度的坚持进行推拉,而人类主体则以或多或少的动力、创造力和技能进行导航。

技术的设计、实施和使用都基于选择网络。其中一些选择是显性的,反映了该技术以某种特定方式影响人类行为的明确意图。另一些选择则是隐性的,可能永远不会进入设计者、分销商或最终用户的意识中。每一个选择——无论显性还是隐性——都反映并影响着价值取向、社会结构安排和社会动态。

《文物如何负担得起》,珍妮·L·戴维斯

无服务器技术为我们带来了使用强大应用程序的希望和途径。但就 Amplifies 等产品而言,抽象地讲,它们可以通过多种方式与 Web 和移动框架集成,而这些集成支持的所有服务仍然具有很大的深度。云似乎涵盖了我们和我们的组织赖以建立的所有其他传统领域。任何改变都有代价。任何事物都有其利弊。而我们,开发者,正处于这两者之间。

认知超负荷

《团队拓扑》这本优秀的著作向我们介绍了几种看待软件工程的方式,以及软件和其背后的团队如何相互塑造,这与麦克卢汉所说的理念如出一辙。其中最有见地的一点是,软件的大小和形状应该由团队的最大认知负荷决定。心理学家约翰·斯威勒将认知负荷定义为“工作记忆中所使用的脑力劳动总量”。因此,认知负荷对于任何需要脑力和创造性努力的活动(例如开发)都至关重要。

认知超负荷有三种形式:

  • 内在的:与问题空间的基本任务方面相关。

  • 无关的:与执行任务的环境有关。

  • 相关:与需要特别注意以进行学习或获得高绩效的任务方面有关。

正如作者所说,我想强调的是:

广义上讲,要尽量减少内在认知负荷(通过培训、选择合适的技术、招聘、结对编程等),并消除外在认知负荷(无聊或多余的任务,或那些在工作记忆中价值不大的任务命令)。这样才能为相关的认知负荷(即“增值”思维所在)留出更多空间。

认知超负荷

有时,人们会把无服务器与复杂性划上等号,平心而论,这实际上是为了最小化或抽象项目。崔岩就此写道:“即使是简单的无服务器应用程序,其架构图也很复杂”,那又怎样

答:这里我们有一个很好的无服务器案例:使用原语即服务,你可以专注于开发你的领域,这具有巨大的价值,对于精益团队来说更是如此,因为
你可以增加相关的认知负荷,因为你专注于为你的业务增值。复杂性是抽象的,当然,服务器在某个地方,有人拥有它们,你为它们付费,但我认为这会使其价值倍增。对于世界上大多数公司来说,构建本地服务器甚至不是一种选择(我知道,这很令人震惊)。

无服务器产品可以为世界各地的公司和个人带来价值的倍增和推动。

无服务器开发人员的崛起

企业中的所有技术人员都致力于提供商业价值——企业中人员的工作不是提供技术,而是提供商业价值。

Paul Johnston,无服务器是一种教义,而不是一种技术

因此,目前,无服务器领域已经成熟,并已准备好普及。为了探索这些未被发现的领域,我们需要拓宽我们的视野。正如比尔·巴克利在《云计算》一书中所说,“每一行代码都是一个购买决策”——我们需要关注成本,需要充分了解各种权衡利弊,我们将逐渐模糊角色之间的界限。

技术对象可以发挥巨大的力量,但只有人类才能且必须为此负责。我将客体-主体不对称的假设建立在效能与能动性之间的区别之上。效能指的是促成变革的能力。能动性指的是施加意志的能力。这一区别源自恩斯特·施劳贝的“技术作为物化行动”方法,该方法认为,尽管技术可以非常有效,但只有人类才能具有能动性。

《文物如何负担得起》,珍妮·L·戴维斯

现状不会改变,所以我们将会出现越来越多的新角色,例如全栈无服务器工程师、无服务器工程师、无服务器开发者等等。当然,云平台之间存在着许多对称性和导航方式,多云策略带来的对称性和导航方式则更多,但如今,从一个云平台到另一个云平台的切换并不简单。有些人拥有数十种 AWS 和 Azure 认证,但我们不能指望每个人都能学到所有东西。我们需要结合团队拓扑结构进行思考,将无服务器与我们的工作负载协调一致,并了解如何驾驭这个“无服务器美丽新世界”。


哲学小知识:超对象

Paul Johnston 也表示:无服务器应用程序是超对象……这真的很重要,(这是一篇很棒的文章,必须推荐阅读)Paul Johnston 还为我们提供了如下精彩内容:

没有什么是完美的(即使是无服务器也不例外),但我可以肯定地说,最大的麻烦并非最初的构建。从来都不是。那只是最初的麻烦(而且我并没有贬低它)。最大的麻烦是一旦投入使用,如何管理庞大而笨重的堆栈。

在开始科技行业工作之前,我在大学学习过一段时间哲学,后来退学了。但我从未停止阅读和关注当代哲学。我绝对不是这方面的权威——我只是个哲学爱好者。

话虽如此,我密切关注一种名为面向对象本体论(OOO)的新哲学流派](https://en.wikipedia.org/wiki/Object-directional_ontology)(不,不,请稍安勿躁,它与编程中的面向对象范式完全无关)。面向对象本体论始于 1990 年代后期,由 Graham Harman(“面向对象本体论:万物新理论”的作者)领导,它为我们带来了我认为是当代最多产和发人深省的作家之一:蒂莫西·莫顿。他关于这个主题的书—— “超对象:世界末日后的哲学和生态” ——是我的世界观中最基本的文本之一,也是我所理解的一种观察世界的绝佳方法。莫顿创造了超对象一词来指代相对于人类在时间和空间上大量分布的事物。看到这些概念的碰撞一次又一次让我感到惊讶。

有些事物我们可以衡量,我们可以影响,我们能看到部分,但无法看到全部。它们分布在时间和空间中,只有在需要时才会被调用。我们利用租赁资源的力量和人类的集体智慧,构建库和框架,而所有这些知识不可能仅靠一个人的大脑就能掌握。


还在嗎?

开玩笑啦。我只是不知道什么时候该停下来,因为对我来说这是一个悬而未决的问题,而且这个话题让我着迷。请在评论区留下你的想法、看法和见解!

封面图片由Paweł CzerwińskiUnsplash上提供

文章来源:https://dev.to/aws-builders/serverless-is-ready-developers-are-not-12f9
PREV
AWS 上的无服务器 WebSocket
NEXT
我是如何通过 AWS 认证开发人员助理考试 (DVA-C01) 的