java源碼分享網(wǎng)站源碼(java門戶網(wǎng)站源碼)
作者 | 舒超
Serverless 是什么
根據(jù) CNCF 的定義,Serverless 的概念是指構(gòu)建和運行不需要服務(wù)器管理的應(yīng)用程序。它描述了一種更細粒度的部署模型,在該模型中,應(yīng)用程序被捆綁為一個或多個功能,被上傳到一個平臺,然后根據(jù)當前所需的確切需求執(zhí)行、擴展和計費。所以首先需要明確的一點是,Serverless 并非指托管和運行我們的應(yīng)用程序不再需要服務(wù)器,而是指從前耗費研發(fā)和運維人員無數(shù)精力和資源的 CI/CD、服務(wù)器配置維護更新、IT 資源容量的規(guī)劃和伸縮等工作,被 Serverless 這個概念下包含的技術(shù)體系所封裝了。研發(fā)專注于業(yè)務(wù)邏輯的編寫,運維向 SRE 轉(zhuǎn)型,負責技術(shù) SLA 的制定和保障工作。這也是技術(shù)體系又一維度的分層體現(xiàn)(其它類比匯編語言和高級語言,OS 和應(yīng)用軟件)。
Serverless 發(fā)展歷程
什么背景下誕生了 Serverless
Serverless 所指向的基礎(chǔ)設(shè)施架構(gòu),歷史上經(jīng)歷了多次的迭代:從早期的 MVC(模型 - 試圖 - 控制器)為主的單體形式,到后來的 SOA,再到最近十年興起的微服務(wù)架構(gòu)和云原生。整個基礎(chǔ)支撐功能是逐步在拆分解耦,以垂直提升研發(fā)和運維效率。橫向分層上,虛擬化技術(shù)打通了物理資源的隔閡,減輕了用戶管理基礎(chǔ)架構(gòu)的負擔。容器 /PaaS 平臺則進一步抽象,提供了應(yīng)用的依賴服務(wù)、運行環(huán)境和底層所需的計算資源。這使得應(yīng)用的開發(fā)、部署和運維的整體效率再度提升。在這樣的背景下,Serverless 其實代表了一種更徹底的屏蔽與分層,將應(yīng)用架構(gòu)堆棧中的各類資源的管理全部委托給平臺,免去基礎(chǔ)設(shè)施的運維,使用戶能夠聚焦高價值的業(yè)務(wù)領(lǐng)域,進一步提高軟件應(yīng)用和運營的生產(chǎn)力。
圖 1:應(yīng)用架構(gòu)與計算抽象的演進示意圖
發(fā)展大事記
2006 年,倫敦的一家公司發(fā)布了名為 Zimki 的平臺,該平臺提供了端到端的 Java 開發(fā)能力,并且最早提出了“Pay as you go”的概念,但在商業(yè)上并未取得顯著成功。
展開全文
2008 年,谷歌發(fā)布 App Engine 服務(wù),用戶的開發(fā)方式得到了根本的變革,無須考慮預(yù)分配多少資源,也無須考慮操作系統(tǒng)的實現(xiàn)。
2012 年,Ken Fromm 在《軟件和應(yīng)用的未來是 Serverless》中率先提出了 Serverless 的概念。
2014 年,AWS 重磅發(fā)布函數(shù)計算產(chǎn)品 Lambda,開啟了 Serverless 架構(gòu)的新時代。
2016 年,Azure Function、GCP(Google Cloud Platform)以及 IBM Open Whisk 相繼發(fā)布 Serverless 計算平臺。
2017 年,騰訊云和阿里云先后發(fā)布了 Serverless 計算產(chǎn)品——云函數(shù)和函數(shù)計算;同年,谷歌 GCP 發(fā)布了 Firebase 產(chǎn)品,提供多端一體化開發(fā)的 Serverless 解決方案。
2018 年,谷歌開源 Knative,嘗試將 Serverless 架構(gòu)標準化。同年,全球知名 IT 咨詢調(diào)研機構(gòu) Gartner 發(fā)布報告,將 Serverless 架構(gòu)列為十大未來將影響基礎(chǔ)設(shè)施和運維的技術(shù)趨勢之一。
2019 年,騰訊云和 Serverless.com 達成戰(zhàn)略合作,共同開發(fā) Serverless Framework 產(chǎn)品,提供 Serverless 開發(fā)的一站式解決方案;Microsoft Azure 也于 2019 年推出了 Azure Functions。
2020 年,Google Cloud 推出 Cloud Run 服務(wù),AWS Lambda 支持 Ruby 等更多語言。
2021 年,AWS Lambda 引入新的 Lambda Edge 服務(wù),它可以將內(nèi)容置于全球 CDN 網(wǎng)絡(luò)上,從而提供快速和可靠的服務(wù)
2022 年,阿里云宣布核心產(chǎn)品全面 Serverless 化。
模型架構(gòu)及原語
Serverless 是一種“全托管”的架構(gòu)理念,包括兩個核心特征:一是按實際使用量付費,類似“電網(wǎng)”模式,按請求調(diào)用次數(shù)或是實際數(shù)據(jù)存儲量,用多少付多少;二是自適應(yīng)彈性、免運維。根據(jù)使用情況,云產(chǎn)品對底層資源進行自動伸縮,客戶不需要提前預(yù)購資源,用完即回收。
Serverless 將提供服務(wù)資源的基礎(chǔ)設(shè)施抽象成各種服務(wù),以 API 接口的方式供給用戶按需調(diào)用,真正做到按需伸縮、按使用收費。這種架構(gòu)體系結(jié)構(gòu)消除了對傳統(tǒng)的海量持續(xù)在線服務(wù)器組件的需求,降低了開發(fā)和運維的復雜性,降低運營成本并縮短了業(yè)務(wù)系統(tǒng)的交付周期,使得用戶能夠?qū)W⒃趦r值密度更高的業(yè)務(wù)邏輯的開發(fā)上。
目前業(yè)界較為公認的 Serverless 架構(gòu)主要包含兩個方面,即提供計算資源的函數(shù)服務(wù)平臺 FaaS 和提供托管云服務(wù)的后端服務(wù) BaaS。
函數(shù)即服務(wù) (Function as a Service)
函數(shù)即服務(wù)是一項基于事件驅(qū)動的函數(shù)托管計算服務(wù)。通過函數(shù)服務(wù),開發(fā)者只需編寫業(yè)務(wù)函數(shù)代碼并設(shè)置運行的條件,無需配置和管理服務(wù)器等基礎(chǔ)設(shè)施。函數(shù)代碼運行在無狀態(tài)的容器中,由事件觸發(fā)且短暫易失,并完全由第三方管理,基礎(chǔ)設(shè)施對應(yīng)用開發(fā)者完全透明。函數(shù)以彈性、高可靠的方式運行,并且按實際執(zhí)行資源計費,如不執(zhí)行則不產(chǎn)生費用。典型代表有 AWS Lambda、Azure Functions、Google Cloud Functions 和 OpenFaaS。
但現(xiàn)階段函數(shù)即服務(wù)的局限性也較為明顯。首先,代碼調(diào)試較為復雜。FaaS 平臺的代碼調(diào)試大多需要下載到本地,調(diào)試成功后上傳至函數(shù),在線調(diào)試工具功能尚不完善,調(diào)試的復雜度較高。其次,低延時業(yè)務(wù)暫不適用。FaaS 中的代碼通過事件觸發(fā),如果執(zhí)行結(jié)束一段時間沒有再次觸發(fā),執(zhí)行函數(shù)的容器會銷毀,再次啟動會有啟動的開銷,增加啟動延遲,所以目前不適用低延遲的業(yè)務(wù),如金融交易等。
后端即服務(wù) (Backend as a Service)
BaaS 的概念涵蓋范圍較廣,覆蓋了應(yīng)用有可能依賴的所有第三方服務(wù),如云數(shù)據(jù)庫、身份驗證 (如 Auth0、AWS Cognito)、對象存儲等服務(wù),開發(fā)人員通過 API 和由 BaaS 服務(wù)商提供的 SDK,能夠集成所需的所有后端功能,而無需構(gòu)建后端應(yīng)用,更不必管理虛擬機或容器等基礎(chǔ)設(shè)施,就能保證應(yīng)用的正常運行。典型產(chǎn)品有 APICloud、Bmob、友盟等。
目前常見的 BaaS 服務(wù)包括數(shù)據(jù)庫管理、云存儲、用戶認證、推送通知、遠程更新、消息隊列。
Serverless 行業(yè)生態(tài)現(xiàn)狀
目前 Serverless 的技術(shù)生態(tài)主要活躍在公有云的云函數(shù)服務(wù)領(lǐng)域,國內(nèi)外主要云服務(wù)商都具備云函數(shù)產(chǎn)品。這主要是因為公有云的云函數(shù)服務(wù)擁有一系列完善的云計算資源,這使得 Serverless 能夠更快地開發(fā)和部署應(yīng)用程序。而且,公有云還提供了完整的安全體系,可以確保 Serverless 技術(shù)的安全性。此外,公有云的云函數(shù)服務(wù)也能夠提供便捷的數(shù)據(jù)存儲和管理,從而使 Serverless 應(yīng)用更便捷、更高效。公有云服務(wù)基本可滿足用戶 Serverless 應(yīng)用的搭建需求。私有云的解決方案領(lǐng)域仍舊以國外開源技術(shù)為主。
工具層來看,獨立 BaaS 服務(wù)(開源、商業(yè)產(chǎn)品)主要由國外服務(wù)商提供,國內(nèi)服務(wù)商提供的相關(guān)工具主要供給各自產(chǎn)品使用,普適多云平臺的工具產(chǎn)品多集中在開發(fā)框架層面。
平臺層
平臺層提供全托管的運行環(huán)境,提供函數(shù)單元所需的計算環(huán)境并自行維護服務(wù)器資源、網(wǎng)絡(luò)資源、消息分發(fā)和負載均衡等功能,是整個 Serverless 架構(gòu)的基礎(chǔ)。國內(nèi)主要公有云服務(wù)商均已推出云函數(shù)產(chǎn)品,開源的 Serverless 架構(gòu)框架也層出不窮,下文將選取較為典型的幾個平臺進行介紹。
公有云函數(shù)計算服務(wù)
阿里云函數(shù)計算
事件驅(qū)動的全托管計算服務(wù)。通過函數(shù)計算,無需管理服務(wù)器等基礎(chǔ)設(shè)施,只需編寫代碼并上傳。函數(shù)計算會準備好計算資源,以彈性、可靠的方式運行代碼,并提供日志查詢、性能監(jiān)控、報警等功能。
阿里云函數(shù)計算工作流程示意圖(來源:阿里云官網(wǎng))
阿里云函數(shù)計算在視頻解碼場景中的流程架構(gòu)(來源:阿里云官網(wǎng))
華為云函數(shù)工作流 (FunctionGraph)
華為云提供的一款無服務(wù)器 (Serverless) 計算服務(wù),無服務(wù)器計算是一種托管服務(wù),服務(wù)提供商會實時為你分配充足的資源,而不需要預(yù)留專用的服務(wù)器或容量,真正按實際使用付費。
華為云函數(shù)工作流在實時數(shù)據(jù)流處理中的流程架構(gòu)(來源:華為云官網(wǎng))
騰訊云
騰訊云云函數(shù)(Serverless Cloud Function,SCF)是騰訊云為企業(yè)和開發(fā)者們提供的無服務(wù)器執(zhí)行環(huán)境,幫助用戶在無需購買和管理服務(wù)器的情況下運行代碼,是實時文件處理和數(shù)據(jù)處理等場景下理想的計算平臺。用戶只需使用 SCF 平臺支持的語言編寫核心代碼并設(shè)置代碼運行的條件,即可在騰訊云基礎(chǔ)設(shè)施上彈性、安全地運行代碼。
騰訊云云函數(shù)在移動及 Web 應(yīng)用后端中的流程架構(gòu)(來源:騰訊云官網(wǎng))
AWS
AWS Lambda 是一項計算服務(wù),幫助用戶無需預(yù)配置或管理服務(wù)器即可運行代碼。Lambda 在可用性高的計算基礎(chǔ)設(shè)施上運行代碼,執(zhí)行計算資源的所有管理工作,其中包括服務(wù)器和操作系統(tǒng)維護、容量調(diào)配和彈性伸縮和記錄。借助 Lambda,用戶可以為幾乎任何類型的應(yīng)用程序或后端服務(wù)運行代碼,用戶只需要以 Lambda 支持的一種語言提供自己的代碼。
用戶可以將代碼組織到 Lambda 函數(shù)。只有在需要時 Lambda 才運行用戶的函數(shù),并且能自動擴展,從每天幾個請求擴展到每秒數(shù)千個請求。用戶只需為消耗的計算時間付費,代碼未運行時不產(chǎn)生費用。
AWS Lambda 在文件處理中的流程架構(gòu)(來源:AWS官網(wǎng))
開源無服務(wù)器框架
Knative
Kubernetes 已經(jīng)成為容器編排的事實標準。但是 Kubernetes 的定位是一個容器平臺而不是代碼平臺。作為運行和管理容器的平臺,Kubernetes 功能強大,但是這些容器是如何構(gòu)建、運行、擴展和路由,很大程度上是由用戶自己決定。
Knative 基于 Kubernetes 平臺,是用來構(gòu)建、部署和管理現(xiàn)代無服務(wù)器架構(gòu)的工作負載的框架,它將云原生應(yīng)用開發(fā)的三個領(lǐng)域的最佳實踐結(jié)合起來,即構(gòu)建容器(和函數(shù))、為工作負載提供服務(wù)(和動態(tài)擴展)以及事件。Knative 是由谷歌與 Pivotal、IBM、Cisco、Red Hat 等云原生技術(shù)廠商緊密協(xié)作開發(fā)的。
Knative 擴展了 Kubernetes,提供了一組中間件組件,它們對于構(gòu)建現(xiàn)代、源碼中心化以及基于容器的應(yīng)用至關(guān)重要,這些應(yīng)用可以運行在企業(yè)內(nèi)部、云端或第三方數(shù)據(jù)中心中。
Knative 構(gòu)建在 Kubernetes 的基礎(chǔ)上,為構(gòu)建和部署 Serverless 架構(gòu)和基于事件驅(qū)動的應(yīng)用程序提供了一致的標準模式。Knative 減少了這種全新的軟件開發(fā)方法所產(chǎn)生的開銷,同時還把路由和事件的復雜性抽象出來。
Apache OpenWhisk
Apache OpenWhisk 是一個開源的分布式無服務(wù)器平臺,可以執(zhí)行函數(shù)以響應(yīng)任何規(guī)模的事件。OpenWhisk 使用 Docker 容器管理基礎(chǔ)架構(gòu)、服務(wù)器和擴展,因此用戶可以專注于構(gòu)建出色且高效的應(yīng)用程序。
OpenWhisk 平臺支持一種編程模型,在該模型中,開發(fā)人員可以使用任何支持的編程語言編寫功能邏輯(稱為 Actions),這些邏輯可以動態(tài)調(diào)度和運行以響應(yīng)來自外部源(Feeds)或 HTTP 請求的關(guān)聯(lián)事件(通過觸發(fā)器)。該項目包括一個基于 REST API 的命令行界面 (CLI) 以及其他工具來支持打包、目錄服務(wù)和許多流行的容器部署選項。
Riff Project
Riff 使用自定義資源定義來枚舉 Kubernetes 中的函數(shù)和主題。此外,它還部署了一對控制器盒來管理這些資源——主題和功能控制器。主題控制器使用基礎(chǔ)事件代理處理主題狀態(tài)更改。功能控制器監(jiān)聽主題事件并管理功能部署、銷毀和擴展需求,包括:Riff CLI 安裝 Knative 和使用 Knative serving 基于 Kaniko-based 集群的 builds、developer workflow 等等。
生態(tài)工具鏈
應(yīng)用框架
螞蟻金服 SOFAStack
SOFAStack 是螞蟻金服自主研發(fā)的分布式中間件,為用戶提供安全、穩(wěn)定、可靠、高效、敏捷的基礎(chǔ)架構(gòu)能力,用于打造大規(guī)模高可用的分布式系統(tǒng)架構(gòu)。SOFAStack 以輕量級服務(wù)框架為基礎(chǔ),兼容 Spring Boot、Spring Cloud、Dubbo 工程,提供應(yīng)用中心、微服 務(wù)、消息隊列、數(shù)據(jù)訪問代理、分布式鏈路跟蹤、分布式事務(wù)、Serverless 等服務(wù)。
螞蟻金服的 Serverless 服務(wù)配備文件儲存、數(shù)據(jù)儲存、服務(wù)托管和函數(shù)計算等諸多能力。文件儲存方面,Serverless 平臺為開發(fā)者提供了基于 CDN 的文件 BaaS 服務(wù),開發(fā)者只需將文件通過接口上傳,即可直接享受到 CDN 的能力,為文件帶來最佳的訪問性能以及海量的訪問量。數(shù)據(jù)儲存方面,用戶可以通過客戶端的 SDK 操作數(shù)據(jù)庫里的數(shù)據(jù),無需服務(wù)端參與,即可完成數(shù)據(jù)的存取操作。通過服務(wù)托管,開發(fā)者無需再關(guān)心底層環(huán)境、后端運維的各種細節(jié)。開發(fā)者只需將業(yè)務(wù)代碼提交到云端即可。通過函數(shù)計算,開發(fā)者可以將原有的復雜計算邏輯拆分為多個計算函數(shù),然后通過事件或者 HTTP 方式串接起計算業(yè)務(wù),在實現(xiàn)對業(yè)務(wù)解耦的同時,減少對后端資源成本的依賴。
騰訊云 Serverless 框架
TCSAM 是用于在騰訊云上定義 Serverless 應(yīng)用的模型?;?TCSAM,騰訊云提供了 TCF 命令行工具,用于云函數(shù)的管理和部署。
TCF 全稱為 Tencent Cloud Function,是騰訊云 Serverless 云函數(shù) SCF (Serverless Cloud Function) 產(chǎn)品的命令行工具。通過 TCF 命令行工具,用戶可以方便地實現(xiàn)函數(shù)打包、部署、本地調(diào)試,也可以方便地生成云函數(shù)的項目并基于 demo 項目進行進一步開發(fā)。
TCF 通過 TCSAM 規(guī)范的模板配置文件,完成函數(shù)及相關(guān)周邊資源的描述,并基于配置文件實現(xiàn)本地代碼及配置部署到云端的過程。同時,TCF 命令行工具提供本地事件模擬、本地調(diào)試等用于調(diào)試的相關(guān)功能,方便用戶進行本地調(diào)試及測試。TCF 還提供了通過使用命令行工具將函數(shù)的管理、測試、部署、發(fā)布對接到持續(xù)集成及持續(xù)發(fā)布流程中的能力。
可視化
無服務(wù)架構(gòu)的應(yīng)用通常會部署成百上千個函數(shù),訪問調(diào)用的復雜性急劇上升。通過監(jiān)控 / 可視化工具,可幫助用戶或運維人員監(jiān)測鏈路狀態(tài),掌握函數(shù)運行狀態(tài),快速定位問題源頭。
Grafana
Grafana 是一個跨平臺的開源的度量分析和可視化工具,可以通過將采集的數(shù)據(jù)查詢?nèi)缓罂梢暬故?,并對監(jiān)測指標做告警通知,常用于對基礎(chǔ)設(shè)施和應(yīng)用程序分析的時間序列數(shù)據(jù)進行可視化。Grafana 搭載后端的 Prometheus 數(shù)據(jù)源,可以為多種開源 Serverless 框架構(gòu)建函數(shù)計算監(jiān)測平臺。
測試
由于公有云的函數(shù)服務(wù)沒有開發(fā)環(huán)境,開發(fā)人員必須運行函數(shù)查看它們真實的運行情況,因此創(chuàng)建模擬測試環(huán)境并用于代碼調(diào)試的工具變得非常必要。
華為云函數(shù)服務(wù) Serverless Sandbox (HSS)
用戶開發(fā)的函數(shù)在部署到華為云之前,可以使用華為云 Serverless Sandbox (HSS) 在本地開發(fā)和測試 Serverless 應(yīng)用。該工具可以用來在本地測試函數(shù)功能,驗證華為 Serverless 應(yīng)用模型 (HSAM),并為各種事件源本地生成樣本有效載荷;提供了豐富的 cloud event 命令,可以將來自華為云服務(wù)的事件直接路由到本地環(huán)境來調(diào)試本地函數(shù)功能。
百度云 CFC BSAM 工具
BSAM CLI 是一個基于 BCE SAM 規(guī)范的命令行工具,它提供了本地開發(fā)環(huán)境,幫助用戶在把函數(shù)上傳到百度云 CFC 之前,在本地進行函數(shù)的開發(fā)、分析和執(zhí)行。
CI/CD
函數(shù)應(yīng)用跨區(qū)域移植部署的配置非常繁瑣,極易出問題。能夠?qū)?yīng)用的配置描述分離,復用給多個應(yīng)用可以大大簡化移植部署的難度。
阿里云 Fun 2.0
阿里云 Fun 2.0 是一款 Serverless 應(yīng)用開發(fā)的工具,可以幫助用戶定義函數(shù)計算、API 網(wǎng)關(guān)、日志服務(wù)等資源。Fun 2.0 引入了全新設(shè)計的 Serverless Application Model (SAM) 規(guī)范。
SAM 作為一種基礎(chǔ)設(shè)施即代碼 (Infrastructure as Code),允許用戶描述函數(shù)計算及其相關(guān)云資源。用戶可以使用同一份模板文件,跨 region 或者賬戶部署云應(yīng)用。描述云資源的模板文件,也會成為項目代碼的一部分,在不同開發(fā)者之間共享。這極大地降低了 Serverless 應(yīng)用的交付難度、管理難度、移植難度。除了 1.0 版本支持的函數(shù)、API 網(wǎng)關(guān)的配置,2.0 還有以下功能更新:
增強了對函數(shù)的描述能力:環(huán)境變量、日志服務(wù)、角色屬性、VPC 屬性等。
支持配置新的應(yīng)用資源,比如 Table Store、日志服務(wù)等。
代碼上傳可以指定文件、目錄、壓縮包以及 OSS 路徑。
更多的 API 網(wǎng)關(guān)參數(shù)配置。
增強了對函數(shù)的描述能力:環(huán)境變量、日志服務(wù)、角色屬性、VPC 屬性等。
支持配置新的應(yīng)用資源,比如 Table Store、日志服務(wù)等。
代碼上傳可以指定文件、目錄、壓縮包以及 OSS 路徑。
更多的 API 網(wǎng)關(guān)參數(shù)配置。
Serverless 的適用場景
當前階段,結(jié)合 Serverless 架構(gòu)的基于事件驅(qū)動、應(yīng)用代碼動態(tài)部署、完全動態(tài)地進行大規(guī)模資源擴縮等特點,可以把 Serverless 架構(gòu)的適用場景分為下面幾類:
基于時間的內(nèi)容處理應(yīng)用
實時文件處理
有些應(yīng)用會根據(jù)不同的應(yīng)用需求將圖片裁剪成不同尺寸,或添加不同的標簽水印。視頻類的應(yīng)用會將視頻流轉(zhuǎn)碼成不同的清晰度推送給不同服務(wù)。當圖片或者視頻流通過對象存儲上傳時便會觸發(fā)相應(yīng)的函數(shù)計算,根據(jù)計算規(guī)則自動按需處理,整個過程無需再搭建額外服務(wù)器,也無需人工干預(yù)。
定制事件觸發(fā)
以用戶注冊時發(fā)郵件驗證郵箱地址的場景舉例,可以通過定制的事件來觸發(fā)后續(xù)的注冊流程,而無需再配置額外的應(yīng)用 Serverless 來處理后續(xù)的請求。
大規(guī)模數(shù)據(jù)處理和計算類
人工智能推理預(yù)測
人工智能推理預(yù)測的調(diào)用需求會隨著業(yè)務(wù)的起伏而變化,具有一定的波動性,這和人工智能訓練時的較固定計算周期和運行時長有所不同。同時 AI 推理一般會使用 GPU 加速,這種明顯的峰值變化會導致大量的資源浪費。使用 Serverless 架構(gòu)技術(shù)可以有效解決上述問題。高業(yè)務(wù)請求到來時,云函數(shù)的執(zhí)行實例自動擴容,滿足業(yè)務(wù)需求;而在請求低谷或無請求到來時,云函數(shù)自動縮容甚至完全停止,節(jié)省資源使用。
批處理或計劃任務(wù)
每天只需短期運行就能以異步計算的方式進行強大的并行計算能力,I/O 或網(wǎng)絡(luò)訪問的任務(wù)非常適合 Serverless 架構(gòu)。這些任務(wù)可以以彈性方式運行時消費所需的資源,并且,在不被使用的當天剩余時間內(nèi),不消耗資源成本。典型場景有定期的數(shù)據(jù)備份等。
輕后端服務(wù)
通過將 Serverless 云函數(shù)和其他云服務(wù)緊密結(jié)合,開發(fā)者能夠構(gòu)建可彈性擴展的移動或 Web 應(yīng)用程序,輕松創(chuàng)建豐富的 Serverless 后端,而且這些程序可在多個數(shù)據(jù)中心高可用運行,無需在可擴展性、備份冗余方面執(zhí)行任何管理工作。
移動應(yīng)用
使用 Serverless 架構(gòu)技術(shù)構(gòu)建移動后端服務(wù)是非常常用的場景。開發(fā)人員可基于云平臺的后端服務(wù)來構(gòu)建應(yīng)用,這使得開發(fā)人員可以更加專注在移動應(yīng)用的優(yōu)化上,只要按需選擇云服務(wù)商提供的豐富的后端服務(wù)即可。典型案例有微信小程序的開發(fā)等。
IoT
物聯(lián)網(wǎng)的應(yīng)用場景中,設(shè)備傳輸數(shù)據(jù)量小,且往往是以固定時間間隔進行數(shù)據(jù)傳輸,數(shù)據(jù)傳輸存在明顯的波峰波谷特征。數(shù)據(jù)傳輸?shù)牟ǚ鍟r段觸發(fā)后端函數(shù)服務(wù)集中處理,處理結(jié)束后快速釋放,提升資源的利用效率。
Serverless 典型落地案例
高德出行
高德是中國領(lǐng)先的數(shù)字地圖內(nèi)容、導航和位置服務(wù)解決方案提供商。自主出行是高德地圖的核心業(yè)務(wù),涉及到用戶出行相關(guān)的功能訴求,承載了高德地圖 APP 內(nèi)最大的用戶流量。自主出行核心業(yè)務(wù)中應(yīng)用 Node FaaS 的部分場景包括主圖場景頁、路線規(guī)劃頁和導航結(jié)束頁等。
此場景類型屬于無狀態(tài)服務(wù),基于阿里云 Serverless 成熟的生態(tài),高德最終選擇接入 Node FaaS(阿里云函數(shù)計算)服務(wù)能力,出行前端搭建了場景推薦卡片服務(wù)。卡片的 UI 模版獲取、數(shù)據(jù)請求聚合 邏輯處理、拼接生成 Schema 的能力均在 FaaS 層得到實現(xiàn),客戶端根據(jù)服務(wù)下發(fā)的 Schema 直接渲染展示,達到更加輕便靈活的目標。在“十一出行節(jié)”峰值場景中,Serverless 整體服務(wù)成功率均大于 99.99% ,總計 100W+ 次觸發(fā) / 分鐘,數(shù)十萬 QPS,各場景的服務(wù)平均響應(yīng)時間均在 60ms 以下,服務(wù)穩(wěn)定性超出預(yù)期。
支付寶小程序
傳統(tǒng)模式下,小程序開發(fā)遭遇挑戰(zhàn)。在傳統(tǒng)模式中,程序員開發(fā)一個小程序的時候,依舊需要采用像開發(fā)傳統(tǒng) APP 一樣的方式進行業(yè)務(wù)開發(fā)。在整體業(yè)務(wù)開發(fā)中,需要前端開發(fā)、后臺開發(fā)、運維人員、安全人員等多個角色的協(xié)同,導致人力成本和資源成本高昂,不利于小程序的開發(fā)。螞蟻金服采用 Serverless 模式這種更高效的研發(fā)方式來實現(xiàn)小程序的快速布局?;谖浵伒?Serverless 產(chǎn)品 Basement,可以用更高效、簡單的方式快速實現(xiàn)穩(wěn)定、可靠的小程序后臺服務(wù)。Basement 的技術(shù)架構(gòu)如下圖所示:
螞蟻金融云 Serverless 應(yīng)用服務(wù) (SAS) 和函數(shù)計算共同組成了小程序 Serverless 的后端解決方案。SAS 提供的關(guān)鍵后端能力包括:
1) 穩(wěn)定的 Serverless 服務(wù)引擎:提供了服務(wù)所在集群的運行狀態(tài)和日志等基本信息。
2) 豐富的應(yīng)用服務(wù)能力:支持從鏡像、代碼包等方式多維部署應(yīng)用。
3) 靈活的觸發(fā)器配置:提供基于事件、定時任務(wù)和網(wǎng)絡(luò)訪問等方式的觸發(fā)器配置以及彈性伸縮策略。
支付寶小程序 Serverless 模式帶來的優(yōu)勢顯而易見:
1) 研發(fā)效率提升:實現(xiàn)了復雜底層邏輯的托管,用戶只需完成自己業(yè)務(wù)邏輯的開發(fā)即可,開發(fā)時間大大縮短,研發(fā)效率大大提升。
2) 高可用的服務(wù)能力:支持了同城多機房的容災(zāi)能力,所有服務(wù)的數(shù)據(jù)都會進行多機房的互備,同時在應(yīng)用層提供動態(tài)切換能力,可以保障服務(wù)高可靠性和業(yè)務(wù)高穩(wěn)定性。
3) 專業(yè)的安全管控:為用戶的服務(wù)提供了全方位的安全管控,包括流量防護、防火墻防護等接入層控制;涉黃、涉政、暴力等內(nèi)容安全控制,保障數(shù)據(jù)不發(fā)生非法訪問以及泄漏的訪問控制。
4) 低成本:Serverless 模式下,人力投入成本低,資源成本低,收益高??傮w而言,Serverless 模式幫助支付寶提供可靠、穩(wěn)定、安全的小程序服務(wù),為開發(fā)者提供簡單、高效的小程序開發(fā)方式。
美團 Serverless 前端體系
美團早期業(yè)務(wù)快速發(fā)展,各業(yè)務(wù)在 Node 應(yīng)用上各取所長,但在可用性和運維上需要付出額外的維護成本。隨著美團建設(shè)了 Serverless 平臺,前端也緊隨其后,將 Node 應(yīng)用由傳統(tǒng)架構(gòu)向 Serverless 架構(gòu)演進,通過 Serverless 方式升級 Node 基礎(chǔ)設(shè)施。
Serverless 前端主要包括研發(fā)套件、PaaS 平臺、技術(shù)組件,以及業(yè)務(wù)層的解決方案。美團通過研發(fā)套件的建設(shè)和技術(shù)組件的建設(shè)來提升業(yè)務(wù)的開發(fā)效率,通過 PaaS 平臺的建設(shè)來為業(yè)務(wù)提供服務(wù)的架構(gòu)和穩(wěn)定保障能力,同時 PaaS 的彈性特點可以很好地解決原來系統(tǒng)與部署的問題。Serverless 前端全景如下圖所示:
對于云函數(shù)平臺,美團大體上將其分為運行態(tài)和管理態(tài)。運行態(tài)要負責事件流轉(zhuǎn)的過程。首先由觸發(fā)源來產(chǎn)生事件,經(jīng)過事件網(wǎng)關(guān)分發(fā)到具體業(yè)務(wù)實例當中的函數(shù)里去處理,業(yè)務(wù)函數(shù)會對事件做出處理和響應(yīng)。事件網(wǎng)關(guān)除了分發(fā)流量之外,還會做一些限流降級、流量統(tǒng)計等相關(guān)的工作。實例這一層提供了函數(shù)沙箱,里面運行的是業(yè)務(wù)函數(shù),對業(yè)務(wù)函數(shù)起隔離的作用。管理系統(tǒng)里提供函數(shù)的管理、發(fā)布以及監(jiān)控等運維能力。
Serverless 的問題及發(fā)展趨勢
供應(yīng)商鎖定
從一個供應(yīng)商使用的任何無服務(wù)器功能將由另一個供應(yīng)商以不同的方式實現(xiàn)。如果想更換供應(yīng)商,幾乎肯定用戶需要更新操作工具(部署、監(jiān)控等),可能需要更改代碼(例如,以滿足不同的 FaaS 接口),甚至如果競爭供應(yīng)商實現(xiàn)的行為方式存在差異,則需要更改設(shè)計或架構(gòu)。
即使設(shè)法輕松遷移了生態(tài)系統(tǒng)的一部分,也可能會受到另一個架構(gòu)組件的更大影響。例如,假設(shè)正在使用 AWS Lambda 響應(yīng) AWS Kinesis 消息總線上的事件,雖然 AWS Lambda、 Google Cloud Functions 和 Microsoft Azure Functions 之間的差異可能相對較小,但仍然無法將后兩個供應(yīng)商實現(xiàn)直接連接到用戶的 AWS Kinesis 流。這意味著如果不移動基礎(chǔ)設(shè)施的其他部分,就不可能將代碼從一個解決方案移動或移植到另一個解決方案。
為解決該問題,跨廠商的標準和模型互通成為未來趨勢之一,即要向上標準化,屏蔽各個 Serverless 供應(yīng)商的底層實現(xiàn)差異。
比如,AWS SAM (Serverless Application Model) 就是一個用于構(gòu)建無服務(wù)器應(yīng)用程序的開源框架。它提供簡寫語法來表達函數(shù)、API、數(shù)據(jù)庫和事件源映射。每個資源只需幾行就可以定義所需的應(yīng)用程序并使用 YAML 對其建模。在部署期間,SAM 將 SAM 語法轉(zhuǎn)換并擴展為 AWS CloudFormation 語法,使用者能夠更快地構(gòu)建無服務(wù)器應(yīng)用程序。
冷啟動延時
在 Serverless 架構(gòu)中,當一個函數(shù)沒有被調(diào)用一段時間后,其資源被系統(tǒng)釋放;等再次調(diào)用時,系統(tǒng)需要重新初始化資源,從而導致首次請求響應(yīng)時間變長。同理,對于新到達的并發(fā)請求,會產(chǎn)生并發(fā)的冷啟動問題。這是 Serverless 最被詬病的地方之一。
常規(guī)解決思路是熱點函數(shù)預(yù)熱,用類似 LRU 的方式保證大部分熱點函數(shù)始終不會被驅(qū)離,資源不會被銷毀,這其中體現(xiàn)的是性能和成本的折中和妥協(xié)。
一些前沿企業(yè)比如 Amazon,引入 KVM 虛擬化技術(shù),以 microVM 的思路,將容器啟動速度及占用資源大大降低,并且針對主力語言比如 Java 的函數(shù)冷啟動加載時間進行優(yōu)化(最高可達 90% 的優(yōu)化效果),從根本上解決冷啟動問題,但是需要關(guān)注其可擴展性及平臺綁定問題。
函數(shù)生命周期有限,已加載狀態(tài)無法復用
當前主流的 Serverless 平臺對于函數(shù)的生命周期都有時間限制,函數(shù)不能長時間運行,只能在有限的時間執(zhí)行,如 900s (15min)。當函數(shù)沒有新的請求時,函數(shù)所在的執(zhí)行環(huán)境被銷毀,函數(shù)執(zhí)行的中間狀態(tài)、緩存等會被刪除。當新的函數(shù)調(diào)用發(fā)起時,不能直接利用上次計算的緩存狀態(tài)。
針對以上問題,有狀態(tài)函數(shù)編程模型提供了方便的函數(shù)定義方式,以及語言無關(guān)的狀態(tài)定義方式。由于不需要頻繁地和外部存儲進行交互,該模型減少了網(wǎng)絡(luò)訪問的次數(shù),從而能夠獲得更低的時延。數(shù)據(jù)不需要分發(fā)到外部存儲中,也不需要緩存到其它節(jié)點上,在可用性和一致性方面得到提升。由于用戶請求與節(jié)點存在粘性連接,用戶只需和一個函數(shù)實例發(fā)生交互,存取狀態(tài)數(shù)據(jù)更為容易,通常只需要對函數(shù)中的一個簡單結(jié)構(gòu)體進行操作即可。
另外,由于 FunctionGraph 服務(wù)接管了狀態(tài)的管理,可以為用戶提供多種數(shù)據(jù)一致性模型,以及處理并發(fā)場景下死鎖的問題,從而使得編程模型更加容易理解、用戶程序更加簡潔。
展 望
隨著技術(shù)發(fā)展,云計算技術(shù)已經(jīng)成為現(xiàn)代計算領(lǐng)域的新興技術(shù),而 Serverless 架構(gòu)正是云計算技術(shù)的最新應(yīng)用。根據(jù) Gartner 的預(yù)測,全球 Serverless 架構(gòu)市場的規(guī)模將在 2024 年達到 1000 億美元。在技術(shù)發(fā)展方面,Serverless 架構(gòu)也將發(fā)展出新的功能和特性,從而更好地服務(wù)于開發(fā)者和企業(yè)。
作者介紹
舒超,前美團基礎(chǔ)研發(fā)負責人,存儲中心總架構(gòu)師,負責美團公司級云原生服務(wù)治理系統(tǒng)的開發(fā)及演進;前騰訊微博微群及消息流廣告負責人。目前任職星漢未來 CTO。星漢未來是一家擁有先進云原生和 Serverless 能力的基礎(chǔ)軟件服務(wù)商,堅定相信 Serverless 是云計算的下一個型態(tài),并將現(xiàn)有產(chǎn)品矩陣全面轉(zhuǎn)向 Serverless。
GPT-4 重磅發(fā)布,吊打 ChatGPT!編程能力牛到讓我睡不著:10秒做出一個網(wǎng)站,1分鐘開發(fā)一個游戲
97.5%的技術(shù)老大對漲薪這事兒比較樂觀|InfoQ 研究中心聯(lián)合TGO 鯤鵬會發(fā)布《中國科技領(lǐng)導者畫像研究報告 2023》
被ChatGPT帶熱的最新技術(shù)崗:無需編碼,年薪超200萬
騰訊QQ空間技術(shù)總監(jiān)、47歲T13級前端專家被裁;GPT-4下周發(fā)布,支持視頻、更具顛覆性;我國擬組建國家數(shù)據(jù)局 | Q資訊
掃描二維碼推送至手機訪問。
版權(quán)聲明:本文由飛速云SEO網(wǎng)絡(luò)優(yōu)化推廣發(fā)布,如需轉(zhuǎn)載請注明出處。