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.pswp.cn/news/897292.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/897292.shtml
英文地址,請注明出處:http://en.pswp.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;有…