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

news2024/11/15 9:48:15

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1116672.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

d3dx9_43.dll丢失有什么办法可以解决,解决d3dx9_43.dll丢失

通常d3dx9_43.dll丢失都是在运行游戏时汤出的d3dx9_43.dll找不到的错误窗口,因为d3dx9_43.dll文件更多是在使用游戏时会被调用的dll文件,d3dx9_43.dll是属于DirectX9的一个组件,DirectX9是游戏系统中的一个重要程序,所以当d3dx9_4…

MySQL数据库下载与安装使用

文章目录 MySQL数据库下面是各个版本完整的生命周期。下载MySQL安装包安装和使用MySQL一些基础MySQL使用命令 MySQL数据库 这里我选择的是免安装绿色解压版本 现在各位开发者使用的MySQL,大部分版本都是 5.7,根据官方说明,MySQL 5.7 将于 202…

零售创新:社交媒体如何改变跨境电商游戏规则?

在当今数字化的时代,社交媒体已经成为了我们日常生活中不可或缺的一部分。Facebook、Instagram、Twitter、WeChat等平台不仅让我们与朋友家人保持联系,还成为了一个新的商业战场。特别是在跨境电商领域,社交媒体的崛起正在彻底改变游戏规则。…

团购页面.

<!DOCTYPE html> <html><head><title>团购</title><meta http-equiv"content-type" content"text/html; charsetutf-8"/><meta name"apple-mobile-web-app-capable" content"yes"/><lin…

yxy销售网站后台管理系统

springbootmybatisthymeleaf 第一个练习的项目就是小商品零售平台后台管理系统&#xff0c;但是当时由于业务不熟练&#xff0c;需求分析先不做好&#xff0c;导致在开发的过程中出现了很多问题。 这次首先把需求确定&#xff0c;详细的做好前期准备工作&#xff0c;再来进行…

acme.sh: 未找到命令解决办法丨acme命令安装ssl证书

在Freessl申请的ssl证书现在都是需要acme命令了&#xff0c;服务器没有自带所以会出现这个报错&#xff0c;首先 1、安装并下载&#xff1a; curl https://get.acme.sh | sh -s emailmyexample.com2、进入到安装目录,创建指令别名&#xff1a; cd /root/.acme.sh/ alias acm…

一些经典的神经网络(第19天)

1. 经典神经网络&#xff08;LeNet&#xff09; LeNet是早期成功的神经网络&#xff1b; 先使用卷积层来学习图片空间信息 然后使用全连接层来转到到类别空间 【通过在卷积层后加入激活函数&#xff0c;可以引入非线性、增加模型的表达能力、增强稀疏性和解决梯度消失等问题…

防水款无源NFC卡片

产品参数&#xff1a; PN29_T 产品参数 产品型号 PN29_T 尺寸(mm) 85.8*41*2.9mm 显示技术 电子墨水屏 显示区域(mm) 29(H) * 66.9(V) 分辨率(像素) 296*128 像素尺寸(mm) 0.227*0.226 显示颜色 黑/白 视觉角度 180 工作温度 0-50℃ 电池 无需电池 工作…

linux性能分析(四)CPU篇(一)基础

一 CPU篇 遗留&#xff1a; 负载与cpu关系、负载与线程的关系? ① CPU 相关概念 1、physical 物理CPU个数 --> 一般一个实体 2、cpu 核数 3、逻辑CPU个数 逻辑核 4、超线程 super thread 技术 5、各种cpu的计算方式物理 physical CPU的个数&#xff1a; physical id逻…

el-dropdown 在火狐浏览器,下拉框先被其他元素覆盖1s后才置于最上层?

问题描述&#xff1a; element-ui组件&#xff0c;el-dropdown使用火狐浏览器打开时&#xff0c;下拉框会被其他元素覆盖&#xff0c;大约1s后才会完全置于最上层。 原因&#xff1a; 目前只觉得是官网自带的问题&#xff0c;有大佬知道更好的解决办法&#xff0c;请随时留言&a…

01_introduction_to_diffusers_CN

