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.mzph.cn/news/897292.shtml

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

相关文章

国产操作系统之系统分区及分区的作用

国产操作系统之系统分区及分区的作用和挂载 Linux的系统分区跟Windows有着本质区别,在windows中大家知道c盘一般为系统盘,除c盘系统盘外,我们再分为D、E等文件存储盘,而在Linux中虽然是以文件目录著称的系统,但思路也一样的,比如针对系统分区中 /home、/var 和 /opt 等文…

字节码是由什么组成的?

Java字节码是Java程序编译后的中间产物,它是一种二进制格式的代码,可以在Java虚拟机(JVM)上运行。理解字节码的组成有助于我们更好地理解Java程序的运行机制。 1. Java字节码是什么? 定义 Java字节码是Java源代码经过…

微前端框架 Qiankun 的应用及问题分析

一、Qiankun 的核心应用场景与优势 多技术栈共存与灵活集成 Qiankun 支持主应用与子应用使用不同技术栈(如 Vue、React、Angular 等),通过 HTML Entry 方式接入子应用,无需深度改造子应用即可实现集成,降低了技术迁移成…

function uuid_generate_v4()不存在(二)

说明:之前代码里用到了postgresql内嵌函数uid_generate_v4()生成记录的主键,提示该函数不存在,写了下面这篇博客记录了一下,今天又发现了新的问题,于是补充了这篇博客。 function uuid_generate_v4()不存在&#xff0…

6. 机器人实现远程遥控(具身智能机器人套件)

1. 启动控制脚本 远程作到 Raspberry Pi 中,并运行以下脚本: conda activate lerobotpython lerobot/scripts/control_robot.py \--robot.typelekiwi \--control.typeremote_robot登录笔记本电脑上,同时运行以下脚本: conda ac…

【简单的C++围棋游戏开发示例】

C围棋游戏开发简单示例&#xff08;控制台版&#xff09; ‌核心代码实现‌ #include <iostream> #include <vector> #include <queue> using namespace std;const int SIZE 9; // 简化棋盘为9x9‌:ml-citation{ref"1" data"citationList&…

RK3568平台(音频篇)audio_policy_volumes_drc.xml解析

audio_policy_volumes_drc.xml 是 Android 系统中用于配置音频策略和音量的 XML 文件。它定义了音频流的音量曲线、动态范围控制(DRC)参数以及音频设备的音量设置。该文件通常位于 /vendor/etc/ 或 /system/etc/ 目录下,是 Android 音频框架的重要组成部分。 以下是对 audi…

如何下载安装 PyCharm?

李升伟 整理 一、下载 PyCharm 访问官网 打开 PyCharm 官网&#xff0c;点击 "Download" 按钮25。 版本选择&#xff1a; 社区版&#xff08;Community&#xff09;&#xff1a;免费使用&#xff0c;适合个人学习和基础开发。 专业版&#xff08;Professional&#…

leetcode day27 455+376

455 分发饼干 假设你是一位很棒的家长&#xff0c;想要给你的孩子们一些小饼干。但是&#xff0c;每个孩子最多只能给一块饼干。 对每个孩子 i&#xff0c;都有一个胃口值 g[i]&#xff0c;这是能让孩子们满足胃口的饼干的最小尺寸&#xff1b;并且每块饼干 j&#xff0c;都有…

HPC超算系列2——新手指南1

一&#xff0c;平台简介&#xff1a; 主要是官方手册指南、B站视频&#xff08;培训视频、软件视频&#xff09; 1&#xff0c;超算平台架构&#xff1a; 和普通的家用电脑的架构不同&#xff0c; 主要区别在于&#xff1a;层次化的结构 &#xff08;1&#xff09;超算是有…

K8S单机部署

主线 :部署简单的单节点k8s - sowler - 博客园 学习网址&#xff1a;为什么我不能获取到镜像&#xff0c;ImagePullBackoff | Kuboard docker镜像源&#xff1a;https://chuxia.blog.csdn.net/article/details/145090710?spm1001.2101.3001.6650.3&utm_mediumdistribute…

