指南

什么是无服务器?无服务器计算简单讲解

无服务器是一种运行代码的方式,你无需自己设置或管理任何服务器。你把代码交给云服务商,只有在某件事触发它时才运行,例如一个网页请求、一个上传的文件或一条付款通知,运行结束后便停止。你通常只为代码实际运行的时间付费,而不是为闲置的机器付费。

用 AI 构建时,无服务器为什么重要

当你用 AI 构建应用并查看托管选项或代码时,会遇到“无服务器函数”“边缘函数”或“云函数”之类的说法。许多托管平台都提供这些功能,一些 AI 构建工具也会以这种方式部署后端。理解这种模式,有助于你回答三个实际问题:

  • 成本。 没有人使用时,你的应用会不会仍在产生费用?
  • 速度。 为什么一段安静时期后的第一次请求会更慢?
  • 限制。 为什么某个耗时的任务(例如生成大型报告、处理视频)会超时?

同样有必要知道无服务器不是什么:它并不意味着没有后端。你仍然有服务器端代码,只是由别人来运行那些机器。关于基础知识,可参阅什么是服务器。

日常类比

传统服务器就像自己拥有一辆车。它随时待命,随时可以立即出发,但无论你开不开,你都要为它付费:保险、停车、保养。

无服务器则像叫一辆出租车。你只为实际乘坐的行程付费;如果一百个人同时要打车,就会来一百辆车。但车子可能需要一段等待时间(即冷启动),每次行程都有最长时限,而且司机不会记得你上一次的行程(函数是无状态的)。

无服务器函数如何工作

最常见的形式称为函数即服务(FaaS):

  1. 你编写一个函数,这是一小段代码,用来处理某一类事件,例如“处理发送到 /api/bookings 的 POST 请求”。
  2. 你部署它。 服务商存储该函数,并把它连接到一个触发器上:一个网址、一个定时任务、存储中新上传的文件,或队列中的一条消息。
  3. 事件到达。 服务商启动一个函数副本(或复用一个已经预热的副本),运行并返回结果。
  4. 自动扩容。 如果同时到达一千个请求,服务商会并行运行许多副本,直到达到你账户的限制。
  5. 进入空闲。 请求停止后,副本会被关闭。没有任何东西在运行时,计算部分就不收费。

一个用 JavaScript 写的小型无服务器函数可能是这样的:

export default async function handler(request) {
  const { name } = await request.json();
  return Response.json({ message: `Hello, ${name}` });
}

你不需要编写启动服务器、开放端口或保持进程运行的代码。这些都由平台处理。

“无服务器”一词也被更宽泛地用于其他按需扩展、按用量计费的托管服务,例如无服务器数据库,它们在空闲时会自动暂停。

关键术语

术语含义
函数(FaaS)服务商按需运行的一小段代码单元。
触发器 / 事件启动函数的原因:HTTP 请求、文件上传、定时器、队列消息。
冷启动在处理请求之前,需要先启动一个新的函数副本所产生的延迟。
预热已经在运行、可以立即响应的副本。
无状态函数在两次运行之间不保留任何记忆。任何需要持久保存的内容都必须放入数据库或存储中。
超时单次运行允许的最长时间。例如,AWS Lambda 的上限是 15 分钟;许多平台的默认值则短得多。
边缘函数在靠近用户的众多位置运行的函数,通常限制更严格。
缩容至零(Scale to zero)在没有流量时不运行任何东西,计算部分也不付费。

实例:一个小型预约网站

一家瑜伽工作室的预约网站,每周日晚上新课表发布时会迎来一阵访问高峰,其余时间访问量很少。

  • 使用始终开启的服务器时,工作室要为一台 24 小时运行的机器付费,它的规模需要满足周日晚上的高峰,而其他时间大多闲置。
  • 使用无服务器函数时,GET /api/classes 和 POST /api/bookings 都是函数。周日的高峰会自动启动许多副本;在周二早上的清闲时段,几乎没有任何东西在运行,账单接近于零。

权衡之处同样存在。周二早上第一个打开网站的人,可能会因为冷启动而多等一会儿。数据库则必须应对来自许多函数副本的大量短时连接,这可能需要连接池。另外,如果工作室之后想增加一个“生成所有人的年度出勤 PDF”的任务,它可能会超过函数的时间限制,需要放到别处运行。

何时适合,何时不适合