&#x1f917; Diffusers 介绍 来源&#xff1a;https://github.com/huggingface/diffusion-models-class/blob/main/unit1/01_introduction_to_diffusers.ipynb 预备知识 在进入 Notebook 之前&#xff0c;你需要: &#x1f4d6; 阅读第一单元的材料&#x1f917; 在 Hugg…

安科瑞智能操控装置产品在上海特斯拉工厂配电工程的应用

安科瑞 崔丽洁 1 概述 2018年10月17日&#xff0c;上海市临港管委会表示&#xff0c;特斯拉&#xff08;上海&#xff09;有限公司已成功摘得上海临港装备产业区Q01-05地块864885平方米&#xff08;合计1297.32亩&#xff09;的工业用地&#xff0c;并与上海市规划和国土资源管…

bpf对内核的观测

目录 1 bpftrace常用命令1.1 列出bpftrace 相关命令的list1. 2bpftrace -e 是执行1.3 查看参数 -lv 2 bpftrace 可以用到的变量3 高级3.1 内置函数3.2 文件系统3.3 内核内存 栈3.4 Malloc 调用 统计3.5 系统调用 brk 的 统计3.6 脚本调用 4 应用5 怎么串联起来呢 bpftrace 总的…

不写代码、构建一个开源的 ChatGPT,总共需要几步?|Hugging News #1020

每一周&#xff0c;我们的同事都会向社区的成员们发布一些关于 Hugging Face 相关的更新&#xff0c;包括我们的产品和平台更新、社区活动、学习资源和内容更新、开源库和模型更新等&#xff0c;我们将其称之为「Hugging News」。本期 Hugging News 有哪些有趣的消息&#xff0…

PostGIS MultiPolygon挖洞

现象 在应用过程中&#xff0c;“我认为的”&#xff0c;1个点明明落在了2个多面上&#xff0c;结果却不同。其实你会发现&#xff0c;坐标点的数据是一样的&#xff0c;但是定义的方法不同&#xff0c;导致结果不同。 --基础数据-- CREATE TABLE public.test_geometry_4490 …

用Python解析HTML页面

用Python解析HTML页面 文章目录 用Python解析HTML页面HTML 页面的结构XPath 解析CSS 选择器解析简单的总结 在前面的课程中&#xff0c;我们讲到了使用 request三方库获取网络资源&#xff0c;还介绍了一些前端的基础知识。接下来&#xff0c;我们继续探索如何解析 HTML 代码&…

4.从字节码分析synchronized的实现原理

文章目录 0.前言章节回顾 同步块&#xff0c;同步静态方法&#xff0c;同步实例方法的字节码区别解析synchronized代码块的字节码 1. 基础知识1.1 synchronized关键字的作用和重要性1.2 Java对象监视器1.2.1 Java中的对象监视器概念1.2.2 对象监视器在多线程环境中的作用 2. 基…

Vue3.0性能提升主要是通过哪几方面体现的?

一、编译阶段 回顾Vue2&#xff0c;我们知道每个组件实例都对应一个 watcher 实例&#xff0c;它会在组件渲染的过程中把用到的数据property记录为依赖&#xff0c;当依赖发生改变&#xff0c;触发setter&#xff0c;则会通知watcher&#xff0c;从而使关联的组件重新渲染 试想…

Linux系统编程_进程间通信第2天: 共享内存(全双工)、信号(类似半双工)、信号量

1. 共享内存概述&#xff08;433.10&#xff09;&#xff08;全双工&#xff09; 2. 共享内存编程实现&#xff08;434.11&#xff09; 共享内存&#xff08;Shared Memory&#xff09;&#xff0c;指两个或多个进程共享一个给定的存储区 特点 共享内存是最快的一种 IPC&…

docker 安装 Centos7

1. 从docker 安装 Centos7 查看有哪些 centos7 系统&#xff1a;docker search centos72. 安装 centos7 docker pull docker.io/ansible/centos7-ansible3.使用镜像创建容器 docker run -itd -p 8022:22 --namevm01 -v /bodata:/bodata -h vm01 --privilegedtrue 688353a31…