Vercel 如何使用 Amazon EventBridge 调度器在2个月内发布 Cron 作业

2023-10-21 10:28

本文主要是介绍Vercel 如何使用 Amazon EventBridge 调度器在2个月内发布 Cron 作业,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

f83106e12cfe3aeb38b8a4cce09baf36.gif

Vercel 使用 Amazon EventBridge 调度器实施 Cron 作业,使他们的客户能够大规模创建、管理和运行计划任务。该功能很快就获得了广泛采用,发布后仅几个月,每周 cron 调用次数就超过 700 万次。本文将介绍他们是如何取得这一成就的,以及他们如何处理遇到的大规模扩展。

Vercel 构建了前端云,使工程师可以更轻松地部署和运行其前端应用程序。过去两年,Vercel 的部署量超过 1 亿次,Vercel 高度依赖无服务器技术,帮助用户以零配置的方式利用一流的亚马逊云科技基础设施。Vercel 提供了许多功能来帮助开发人员托管其前端应用程序。然而,直到今年年初,他们还没有构建出 Cron 作业。

Cron 作业是一项计划任务,可按预定时间间隔或固定时间自动运行特定命令或脚本。它使用户能够设置定期、重复的操作,例如备份、向客户发送通知电子邮件或在需要续订订阅时处理付款。Cron 作业广泛用于计算环境,以提高效率并自动化日常操作,这正是 Vercel 客户普遍要求的功能。

2022 年 12 月,Vercel 举办了一场旨在促进创新的内部黑客马拉松。正是在这场活动上,Vincent Voyer 和 Andreas Schneider 联手为 Vercel 平台构建了 cron 作业功能的原型。他们组建了一个五人团队,花了一周的时间来开发该功能。该团队对从构建显示 cron 作业的用户界面到创建该功能的后端实施的不同任务进行了研究。

Amazon EventBridge 调度器


当这个黑客马拉松团队开始考虑解决 cron 作业问题时,他们首先想到的是使用按计划运行的 Amazon EventBridge 规则。但是,他们很快意识到,此功能限制每个亚马逊云科技区域的每个账户使用 300 条规则,这不足以满足他们的预期用途。幸运的是,一名团队成员阅读了亚马逊云科技计算博客中的 Amazon EventBridge 调度器公告,他们认为这将是解决他们问题的完美工具。

通过使用 EventBridge 调度器,他们可以在 270 多项亚马逊云科技服务中一次性或周期性调度数百万个任务,而无需预置或管理底层基础设施。

26f7fd17e2b028e623facff096a041a5.png

为了在 Vercel 中创建新的 cron 作业,客户需要定义此任务的运行频率以及他们想要调用的 API。Vercel 在后端使用 EventBridge 调度器,并且在创建新的 cron 作业时会创建一个新的计划。

为了调用端点,团队使用 Amazon Lambda 函数来接收需要作为输入参数调用的路径。

9c6eb80c63f50d90e6f0239042afb801.png

当 cron 作业运行时,EventBridge 调度器会调用该函数,然后,该函数会调用已配置的客户网站端点。

到了周末,Vincent 和他的团队已经获得了 cron jobs 功能的有效原型版本,并且在黑客马拉松中获奖。

构建 Vercel Cron 作业


12 月,在使用该原型一周后,黑客马拉松结束了,Vincent 和他的团队也回归到他们的日常工作中。2023 年 1 月上旬,Vicent 和 Vercel 团队决定继续研发该项目并将其转变为真正的产品。

在黑客马拉松期间,团队构建了该功能的基本部分,但他们需要完善一些细节才能为生产做好准备。Vincent 和 Andreas 潜心开发该功能,不到两个月,即 2023 年 2 月 22 日,他们就向公众宣布推出 Vercel Cron 作业。该公告推文获得了超过 40 万次浏览,此次发布在社区内广受好评。

9adce92c3ad8b62f193748cf6496504e.png

此功能很快就获得了广泛采用。Cron 作业发布后仅几个月,Vercel 的每周 cron 调用次数就超过了 700 万次,他们预计采用率还将继续增长。

accf460cbddeef5a3fb20b40d5d12434.png

Vercel Cron 作业如何处理扩展


在这一采用速度下,扩展此功能对于 Vercel 来说至关重要。为了以同样的速度扩展 cron 调用量,他们必须制定一些业务和架构决策。

从业务角度来看,他们为免费套餐客户定义了限制。免费套餐客户最多可以在其账户中创建两个 cron 作业,而且只能创建每小时计划。这意味着免费客户不能每 30 分钟运行一次 cron 作业;相反,他们最多可以每小时运行一次。只有使用 Vercel 付费套餐的客户才能利用 EventBridge 调度器分钟粒度来安排任务。

此外,对于免费客户来说,无法保证分钟精度。为了实现这一目标,Vincent 利用 EventBridge 调度器的时间窗口配置。灵活时间窗口配置允许您在时间窗口内启动计划。这意味着计划任务分散在时间窗口内,以减少多个请求对下游服务的影响。例如,如果许多客户想要在午夜运行作业,这会非常有用。通过使用灵活时间窗口,可以将负载分散在设定的时间窗口中。

从架构的角度来看,Vercel 兼具托管 API 和拥有 cron 作业调用的函数的优势。

922c2fa268c8ab95ad75af78c9b751d5.png

这意味着,当 EventBridge 调度器启动 Lambda 函数时,该函数无需等待 API 的响应即可结束其运行。然后,Vercel 通过从其可观测性机制中检查 API 和 Vercel 函数是否正确运行来验证 cron 作业是否运行。这就使函数持续时间非常短,不到 400 毫秒。这使 Vercel 每秒可以运行大量函数,而不会影响其并发限制。

