Vercel Serverless

1. 引言

现代应用程序是为适应当前技术环境需求而设计的软件,采用现代开发工具和实践,针对云部署和可扩展性优化。它们由多个模块化小组件组成,便于集成和缩放,具有高度的敏捷性和适应性,能快速响应用户或业务需求变化。

相比传统软件,现代应用程序的优势包括:

  1. 灵活性与可扩展性:模块化架构和云基础设施使其更易适应变化。
  2. 弹性和可靠性:设计上更健壮,能应对故障或高峰负载。
  3. 成本效益:构建和部署更快,开销更低。
  4. 用户体验:注重响应速度、可访问性和可用性,提供更优体验。

下图是 AWS 为用户构建现代化应用所提供的主要的无服务类型的计算服务:

在这里插入图片描述

现代应用程序通常使用敏捷开发方法论进行开发,这种方法强调迭代、协作和以用户为中心的软件开发方法。它们使用现代开发工具和框架,如 React、Angular 和 Vue.js,并经常使用 DockerKubernetes 等技术进行容器化。此外,现代应用程序设计时考虑到基于云的部署和扩展,使用基础设施即代码工具如 Terraform 和云原生服务如 AWS Lambda 。为了确保质量和可靠性,现代应用程序还使用持续集成和交付(CI/CD)实践,自动化构建、测试和部署流程。查看更多服务。

现在让我们假设您是一名 Web 开发人员,并希望使用无服务器的方式将 Web 应用程序部署到云上。虽然如 AWS 这样的云计算服务提供商可以为您提供如 CDN、API 网关、Lambda 、静态存储等各种服务,但如果您是这些服务的首次使用者,将这些服务组合起来,并融入到您的 CI/CD 流程中,学习和部署这些服务的组合会需要一段时间。

Vercel 通过为前端开发人员提供一种基于 JAMStack 的封装以及和云上 Serverless 、CDN 等服务的集成,帮助您解决了以上问题。您只需编写您的应用程序或 API,Vercel 将负责构建并使用无服务器的方式在云上部署。

2. Vercel 公司和服务简介

Vercel 公司(Vercel.com)提供为前端开发者设计的一体化平台,可以高效创建和部署 Web 应用程序。它通过自动配置构建设置和提供详细的构建日志,简化了部署管理过程。同时借助集成的 CI/CD 功能,开发者可以预览其更改,并无缝合并到主分支进行生产部署。Vercel 还支持自定义域名,可以轻松配置并为部署分配个性化的 URL。此外,Vercel 提供了检查、分析和使用情况等监控工具,以跟踪网站性能和用户参与度。借助 Vercel,开发者可以简化开发流程,实现快速、个性化的 Web 内容交付。

Vercel 的整个的架构理念基于如下这幅图所示的 web 应用的演进:

在这里插入图片描述

传统基于三层架构的 web 应用(web 服务器+应用服务器+数据库),适合有经常性的动态内容生成和交互的场景。但如果一个网站绝大部分的内容都不经常更新,比如新闻网站、企业官网、小型电商, CMS(Content Management System)网站,如果使用传统的三层架构,那无论如何都需要一个实时的在线服务,依旧需要大量后端和运维人员维护网站的安全性、稳定性、可伸缩性等。那是否有一种新的可能——通过某种架构,直接动态生成前端页面,并使用 CDN 持续分发静态页面以及数据,从而把内容的管理和内容的显示被完全分隔开来?

3. 什么是 JAMStack

JAMStack 架构在这些场景下给出了新的解决方案:

JAM 是 JavascriptAPIsMarkup 三个术语的首字母组合。简单来说,JAMStack 就是使用 SSG(Static Site Generators)技术,并且不依赖 Web 服务的前端技术栈。

对于 SSR,Next.js 对每个请求在服务器上将页面预渲染为 HTML ,TTFB(首字节到达时间)较慢,但数据始终是最新的。对于 SSG,Next.js 在每个请求之前(例如在构建时)将页面预渲染为 HTML 。HTML 可以由 CDN 进行全局缓存,并且可以立即提供服务。静态生成具有更高的性能,但由于预渲染是提前发生的,数据在请求时可能会变得过时。在 Next.js 中,过期数据的问题,可以通过在构建时间之后逐步添加和更新静态预渲染的页面的方式或者在不包含数据的情况下静态生成页面的部分内容,并由客户端获取更新数据的方式来解决。

