Vercel 使用 [Amazon EventBridge](https://aws.amazon.com/cn/eventbridge/?trk=cndc-detail) 调度器实施 Cron 作业,使他们的客户能够大规模创建、管理和运行计划任务。该功能很快就获得了广泛采用,发布后仅几个月,每周 cron 调用次数就超过 700 万次。本文将介绍他们是如何取得这一成就的,以及他们如何处理遇到的大规模扩展。
Vercel 构建了前端云,使工程师可以更轻松地部署和运行其前端应用程序。过去两年,Vercel 的部署量超过 1 亿次,Vercel 高度依赖[无服务器](https://aws.amazon.com/cn/serverless/?trk=cndc-detail)技术,帮助用户以零配置的方式利用一流的亚马逊云科技基础设施。Vercel 提供了许多功能来帮助开发人员托管其前端应用程序。然而,直到今年年初,他们还没有构建出 Cron 作业。
Cron 作业是一项计划任务,可按预定时间间隔或固定时间自动运行特定命令或脚本。它使用户能够设置定期、重复的操作,例如备份、向客户发送通知电子邮件或在需要续订订阅时处理付款。Cron 作业广泛用于计算环境,以提高效率并自动化日常操作,这正是 Vercel 客户普遍要求的功能。
2022 年 12 月,Vercel 举办了一场旨在促进创新的内部黑客马拉松。正是在这场活动上,Vincent Voyer 和 Andreas Schneider 联手为 Vercel 平台构建了 cron 作业功能的原型。他们组建了一个五人团队,花了一周的时间来开发该功能。该团队对从构建显示 cron 作业的用户界面到创建该功能的后端实施的不同任务进行了研究。
### Amazon EventBridge 调度器
当这个黑客马拉松团队开始考虑解决 cron 作业问题时,他们首先想到的是使用按计划运行的 [Amazon EventBridge](https://aws.amazon.com/cn/eventbridge/?trk=cndc-detail) 规则。但是,他们很快意识到,此功能限制每个亚马逊云科技区域的每个账户使用 300 条规则,这不足以满足他们的预期用途。幸运的是,一名团队成员阅读了亚马逊云科技计算博客中的 [Amazon EventBridge](https://aws.amazon.com/cn/eventbridge/?trk=cndc-detail) 调度器公告,他们认为这将是解决他们问题的完美工具。
通过使用 EventBridge 调度器,他们可以在 270 多项亚马逊云科技服务中一次性或周期性调度数百万个任务,而无需预置或管理底层基础设施。
![image.png](https://dev-media.amazoncloud.cn/e526ff56868b48f18b77808506edb8a7_image.png "image.png")
为了在 Vercel 中创建新的 cron 作业,客户需要定义此任务的运行频率以及他们想要调用的 API。Vercel 在后端使用 EventBridge 调度器,并且在创建新的 cron 作业时会创建一个新的计划。
为了调用端点,团队使用 Amazon Lambda 函数来接收需要作为输入参数调用的路径。
![image.png](https://dev-media.amazoncloud.cn/dd5bdcff45f449c0b3980732015ddfcd_image.png "image.png")
当 cron 作业运行时,EventBridge 调度器会调用该函数,然后,该函数会调用已配置的客户网站端点。
到了周末,Vincent 和他的团队已经获得了 cron jobs 功能的有效原型版本,并且在黑客马拉松中获奖。
### 构建 Vercel Cron 作业
12 月,在使用该原型一周后,黑客马拉松结束了,Vincent 和他的团队也回归到他们的日常工作中。2023 年 1 月上旬,Vicent 和 Vercel 团队决定继续研发该项目并将其转变为真正的产品。
在黑客马拉松期间,团队构建了该功能的基本部分,但他们需要完善一些细节才能为生产做好准备。Vincent 和 Andreas 潜心开发该功能,不到两个月,即 2023 年 2 月 22 日,他们就向公众宣布推出 Vercel Cron 作业。该公告推文获得了超过 40 万次浏览,此次发布在社区内广受好评。
![image.png](https://dev-media.amazoncloud.cn/3b1f4244abe5477390494bae975ea2e4_image.png "image.png")
此功能很快就获得了广泛采用。Cron 作业发布后仅几个月,Vercel 的每周 cron 调用次数就超过了 700 万次,他们预计采用率还将继续增长。
![image.png](https://dev-media.amazoncloud.cn/26c92c6b359e4c34a79bac21aed4b021_image.png "image.png")
### Vercel Cron 作业如何处理扩展
在这一采用速度下,扩展此功能对于 Vercel 来说至关重要。为了以同样的速度扩展 cron 调用量,他们必须制定一些业务和架构决策。
从业务角度来看,他们为免费套餐客户定义了限制。免费套餐客户最多可以在其账户中创建两个 cron 作业,而且只能创建每小时计划。这意味着免费客户不能每 30 分钟运行一次 cron 作业;相反,他们最多可以每小时运行一次。只有使用 Vercel 付费套餐的客户才能利用 EventBridge 调度器分钟粒度来安排任务。
此外,对于免费客户来说,无法保证分钟精度。为了实现这一目标,Vincent 利用 EventBridge 调度器的时间窗口配置。灵活时间窗口配置允许您在时间窗口内启动计划。这意味着计划任务分散在时间窗口内,以减少多个请求对下游服务的影响。例如,如果许多客户想要在午夜运行作业,这会非常有用。通过使用灵活时间窗口,可以将负载分散在设定的时间窗口中。
从架构的角度来看,Vercel 兼具托管 API 和拥有 cron 作业调用的函数的优势。
![image.png](https://dev-media.amazoncloud.cn/0b9f4fe2370b47be9bc1f8865bcf1790_image.png "image.png")
这意味着,当 EventBridge 调度器启动 Lambda 函数时,该函数无需等待 API 的响应即可结束其运行。然后,Vercel 通过从其可观测性机制中检查 API 和 Vercel 函数是否正确运行来验证 cron 作业是否运行。这就使函数持续时间非常短,不到 400 毫秒。这使 Vercel 每秒可以运行大量函数,而不会影响其并发限制。
![image.png](https://dev-media.amazoncloud.cn/dc41b7a6109748fcbabc9eaca93e0b36_image.png "image.png")
### 产生了什么影响?
Vercel 对 Cron 作业的实施就是[无服务器](https://aws.amazon.com/cn/serverless/?trk=cndc-detail)技术功效的典型案例。在两个人全职工作的情况下,他们在两个月内就推出了社区需要并热情采用的功能。此功能显示了 Vercel 平台的完整性,这也是说服客户转向付费账户的重要功能。
如果您想开始使用 EventBridge 调度器,请参阅适用于 EventBridge 调度器的 Serverless Land 模式,您可以在其中找到各种可以为您提供帮助的示例。
- 适用于 EventBridge 调度器的 Serverless Land 模式:
https://serverlessland.com/patterns?services=eventbridge-scheduler?trk=cndc-detail
![开发者尾巴.gif](https://dev-media.amazoncloud.cn/9f50ac62c4384732b3de6c92716215c2_%E5%BC%80%E5%8F%91%E8%80%85%E5%B0%BE%E5%B7%B4.gif "开发者尾巴.gif")