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

相关文章

vue使用docxtemplater导出word

《vue使用docxtemplater导出word》docxtemplater是一种邮件合并工具,以编程方式使用并处理条件、循环,并且可以扩展以插入任何内容,下面我们来看看如何使用docxtempl... 目录docxtemplatervue使用docxtemplater导出word安装常用语法 封装导出方

Linux换行符的使用方法详解

《Linux换行符的使用方法详解》本文介绍了Linux中常用的换行符LF及其在文件中的表示,展示了如何使用sed命令替换换行符,并列举了与换行符处理相关的Linux命令,通过代码讲解的非常详细,需要的... 目录简介检测文件中的换行符使用 cat -A 查看换行符使用 od -c 检查字符换行符格式转换将

使用Jackson进行JSON生成与解析的新手指南

《使用Jackson进行JSON生成与解析的新手指南》这篇文章主要为大家详细介绍了如何使用Jackson进行JSON生成与解析处理,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 核心依赖2. 基础用法2.1 对象转 jsON(序列化)2.2 JSON 转对象(反序列化)3.

使用Python实现快速搭建本地HTTP服务器

《使用Python实现快速搭建本地HTTP服务器》:本文主要介绍如何使用Python快速搭建本地HTTP服务器,轻松实现一键HTTP文件共享,同时结合二维码技术,让访问更简单,感兴趣的小伙伴可以了... 目录1. 概述2. 快速搭建 HTTP 文件共享服务2.1 核心思路2.2 代码实现2.3 代码解读3.

Elasticsearch 在 Java 中的使用教程

《Elasticsearch在Java中的使用教程》Elasticsearch是一个分布式搜索和分析引擎,基于ApacheLucene构建,能够实现实时数据的存储、搜索、和分析,它广泛应用于全文... 目录1. Elasticsearch 简介2. 环境准备2.1 安装 Elasticsearch2.2 J

使用C#代码在PDF文档中添加、删除和替换图片

《使用C#代码在PDF文档中添加、删除和替换图片》在当今数字化文档处理场景中,动态操作PDF文档中的图像已成为企业级应用开发的核心需求之一,本文将介绍如何在.NET平台使用C#代码在PDF文档中添加、... 目录引言用C#添加图片到PDF文档用C#删除PDF文档中的图片用C#替换PDF文档中的图片引言在当

Java中List的contains()方法的使用小结

《Java中List的contains()方法的使用小结》List的contains()方法用于检查列表中是否包含指定的元素,借助equals()方法进行判断,下面就来介绍Java中List的c... 目录详细展开1. 方法签名2. 工作原理3. 使用示例4. 注意事项总结结论:List 的 contain

C#使用SQLite进行大数据量高效处理的代码示例

《C#使用SQLite进行大数据量高效处理的代码示例》在软件开发中,高效处理大数据量是一个常见且具有挑战性的任务,SQLite因其零配置、嵌入式、跨平台的特性,成为许多开发者的首选数据库,本文将深入探... 目录前言准备工作数据实体核心技术批量插入:从乌龟到猎豹的蜕变分页查询:加载百万数据异步处理:拒绝界面

Android中Dialog的使用详解

《Android中Dialog的使用详解》Dialog(对话框)是Android中常用的UI组件,用于临时显示重要信息或获取用户输入,本文给大家介绍Android中Dialog的使用,感兴趣的朋友一起... 目录android中Dialog的使用详解1. 基本Dialog类型1.1 AlertDialog(

Python使用自带的base64库进行base64编码和解码

《Python使用自带的base64库进行base64编码和解码》在Python中,处理数据的编码和解码是数据传输和存储中非常普遍的需求,其中,Base64是一种常用的编码方案,本文我将详细介绍如何使... 目录引言使用python的base64库进行编码和解码编码函数解码函数Base64编码的应用场景注意