所以 JAMStack 并不是传统意义上的静态网站,事实上,JAMStack 包含一个叫 Headless CMS(无头内容管理系统)的后台系统。Vercel 支持很多种流行的 Headless CMS 系统集成。Headless CMS 提供与传统 CMS 相同的丰富协作和创作体验,同时将您的数据作为 API 开放出来。通过 Headless API 就可以将数据与表示层解耦。

综上所述,基于 JAMStack 的网站通常还会有下面的特性:

  • 全站托管于 CDN 上
  • 原子化发布(每次发布都是一次全量、原子性的发布)
  • 灵活的文件缓存策略
  • 基于 Git 的全自动构建、部署流程

在这里插入图片描述

Vercel 在此基础上,对 JAMStack 的理念进行了商业化的落地,结合 AWS 的 AWS Lambda , Amazon S3 – Cloud Object Storage 等服务,Vercel 实现了对 Web 应用的云上无服务化部署。网站的开发人员,只需要专注于代码实现,每一次通过 Github 的代码变更,都会自动触发云上的构建,一个完整的流程包含了对多个云上服务的依次部署和调用。

4. Vercel 部署便利性背后的无服务架构

对于复杂的网站,在构建过程中,Vercel 会使用到 AWS S3 来存储大部分的静态内容,对于每一次的构建,Vercel 都会根据用户购买的服务配额,通过 Amazon Simple Queue Service 服务进行构建任务的排队,同时使用 AWS Fargate 来弹性生成基于容器的构建环境。

构建的产出包含了 Serveless 函数(AWS Lambda ), Edge 函数,优化后的图像,以及静态存储等。

以下就是 Vercel 从构建到发布一个现代化应用的完整过程:

在这里插入图片描述

为了让构建出的环境能够被世界各地的访问者快速访问到,Vercel 利用 Amazon Global Accelerator 服务来进行基于域名的全球加速,使用 GA,不仅利用了 anycast 路由的优点,还可以让托管在 Vercel 上的应用程序获得自动故障转移和 DDoS 保护的好处,从而提高应用弹性和减少攻击影响。

在这里插入图片描述

如上图所示,客户端的请求,会通过域名的加速服务,抵达 Vercel Edge 的某一个最近的部署位置。这是请求进入 Vercel 的 Kubernetes 集群(Amazon EKS)的地方。该请求被检查并过滤以防恶意用户,然后路由到充当反向代理的虚拟机网关。首先,它根据数据(例如传入请求的主机名)确定应向用户提供部署的哪个版本,并获取该部署的元数据。然后,根据请求路径是否与部署元数据中指定的路由匹配,请求要么返回状态代码 404,要么继续生成响应。

针对不同的请求和响应内容,网关会路由到不同的资源上进行处理。上述所有步骤的响应会根据缓存标头进行缓存,以加快将来的查找速度。

借助 Vercel 这样的平台,您可以大大简化现代化应用的部署过程,无需自己设置和维护基础设施架构。Vercel 的部署方式,让你的应用天然具备全球性能和可访问性,确保无论用户位于何处都可以获得最佳的用户体验。

构建在无服务基础上的 Vercel,每周会部署超过百万的 Lambda 函数,并被调用超过 50 亿次。Vercel 帮助 华盛顿邮报(Washinton Post) 平稳度过总统竞选日,帮助 奈飞(Netflix) 大幅度缩短前端的构建时间,更是帮助 Desenio 和 Harry Rosen 这样的电商平台,在类似于国内双十一的促销日平稳地承接了突发的客户流量。

5. 什么是 Fluid Compute

官网的介绍:
Fluid Compute 结合了服务器的效率和无服务器的灵活性,实现了实时、动态的工作负载,例如 API ,流和 AI 。
Vercel 的 CEO 和 CTO 带来的 产品介绍

如果你已经熟悉 VercelServerless FunctionsEdge Functions ,那么 Fluid 将会是你在边缘计算领域体验到的又一次飞跃! Fluid 的目标非常明确:更快、更高效地执行你的边缘函数,为用户带来前所未有的流畅体验。

5.1 Vercel Function 并发