适合的情况不太适合的情况
流量低、时高时低或难以预测持续的大流量,此时一直开着可能更便宜
短促的请求/响应任务:API、表单处理程序、Webhook长时间运行的任务:大型视频处理、大数据导入
不想管理服务器的小团队需要保持长连接的应用(某些聊天或多人游戏功能),除非平台支持
事件处理:“文件上传时,生成缩略图”需要在请求之间占用大量内存的应用

常见误解

  • “无服务器就是没有后端。” 它的意思是无需管理服务器。你仍然需要编写并保护后端代码。
  • “无服务器总是更便宜。” 在低用量时便宜,但按请求计费的价格在高峰、持续的大流量下可能会累积成一笔可观的费用。
  • “无服务器可以无限扩展。” 平台有并发限制,而你的数据库可能远在函数之前就成为瓶颈。
  • “函数里保存的文件下次还会在。” 本地存储是临时的。请使用数据库或文件存储。
  • “缩容至零就等于无服务器。” 两者相关,但并不相同。有些平台把你的应用作为普通服务器运行,空闲时休眠,并在下一次请求时唤醒——节省的成本和首次请求的延迟与之相似,但没有按函数划分的单次请求时间限制。

可以向 AI 构建工具提出的要求

  • “这个后端会以无服务器函数的形式运行,还是以始终开启或会休眠的服务器运行?这对成本意味着什么?”
  • “是否有任务可能超过平台的时间限制?如果有,应该如何处理?”
  • “所有需要持久保存的内容都存入数据库或文件存储,而不是保存在内存或本地文件中。”
  • “如果许多副本同时运行,数据库连接应该如何管理?”
  • “应用空闲一段时间后,第一次请求的延迟是多少?”

Mythex 如何托管应用

Mythex 并不把它的托管描述为无服务器函数。发布时,你的应用会以普通的网页应用或容器形式运行,由 Mythex 为你管理——无需进行任何托管设置。它采用缩容至零的方式:已发布的应用及其数据库在空闲时会休眠,并在下一次访问时唤醒;休眠中的应用不产生计算费用,只有在流量大时才会启动额外的机器(Pro 版每项服务最多 3 台)。附加的 Postgres 数据库在空闲 5 分钟后也会休眠,并按其醒着的时间计费。因此,你可以获得大部分“用多少付多少”的好处,但在长时间安静之后,第一次请求同样可能会有延迟。详见文档中的托管限制,以及我们关于网页托管和降低托管成本的指南。

常见问题

无服务器(serverless)简单来说是什么意思?

无服务器是指你把代码交给云服务商,只有在需要时才运行它,例如有请求到达时;你无需设置或照看任何服务器。通常你只为代码实际运行的时间付费,而不是为一台始终开着的机器付费。

无服务器真的没有服务器吗?

服务器仍然存在,只是你不需要管理它们。服务商在自己的机器上运行你的代码,在请求到达时启动它,在负载增加时扩容,在空闲时将其关闭。

什么是冷启动?

冷启动是指无服务器函数在空闲一段时间后运行时,由于服务商必须先启动一个全新的副本而产生的额外延迟。根据平台、编程语言和代码大小的不同,延迟可能从几乎察觉不到,到一秒或更久不等。

无服务器比普通服务器便宜吗?

对于流量少或时高时低的应用,通常更便宜,因为空闲时几乎不花钱。对于流量大且持续不断的应用,一直开着的服务器可能更划算。这取决于你的使用方式和服务商的定价。

有哪些无服务器平台的例子?

知名的例子包括 AWS Lambda、Google Cloud Run functions、Azure Functions、Cloudflare Workers,以及 Vercel 和 Netlify 等托管平台提供的函数功能。

Mythex · Pricing · 用 AI 构建任何东西 · 网站和应用模板 · Mythex 对比 · AI 应用构建术语表 · 免费的 AI 应用构建工具 · English

English አማርኛ العربية Български বাংলা Bosanski Català Čeština Dansk Deutsch Ελληνικά Español Español (España) Eesti فارسی Suomi Français Français (Canada) ગુજરાતી हिन्दी Hrvatski Magyar Հայերեն Bahasa Indonesia Íslenska Italiano 日本語 ქართული Қазақ тілі ಕನ್ನಡ 한국어 Lietuvių Latviešu Македонски മലയാളം Монгол मराठी Bahasa Melayu မြန်မာ Norsk bokmål Nederlands ਪੰਜਾਬੀ Polski Português (Brasil) Português (Portugal) Română Русский Slovenčina Slovenščina Soomaali Shqip Srpski Svenska Kiswahili தமிழ் తెలుగు ไทย Tagalog Türkçe Українська اردو Tiếng Việt 繁體中文(香港) 繁體中文(台灣)