0439eb09d8b1e0400708134fb6f9d142.png

产生了什么影响?


Vercel 对 Cron 作业的实施就是无服务器技术功效的典型案例。在两个人全职工作的情况下,他们在两个月内就推出了社区需要并热情采用的功能。此功能显示了 Vercel 平台的完整性,这也是说服客户转向付费账户的重要功能。

如果您想开始使用 EventBridge 调度器,请参阅适用于 EventBridge 调度器的 Serverless Land 模式,您可以在其中找到各种可以为您提供帮助的示例。

  • 适用于 EventBridge 调度器的 Serverless Land 模式:

    https://serverlessland.com/patterns?services=eventbridge-scheduler

本篇作者

fab888b0eb9d0222f928ed6976677ebe.jpeg

Marcia Villalba

亚马逊云科技首席开发者布道师,她在软件行业,尤其是应用程序的构建和扩展方面有着20年的从业经验。她致力于设计能够充分发挥云计算能力的系统,并积极拥抱 DevOps 文化。

d87ab699a3ae5735c184330ffc43aaa4.gif

星标不迷路,开发更极速!

关注后记得星标「亚马逊云开发者」

0ca0eca13a5d4be7ae61829d4a43f874.gif

听说,点完下面4个按钮

就不会碰到bug了!

4eb6b1b9df93a6ef555fb7131de27564.gif

这篇关于Vercel 如何使用 Amazon EventBridge 调度器在2个月内发布 Cron 作业的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/253770

相关文章

使用Go语言开发一个命令行文件管理工具

《使用Go语言开发一个命令行文件管理工具》这篇文章主要为大家详细介绍了如何使用Go语言开发一款命令行文件管理工具,支持批量重命名,删除,创建,移动文件,需要的小伙伴可以了解下... 目录一、工具功能一览二、核心代码解析1. 主程序结构2. 批量重命名3. 批量删除4. 创建文件/目录5. 批量移动三、如何安

springboot的调度服务与异步服务使用详解

《springboot的调度服务与异步服务使用详解》本文主要介绍了Java的ScheduledExecutorService接口和SpringBoot中如何使用调度线程池,包括核心参数、创建方式、自定... 目录1.调度服务1.1.JDK之ScheduledExecutorService1.2.spring

Java使用Tesseract-OCR实战教程

《Java使用Tesseract-OCR实战教程》本文介绍了如何在Java中使用Tesseract-OCR进行文本提取,包括Tesseract-OCR的安装、中文训练库的配置、依赖库的引入以及具体的代... 目录Java使用Tesseract-OCRTesseract-OCR安装配置中文训练库引入依赖代码实

Python使用Pandas对比两列数据取最大值的五种方法

《Python使用Pandas对比两列数据取最大值的五种方法》本文主要介绍使用Pandas对比两列数据取最大值的五种方法,包括使用max方法、apply方法结合lambda函数、函数、clip方法、w... 目录引言一、使用max方法二、使用apply方法结合lambda函数三、使用np.maximum函数

Qt 中集成mqtt协议的使用方法

《Qt中集成mqtt协议的使用方法》文章介绍了如何在工程中引入qmqtt库,并通过声明一个单例类来暴露订阅到的主题数据,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧... 目录一,引入qmqtt 库二,使用一,引入qmqtt 库我是将整个头文件/源文件都添加到了工程中进行编译,这样 跨平台

C++使用栈实现括号匹配的代码详解

《C++使用栈实现括号匹配的代码详解》在编程中,括号匹配是一个常见问题,尤其是在处理数学表达式、编译器解析等任务时,栈是一种非常适合处理此类问题的数据结构,能够精确地管理括号的匹配问题,本文将通过C+... 目录引言问题描述代码讲解代码解析栈的状态表示测试总结引言在编程中,括号匹配是一个常见问题,尤其是在

Java中String字符串使用避坑指南

《Java中String字符串使用避坑指南》Java中的String字符串是我们日常编程中用得最多的类之一,看似简单的String使用,却隐藏着不少“坑”,如果不注意,可能会导致性能问题、意外的错误容... 目录8个避坑点如下:1. 字符串的不可变性:每次修改都创建新对象2. 使用 == 比较字符串,陷阱满

Python使用国内镜像加速pip安装的方法讲解

《Python使用国内镜像加速pip安装的方法讲解》在Python开发中,pip是一个非常重要的工具,用于安装和管理Python的第三方库,然而,在国内使用pip安装依赖时,往往会因为网络问题而导致速... 目录一、pip 工具简介1. 什么是 pip?2. 什么是 -i 参数?二、国内镜像源的选择三、如何

使用C++实现链表元素的反转

《使用C++实现链表元素的反转》反转链表是链表操作中一个经典的问题,也是面试中常见的考题,本文将从思路到实现一步步地讲解如何实现链表的反转,帮助初学者理解这一操作,我们将使用C++代码演示具体实现,同... 目录问题定义思路分析代码实现带头节点的链表代码讲解其他实现方式时间和空间复杂度分析总结问题定义给定

Linux使用nload监控网络流量的方法

《Linux使用nload监控网络流量的方法》Linux中的nload命令是一个用于实时监控网络流量的工具,它提供了传入和传出流量的可视化表示,帮助用户一目了然地了解网络活动,本文给大家介绍了Linu... 目录简介安装示例用法基础用法指定网络接口限制显示特定流量类型指定刷新率设置流量速率的显示单位监控多个