当流量到达我们的数据中心时,它会通过函数负载均衡器路由到函数调用服务。此服务管理的连接范围从单个函数实例到每个函数 100,000 个实例。

在这里插入图片描述

5.2 对比无服务器模型

5.2.1 传统无服务器

这些收益是这样实现的:请记住,在传统的无服务器模型中,每次调用都与单个函数实例绑定。

在这里插入图片描述

在这里插入图片描述

5.2.2 Vercel 并发模式

Vercel 的新系统允许单个实例利用等待后端响应的空闲时间来处理多个调用。

在这里插入图片描述

在这里插入图片描述

总结:

例如,假设一个请求需要 100 毫秒,其中 50 毫秒用于计算,50 毫秒用于等待后端响应。

  • 旧模型:两个请求总共需要 200ms 的计算时间
  • 新模型:一次调用即可处理两个请求,将实际计算时间缩短至约 100 毫秒

在这里插入图片描述

可以看到,同样是四个请求,fluid compute 模式仅需要3s 多一点,但是传统无服务model 下则需要 12s。

5.3 Fluid 的优势和特点:

Fluid Compute 融合了无服务器灵活性和类似服务器的功能。与可能面临冷启动和功能有限等问题的传统无服务器架构不同, Fluid Compute 提供了一种混合解决方案。它克服了无服务器和基于服务器的方法的局限性,发挥了两者的优势,包括:

  • 开箱即用零配置: Fluid Compute 带有预设默认值,可自动优化您的功能,以提高性能和成本效益。
  • 优化并发性:通过处理单个函数实例中的多个调用来优化资源使用率。可与Node.js和Python运行时一起使用。
  • 动态扩展: Fluid Compute 会自动优化现有资源,然后再进行扩展以满足流量需求。这可确保在高流量事件期间实现低延迟,并在较安静的时段实现成本效益。
  • 后台处理:在满足用户请求后,您可以继续使用执行后台任务waitUntil。这可以在后台执行耗时的操作(如日志记录和分析)时提供响应迅速的用户体验。
  • 自动冷启动优化:通过自动字节码优化和生产部署中的功能预热来减少冷启动的影响。
  • 跨区域和可用区故障转移:如果一个可用区 (AZ) 发生故障,则首先故障转移到同一区域内的另一个可用区 (AZ) ,从而确保高可用性。如果该区域内的所有区域都不可用,Vercel 会自动将流量重定向到下一个最近的区域。区域级故障转移也适用于非流动部署。
5.3.1 告别冷启动焦虑

一直以来,Serverless 函数的冷启动问题都是开发者关注的焦点。 想象一下,用户首次访问你的应用,却需要等待几秒钟才能看到内容,这无疑会大大降低用户体验。 而 Fluid 正是为了解决这个问题而生

首先,如果把项目部署到 Vercel 上,Vercel 总是保持至少一个函数处于启动的状态。

在这里插入图片描述

5.3.2 如何开始使用 Fluid:

在这里插入图片描述

  1. 在 Vercel 仪表板导航到您的项目。
  2. 单击“设置”选项卡并选择“功能”部分。
  3. 滚动到Fluid Compute部分并启用Fluid Compute的切换。
  4. 重新部署您的项目以应用更改。
5.3.3 可用的运行时支持

流体计算适用于以下运行时:

  • Node.js
  • Python
5.3.4 优化并发性

Fluid Compute 允许多个调用共享单个函数实例,这对于 AI 应用程序尤其有价值,因为其中诸如获取嵌入、查询矢量数据库或调用外部 API 之类的任务可能受I/O 限制。通过允许在同一实例内并发执行,您可以减少冷启动、最大限度地减少延迟并降低计算成本。

在这里插入图片描述

5.3.5 字节码缓存

使用Node.js 版本 20+时,Vercel 函数使用字节码缓存来减少冷启动时间。这会在 JavaScript 文件首次执行后存储其编译后的字节码,从而无需在后续冷启动期间重新编译。

因此,第一个请求尚未缓存。但是,后续请求受益于缓存的字节码,从而实现更快的初始化。这种优化对于不经常调用的函数尤其有益,因为它们将实现更快的冷启动并减少最终用户的延迟。

字节码缓存仅适用于生产环境,在开发或预览部署中不可用。

对于输出 ESM 的框架,所有 CommonJS 依赖项(例如,、react)都node-fetch将选择加入字节码缓存。

