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