我创建了一个关于无服务器的网站,以及它与前端开发人员的关系。
每次我使用“无服务器”这个词,最近比较频繁,因为我们最近有 几篇文章使用了这个术语,并且在 CodePen 中用它来做各种事情,我都会听到各种版本的
兄弟,你还在用“服务器”。
他们没有说错。是的,当你构建网络上的东西时,总会涉及服务器。始终如此。无论是教堂地下室里的一台老式电脑,大型托管公司机架上的一台电脑,还是“云”,它都是一台服务器。

第一次听到这个词的时候,我也翻白眼。但现在我犹豫要不要把它称为一个糟糕的术语,部分原因是它真的流行起来,而且一个新术语如此强势地流行起来,的确有些值得关注的地方。还有一部分原因是,它标志着你使用服务器的方式发生了巨大变化。它在经济上不同,在 devops 上不同,以及在为其编写代码的方式上不同。
对我们中的许多人来说,我们都知道服务器是一台电脑。购买它们有各种方式,但你需要购买它们。给你一些钱,给你一台服务器。它可能是虚拟的,但它仍然是你需要负责的东西。你在上面安装软件。你启动它们,也关闭它们。你对它们进行负载均衡。你对它们拥有多少内存和磁盘空间做出选择。你负责它们的配置和管理。
无服务器试图表达的意思,我认为,是管理和支付服务器的一种新方式。你不购买单个服务器。你不管理它们。你不扩展它们。你不对它们进行负载均衡。你实际上并不负责它们。
你只为你的使用付费。例如,AWS Lambda 前 100 万次请求是免费的,之后每次请求收费 0.0000002 美元。便宜。就在这周,Firebase 推出了“函数”,本质上是无服务器概念,他们的每月 25 美元计划拥有 200 万次请求(以及 Firebase 提供的所有其他功能)。
这并不适用于所有应用程序。它适用于你可以编写一些代码,这些代码旨在获取一些东西,做一些工作,然后返回一些新东西的情况。你编写一个 API。
你不必完全接受“无服务器”的概念。你可以,而且我相信大多数人都是这样做的,将它用于有意义的事情,并将传统服务器用于其他事情。
一个营销术语,让前端开发人员专注于他们所知道的,
以防止他们被诱惑去深入研究目前的 devops 炒作?
当我以前的一个客户决定从现场 IBM 720 系列转向“基于云”的 ERP 时,我不得不笑。他们仍然不明白为什么通过 RDP 连接到他们的基于云的 ERP,并且是“GUI”而不是“绿屏”,速度如此之慢……无论你如何改变它,它都是一台服务器。
我无法想象有人会字面意思地理解“无服务器”……他们会吗?我的意思是,当然有服务器,人们认为他们的浏览器连接到什么?:)
使用无服务器架构构建事物非常有益。例如,考虑以下场景:我们有一个用于用户创建的内容的共享页面,
share.example.com/abc123
。简单的方法很简单。我们配置一些服务器,让它们响应发送到share.example.com/:short_id
的请求,让它们在数据库中查找short_id
,并让它们向浏览器返回一些内容。但是等等… 如果用户共享了一些内容,然后这些内容变得很火爆怎么办?如果我们有 1k、10k 甚至 100k 个同时请求访问这些内容怎么办?我们需要扩展响应
share.example.com/v1r4l
的服务器吗?由于请求数量增加,我们需要扩展数据库吗?我们需要实现某种缓存机制吗?现在,以下是无服务器方法。我们在内容创建时生成共享页面的 HTML。我们把它放到 S3(或 GCP 或 Azure 的等效项)存储桶中,并通过全局 CloudFront(或 GCP 或 Azure 的等效项)分发进行提供。我们每次共享只读取一次数据库,并且我们有 0(零!)台服务器需要维护和扩展。当我们收到 100k 个同时请求时,我们必须… 什么都不做。它会正常工作。
无服务器架构很棒。
你描述的似乎是缓存,因为你从 S3 提供的只是静态内容。要被归类为“无服务器”,服务应该运行你编写的某些后端代码。
我个人认为“无服务器”这个词很糟糕。就像 Firebase 称之为的“云函数”,这是一个更具描述性的术语。
静态生成内容 !== 缓存
但是,当然,我描述的内容(提供静态生成内容)技术上并非“无服务器计算”,因为它没有实际运行任何自定义代码,就像你指出的那样。
这也让我想起了“离线优先”这个词,它最初可能有点让人翻白眼,因为当然,网络根本无法工作,除非建立某种网络连接,而这种连接必须是“优先的”。
但我认为“优先”部分更多地指的是理念。关于将设计用于处理断开的网络,就像对待一个正常的网络一样,甚至更重视。
还有“云”这个名字也很奇怪,因为构成它的实际东西通常存储在远程地下设施中,这些设施利用地表以下几米处的自然冷却,根据气体动力学的基本原理,为地表房屋提供热量,热空气向上流动,我们完全可以称之为“地鼠”,但我猜它在市场上没有那么好,因为它没有传递出“自由”的感觉,天空让人想起这种感觉
当我为 Stamen Design 工作时,使用 AWS Lambda 的“无服务器”架构的一个例子是,我们使用它从地理空间数据生成 Web 地图切片。通常需要一个“切片服务器”来执行此操作,这涉及服务器创建、维护等。使用 Lamda,我们可以调用一些 Python 代码,该代码读取地理数据,然后将切片(256×256 像素图像)写入 S3,然后将它们发送到客户端。如果切片已经存在,则不会运行代码。你可以在此处阅读有关该方法的更多信息:https://hi.stamen.com/stamen-aws-lambda-tiler-blog-post-76fc1138a145#.5od5om8tf