5.3.6 隔离边界和全局状态

在传统的无服务器计算中,隔离边界是指函数的各个实例之间的分离,以确保它们不会互相干扰。这为每个函数提供了一个安全的执行环境。

但是,由于每个功能都使用 microVM 进行隔离,这可能会导致启动时间变慢,因此,当 microVM 处于不活动状态时,您会发现由于空闲时间导致资源使用量增加。

流动计算使用不同的隔离方法。多个调用可以同时共享同一个物理实例(全局状态/进程),而不是为每个函数调用使用一个 microVM。这允许函数共享资源并在同一环境中执行,从而提高性能并降低成本。

在这里插入图片描述

Fluid ComputeVercel 的下一代计算模型,通过融合服务器和无服务器的优势,提供更快、更便宜、更灵活的函数执行方式,无需代码更改即可提升应用的性能和效率。

博客链接

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

1. 树莓派上配置机器人环境(具身智能机器人套件)

1. 安装树莓派系统 镜像下载地址(windows/Mac/Ubuntu),安装Pi5. 2. 环境配置(登录Pi系统) 2.1 启用 SSH From the Preferences menu, launch Raspberry Pi Configuration. Navigate to the Interfaces tab. Select Enable…

ajax之生成一个ajax的demo示例

目录 一. node.js和express ​二. 使用express创建后端服务 三. 创建前端 一. node.js和express ajax是前端在不刷新的情况下访问后端的技术,所以首先需要配置一个后端服务,可以使用node.js和express。 首先生成一个空项目,新建main目录…

第本章:go 切片

注意: 切片必须要初始化 才能使用 ,切片是引用类型 a :[]int{} // 这上叫始化 此时并没有申请内存 // 如果要追加值的话: append ints : append(a, 1, 2, 3)a : make([]int,5) // 声明切片类型var a []string //声明一…

RISC-V汇编学习(三)—— RV指令集

有了前两节对于RISC-V汇编、寄存器、汇编语法等的认识,本节开始介绍RISC-V指令集和伪指令。 前面说了RISC-V的模块化特点,是以RV32I为作为ISA的核心模块,其他都是要基于此为基础,可以这样认为:RISC-V ISA 基本整数指…

双指针8:18. 四数之和

链接&#xff1a;18. 四数之和 - 力扣&#xff08;LeetCode&#xff09; 题解&#xff1a; 本题和三数之和基本一样&#xff0c;参见双指针7&#xff1a;LCR 007. 三数之和-CSDN博客 class Solution { public:vector<vector<int>> fourSum(vector<int>&am…

EasyRTC嵌入式音视频通话SDK:基于ICE与STUN/TURN的实时音视频通信解决方案

在当今数字化时代&#xff0c;实时音视频通信技术已成为人们生活和工作中不可或缺的一部分。无论是家庭中的远程看护、办公场景中的远程协作&#xff0c;还是工业领域的远程巡检和智能设备的互联互通&#xff0c;高效、稳定的通信技术都是实现这些功能的核心。 EasyRTC嵌入式音…

腾讯云物联网平台(IoT Explorer)设备端使用

1、直接看图流程 2、跑起来demo,修改产品id,设备名称,设备秘钥。 3、连接部分 4、修改默认地址和端口 sdk里面的地址默认是带着产品ID拼接的,咱们现在中铁没有泛域名解析,要改下这里。把+productID都去掉,然后地址里的.也去掉。

揭开AI-OPS 的神秘面纱 第四讲 AI 模型服务层(自研方向)

AI 模型服务层技术架构与组件选型分析(自研方向) 基于自有开发寻训练方向 AI 模型服务层 是 AI-Ops 架构的 核心智能引擎,负责构建、训练、部署、管理和监控各种 AI 模型,为上层应用服务层提供智能分析和决策能力。 AI 模型服务层需要提供一个灵活、可扩展、高性能的平台…

electron + vue3 + vite 主进程到渲染进程的单向通信

用示例讲解下主进程到渲染进程的单向通信 初始版本项目结构可参考项目&#xff1a;https://github.com/ylpxzx/electron-forge-project/tree/init_project 主进程到渲染进程&#xff08;单向&#xff09; 以Electron官方文档给出的”主进程主动触发动作&#xff0c;发送内容给渲…