web3区块链

Web3 是指下一代互联网&#xff0c;也被称为“去中心化互联网”或“区块链互联网”。它是基于区块链技术构建的&#xff0c;旨在创建一个更加开放、透明和用户主导的网络生态系统。以下是关于 Web3 的一些关键点&#xff1a; ### 1. **核心概念** - **去中心化**&#xff1…

SQL Server核心知识总结

SQL Server核心知识总结 &#x1f3af; 本文总结了SQL Server核心知识点,每个主题都提供实际可运行的示例代码。 一、SQL Server基础精要 1. 数据库核心操作 -- 1. 创建数据库&#xff08;核心配置&#xff09; CREATE DATABASE 学生管理系统 ON PRIMARY (NAME 学生管理系统…

android 支持自定义布局、线程安全、避免内存泄漏的 Toast 工具类

支持自定义布局&#xff1a;可以灵活地显示自定义样式的 Toast。 线程安全&#xff1a;确保在主线程中显示 Toast&#xff0c;避免崩溃。 避免内存泄漏&#xff1a;使用 ApplicationContext 和取消机制&#xff0c;防止内存泄漏问题。 工具类&#xff1a;作为一个通用的工具…

嵌入式人工智能应用-第6章 人脸检测

嵌入式人工智能应用 人脸检测 嵌入式人工智能应用1 人脸检测1.1 CNN 介绍1.2 人脸检测原理1.3 MTCNN介绍1.4 NCNN介绍2 系统安装2.1 安装依赖库NCNN2.2 运行对应的库3 总结1 人脸检测 1.1 CNN 介绍 卷积神经网络。卷积是什么意思呢?从数学上说,卷积是一种运算。它是我们学习…

RocketMQ提供了哪些过滤机制?

前言 本篇文章比较简单&#xff0c;分别介绍RocketMQ支持几种过滤机制&#xff0c;其原理和使用。 RocketMQ 提供了多种消息过滤机制&#xff0c;帮根据业务需求高效筛选消息&#xff0c;可以减少不必要的消息传输和处理。以下是其核心过滤机制及使用场景&#xff1a; 1. Tag…

Redis数据结构深度解析:从String到Stream的奇幻之旅(一)

Redis系列文章 《半小时掌握Redis核心操作&#xff1a;从零开始的实战指南》-CSDN博客 Redis数据结构深度解析&#xff1a;从String到Stream的奇幻之旅&#xff08;一&#xff09;-CSDN博客 Redis数据结构深度解析&#xff1a;从String到Stream的奇幻之旅&#xff08;二&…

【Java开发指南 | 第三十五篇】Maven + Tomcat Web应用程序搭建

读者可订阅专栏&#xff1a;Java开发指南 |【CSDN秋说】 文章目录 前言Maven Tomcat Web应用程序搭建1、使用Maven构建新项目2、单击项目&#xff0c;连续按两次shift键&#xff0c;输入"添加"&#xff0c;选择"添加框架支持"3、选择Java Web程序4、点击&…

机器始终是一个机器:技术本质与哲学边界

机器始终是一个机器&#xff1a;技术本质与哲学边界 这句话揭示了人工智能发展中的核心矛盾——无论技术如何进步&#xff0c;机器的本质仍是基于规则与数据的计算系统。这种「机器性」既是其能力的源泉&#xff0c;也是其与生命体智能不可逾越的边界的根源。以下从技术本质、…

JAVA编程【jvm垃圾回收的差异】

jvm垃圾回收的差异 JVM&#xff08;Java Virtual Machine&#xff09;的垃圾回收&#xff08;GC&#xff09;机制是自动管理内存的一种方式&#xff0c;能够帮助开发者释放不再使用的内存&#xff0c;避免内存泄漏和溢出等问题。不同的垃圾回收器&#xff08;GC&#xff09;有…