在人工智能软件的帮助下学习编程实例

1 引言 本文记录在人工智能软件的帮助下学习一种全新的编程环境的实例&#xff0c;之所以提人工智能软件而不是单指DeepSeek&#xff0c;一方面DeepSeek太火了&#xff0c;经常服务器繁忙&#xff0c;用本机本地部署的最多运行70b模型&#xff0c;又似乎稍差。另一方面也作为一…

记录一下Django的密码重置(忘记密码)

一. Django默认的密码重置 1.路由 # url.pyfrom django.contrib.auth import views as auth_viewsurlpatterns [# 密码重置path(password_reset/, auth_views.PasswordResetView.as_view(), namepassword_reset),# 用户输入邮箱后&#xff0c;跳转到此页面path(password_res…

零售交易流程相关知识(top-down拆解)

引入 关于POS机交易时的后台数据交互 模块之间数据交换&#xff0c;都可以能被窃取或篡改。由此引入加密、解密机制和签名、验签机制 经典的加密、解密机制&#xff1a; 对称加密&#xff1a;DES\ TDES\ AES\ RC4 非对称加密&#xff1a;RSA\ DSA\ ECC 经典的签名、验签…

Web网页开发——水果忍者

1.介绍 复刻经典小游戏——水果忍者 2.预览 3.代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title&…

项目实战--网页五子棋(对战功能)(8)

上期我们完成了websocket建立连接后的数据初始化&#xff0c;今天我们完成落子交互的具体代码&#xff1a; 这里我们先复习一下&#xff0c;之前约定好的落子请求与响应包含的字段&#xff1a; 1. 发送落子请求 我们在script.js文件中找到落子的相关方法&#xff0c;增加发送请…

从0开始的操作系统手搓教程24——完成我们的键盘驱动子系统

目录 所以&#xff0c;我们现来说说转义字符 我们需要如何处理扫描码 当键入的是双字符键时 当键入的是字母键时 下一篇 我们下面来看看我们的键盘驱动子系统是一个怎么个事情。 驱动程序&#xff0c;你可以认为是对硬件的一层封装。我们按照手册规格的规定姿势&#xff0…

根据输入汉字生成带拼音的米字格字帖

实现了下面功能&#xff1a; 1、根据输入汉字&#xff0c;自动调整米字格和四线格的行数&#xff1b; 2、给汉字自动加上拼音和声调&#xff08;暂时不考虑多音字&#xff09;&#xff1b; 3、汉字在米字格&#xff0c;拼音在四线格&#xff0c; 4、第一列用黑色&#xff0c;2-…

软件高级架构师 - 软件工程

补充中 测试 测试类型 静态测试 动态测试 测试阶段 单元测试中&#xff0c;包含性能测试&#xff0c;如下&#xff1a; 集成测试中&#xff0c;包含以下&#xff1a; 维护 遗留系统处置 高水平低价值&#xff1a;采取集成 对于这类系统&#xff0c;采取 集成 的方式&…

DeepSeek专题:DeepSeek-V2核心知识点速览

AIGCmagic社区知识星球是国内首个以AIGC全栈技术与商业变现为主线的学习交流平台&#xff0c;涉及AI绘画、AI视频、大模型、AI多模态、数字人以及全行业AIGC赋能等100应用方向。星球内部包含海量学习资源、专业问答、前沿资讯、内推招聘、AI课程、AIGC模型、AIGC数据集和源码等…

电脑如何拦截端口号,实现阻断访问?

如果你弟弟喜欢玩游戏&#xff0c;你可以查询该应用占用的端口&#xff0c;结合以下方法即可阻断端口号&#xff0c;让弟弟好好学习&#xff0c;天天向上&#xff01; 拦截端口可以通过防火墙和路由器进行拦截 &#xff0c;以下是常用方法&#xff1a; 方法 1&#xff1a;使用…

【NLP 32、文本匹配任务 —— 深度学习】

大劫大难以后&#xff0c;人不该失去锐气&#xff0c;不该失去热度&#xff0c;你镇定了却依旧燃烧&#xff0c;你平静了却依旧浩荡&#xff0c;致那个从绝望中走出来的自己&#xff0c;共勉 —— 25.1.31 使用深度学习在文本匹配任务上主要有两种方式&#xff1a;① 表示型 ②…