Serverless 服务选型
綜述
近兩年來,Serverless 概念在開發(fā)者中交流的越來越多,實踐、服務(wù)、產(chǎn)品層出不窮。
Serverless 的主題分享呈現(xiàn)爆發(fā)趨勢,如在云原生領(lǐng)域頗具影響力的 KubeCon&CloudNativeCon 會議中,關(guān)于 Serverless 的主題,2018 年有 20 個,到 2019 年增長至 35 個。
產(chǎn)品層面,從最早的 AWS Lambda,到 Azure Functions、Goolge Functions、Google CloudRun,再到國內(nèi)阿里云 Serverless Kubernetes、Serverless 應(yīng)用引擎、函數(shù)計算等,面向計算的 Serverless 云上基礎(chǔ)設(shè)施越來越豐富。
新概念、新產(chǎn)品的產(chǎn)生不是憑空出現(xiàn),它們誕生之初要解決的是當(dāng)前問題。隨著實踐者對問題域的理解越來越清晰和深刻,會逐步迭代問題的處理方法,提供更接近問題本質(zhì)的解決方案。
若不從問題域出發(fā)來理解解決方案,容易陷入兩個極端,即「它能解決一切問題」「它太超前了,理解不了」。
本篇文章嘗試以日常開發(fā)流程為起點,分析每個階段面對的問題,然后組合解決方案,提煉面向 Serverless 的開發(fā)模型,并與業(yè)界提出的 Serverless 產(chǎn)品形態(tài)做對應(yīng),為開發(fā)者采用 Serverless 架構(gòu)和服務(wù)提供參考。
迭代模型
從項目整體視角來看:
這個模型的目標(biāo)是滿足客戶需求。通過?被動迭代?滿足客戶提出的需求,同時逐步深刻理解客戶需求的本質(zhì),通過?主動迭代?和客戶一起采用更好的方案或從根源解決面對的問題。
每次的需求反饋會加深對客戶需求的理解,提供更滿足需求的服務(wù)。每次的 bug 反饋會加深對處理方案的理解,提供更穩(wěn)定的服務(wù)。
在模型啟動后,日常的核心問題就集中在了?如何加速迭代。
為了解決迭代加速的問題,需要了解有哪些制約因素,有的放矢。下述是從開發(fā)視角看到的開發(fā)模型:
雖然會有不同的開發(fā)語言和架構(gòu),但在每個階段均有通用的問題,如:
除了要解決上述通用問題,還需要提供標(biāo)準(zhǔn)化的方案,降低開發(fā)者的學(xué)習(xí)和使用成本,縮短從想法到上線的時間。
若將上述過程中不同階段花費的時間做個分析,在項目整個生命周期中會發(fā)現(xiàn):
- 部署&運維 占用的時間和精力,會遠(yuǎn)大于 開發(fā)&測試
- 通用邏輯 占用的時間和精力,會接近甚至超過 業(yè)務(wù)邏輯
為了加速迭代,需要依次解決占用時間和精力多的部分,如圖 1:
從左至右,通過下放不同層次的運維工作,降低「部署&運維」成本。在降低了運維工作成本后,在「通用邏輯」層面降低成本。二者結(jié)合起來,在迭代過程中更深入聚焦業(yè)務(wù)。
該過程也是從 Cloud Hosting 到 Cloud Native 的過程,充分享受云原生帶來的技術(shù)紅利。
由于軟件設(shè)計架構(gòu)和部署架構(gòu)與當(dāng)時環(huán)境耦合度高,面對新的理念和服務(wù)、產(chǎn)品,存量應(yīng)用迭代過程中采用的技術(shù)需要有相應(yīng)調(diào)整,即開發(fā)和部署方式需要有一定的改造。新應(yīng)用的開發(fā)和部署應(yīng)用新的理念時,有一定的學(xué)習(xí)和實踐成本。
故上述過程不能一蹴而就,需要根據(jù)業(yè)務(wù)當(dāng)前的痛點優(yōu)先級來選擇匹配的服務(wù)和產(chǎn)品,并根據(jù)未來的規(guī)劃提前進(jìn)行技術(shù)預(yù)研,在不同的階段選擇適合的服務(wù)和產(chǎn)品。
Serverless 簡介
維基百科對于 Serverless 有較為完備的定義 [1]:
Serverless computing is a cloud computing execution model in which the cloud provider runs the server, and dynamically manages the allocation of machine resources. Pricing is based on the actual amount of resources consumed by an application, rather than on pre-purchased units of capacity. It can be a form of utility computing.
在這種計算模型下,給用戶會帶來如下收益:
Serverless computing can simplify the process of deploying code into production. Scaling, capacity planning and maintenance operations may be hidden from the developer or operator. Serverless code can be used in conjunction with code deployed in traditional styles, such as microservices. Alternatively, applications can be written to be purely serverless and use no provisioned servers at all.
概念本質(zhì)上是對問題域的抽象,是對問題域特征的總結(jié)。通過特征來理解概念,可以避免注意力集中在文字描述而非概念的價值本身。
站在用戶角度,我們可以抽象出 Serverless 的如下特征:
- 免運維 (服務(wù)器運維、容量管理、彈性伸縮等)
- 按資源的使用量付費
在一定規(guī)模的公司中,若嚴(yán)格區(qū)分開發(fā)和運維的角色,這種計算形態(tài)其實是已經(jīng)存在的,并非全新的事物。但目前的技術(shù)趨勢,是期望借助云的規(guī)模和技術(shù)紅利優(yōu)勢,通過上云來降低業(yè)務(wù)在技術(shù)側(cè)的成本,并通過技術(shù)紅利反哺業(yè)務(wù)。故業(yè)界對于 Serverless 的討論,注意力是集中在云上的服務(wù)和產(chǎn)品所體現(xiàn)的 Serverless 能力。
Serverless 開發(fā)模型
Martin Fowler 的這篇文章 [2] 站在架構(gòu)的角度,對 Serverless 開發(fā)模型做了充分的闡述,這里做個簡單的總結(jié),核心圍繞三點:
- Event-driven 開發(fā)模型
- 自動彈性伸縮
- OpenAPI
Serverless 開發(fā)采用?Event-driven 模型?[3],圍繞 HTTP/HTTPS 請求、時間、消息等 Event 的生產(chǎn)和響應(yīng)進(jìn)行架構(gòu)設(shè)計。在這樣的模型中,Event 的生產(chǎn)、處理流程是核心,通過 Event 驅(qū)動整個服務(wù)流程,注意力集中在整個處理流程。對業(yè)務(wù)理解越深刻,Event 類型和業(yè)務(wù)會越匹配,技術(shù)和業(yè)務(wù)的相互促進(jìn)作用會越有效。
Event-driven 模型,使得?服務(wù)常駐?這種理念從必選項轉(zhuǎn)變?yōu)榭蛇x項,可以更好應(yīng)對業(yè)務(wù)請求量的變化,如自動彈性伸縮。同時服務(wù)非常駐,可以降低所需的資源成本和維護(hù)成本,加速項目迭代。
通過文章 [2] 的兩幅圖可以更直觀理解:
圖 2
圖 3
圖 2 是當(dāng)前常見的開發(fā)模型,Click Processor 服務(wù)是個常駐服務(wù),響應(yīng)來自用戶的所有點擊請求。生產(chǎn)環(huán)境中,通常會多實例部署,常駐?是個關(guān)鍵特征,日常的運維重點在確保常駐服務(wù)的穩(wěn)定性方面。
圖 3 是 Event-driven 開發(fā)模型,關(guān)注重心前移,集中在 Event 的產(chǎn)生和響應(yīng)方面,響應(yīng)服務(wù)是否常駐是個可選項。
Serverless 在概念上與 PaaS (Platform as a Service)、CaaS (Container as a Service) 的區(qū)別,重點是在是否將?自動彈性伸縮?作為概念誕生之初的核心特征。
結(jié)合 Event-driven 的開發(fā)模型,Serverless 場景中自動彈性伸縮需要對開發(fā)者透明度加深,開發(fā)者開發(fā)過程對處理能力的關(guān)注重心從靜態(tài)轉(zhuǎn)為動態(tài),更好應(yīng)對上線后業(yè)務(wù)請求量的不確定性。
在開發(fā)方面,交付時可以采用鏡像,也可以采用語言層面的打包 (如 Java 中的 war/jar) ,由平臺負(fù)責(zé)運行時相關(guān)的工作。還可以更進(jìn)一步,采用 FaaS 的理念,依托于平臺或標(biāo)準(zhǔn)化 FaaS 解決方案,只提供業(yè)務(wù)邏輯函數(shù),由平臺負(fù)責(zé)請求入口、請求調(diào)用和自動彈性伸縮等運行時事宜。
不論哪種交付方式,在云上均可以使用 BaaS [4] 的理念,將部分邏輯通過云平臺或第三方的 OpenAPI 實現(xiàn),如權(quán)限管理、中間件管理等,開發(fā)過程中注意力更加聚焦在業(yè)務(wù)層面。
Serverless 服務(wù)模型
Serverless 服務(wù)模型關(guān)注云廠商對于 Serverless 計算形態(tài)的支持,不同的服務(wù)和產(chǎn)品形態(tài)主要差異點主要集中在對 Serverless 特征的理解和滿足程度方面:
- 免運維 (服務(wù)器運維、容量管理、彈性伸縮等)
- 按資源的使用量付費
在免運維維度,最基本的是免去服務(wù)器運維成本,開發(fā)者可以按量申請資源。在容量管理、彈性伸縮、流量管理、日志/監(jiān)控/告警等常規(guī)的運維層面,不同的服務(wù)和產(chǎn)品會根據(jù)自身定位、目標(biāo)客戶特征等,有側(cè)重采用適合的方式來滿足。
在計費形態(tài)方面,云廠商一方面會根據(jù)自身定位確定收費維度,如資源、請求量等,一方面也會根據(jù)當(dāng)前的技術(shù)能力確定收費的粒度。
通過上述分析可知,云廠商不同 Serverless 服務(wù)模型不是靜態(tài)的,會伴隨產(chǎn)品定位、目標(biāo)客戶特征、技術(shù)能力等持續(xù)迭代,和客戶共同成長。
Serverless 服務(wù)模型需要滿足實際需求,再回到圖 1,云廠商的 Serverless 服務(wù)模型可以分為如下幾類:
- 資源實例平臺
- 調(diào)度平臺
- 應(yīng)用管理平臺
- 業(yè)務(wù)邏輯管理平臺
綜合起來,即:
?
阿里云 Serverless 產(chǎn)品
國內(nèi)的云服務(wù)廠商,阿里云提供的 Serverless 服務(wù)和產(chǎn)品形態(tài)相對完備。這里以阿里云為例進(jìn)行探討,探討的經(jīng)驗可以平滑遷移到其他云服務(wù)廠商。
從阿里云公開的資料 [5] 可以了解到幾類常見的 Serverless 產(chǎn)品形態(tài):
上述云產(chǎn)品分類可以清晰和圖 1 的模型對應(yīng)起來,用戶在進(jìn)行選擇時,先整理當(dāng)前業(yè)務(wù)技術(shù)所處的階段和痛點,確定對云上方案的需求,然后再根據(jù)云廠商的產(chǎn)品形態(tài)做對應(yīng),選擇適合當(dāng)前階段的服務(wù)和云產(chǎn)品。
該對應(yīng)關(guān)系重點是了解云產(chǎn)品定位是否可以長期滿足業(yè)務(wù)需求,如:
- 業(yè)務(wù)技術(shù)目前所處的階段是否有對應(yīng)的 Serverless 產(chǎn)品形態(tài)
- 業(yè)務(wù)快速迭代是否會受限于云產(chǎn)品自身的發(fā)展
- 云產(chǎn)品的穩(wěn)定如何
- 云產(chǎn)品是否可以持續(xù)為業(yè)務(wù)帶來技術(shù)紅利
同時還需要了解云產(chǎn)品是否可以伴隨業(yè)務(wù)發(fā)展,重點是業(yè)務(wù)對技術(shù)的需求中,哪些是云產(chǎn)品層面由于定位帶來的限制,哪些是當(dāng)前云產(chǎn)品的技術(shù)實現(xiàn)帶來的限制。
若是云產(chǎn)品定位帶來的限制,那么就需要考慮使用和業(yè)務(wù)需求定位更匹配的云產(chǎn)品。若是當(dāng)前技術(shù)實現(xiàn)的限制,那么有機(jī)會和云產(chǎn)品共同成長,及時給云產(chǎn)品反饋,使得云產(chǎn)品可以更好滿足自身的業(yè)務(wù)需求。
除此之外,業(yè)務(wù)層面還需關(guān)注云廠商自身服務(wù)類型的豐富性,云廠商自身服務(wù)越豐富,規(guī)模越大,越會產(chǎn)生規(guī)模效應(yīng),進(jìn)而給業(yè)務(wù)帶來更豐富的技術(shù)紅利和成本優(yōu)勢。
幸運的是,云產(chǎn)品通常都會有豐富的文檔,也有相應(yīng)的用戶群,可以直面產(chǎn)品 PD 和研發(fā)。云產(chǎn)品的 PD 和研發(fā)也很期望直面用戶,聆聽用戶的反饋和需求,和用戶一起共建。
下面簡單介紹下阿里云 Serverless 產(chǎn)品和用戶釘釘群。
阿里云 ECI 產(chǎn)品 [6] 是 Serverless 和容器化的彈性計算服務(wù),用戶無需管理底層服務(wù)器,只需要提供打包好的鏡像,即可運行容器,并僅為容器實際運行消耗的資源付費。
阿里云 Serverless Kubernetes (簡稱 ASK) 是阿里云容器服務(wù)產(chǎn)品 [7] 家族中的一種形態(tài),托管 Kubernetes Master 組件,依托阿里云 ECI 產(chǎn)品提供 Pod 實例,用戶無需運維 Kubernetes Master 和 Agent 節(jié)點即可使用 Kubernetes 調(diào)度能力,詳情可參見產(chǎn)品文檔 [8]。
阿里云 Serverless 應(yīng)用引擎 (簡稱 SAE) [9] 是面向應(yīng)用的 Serverless PaaS 平臺,幫助 PaaS 層用戶免運維 IaaS,按需使用,按量計費,實現(xiàn)低門檻微服務(wù)應(yīng)用上云,有效解決成本及效率問題。支持 Spring Cloud、Dubbo 和 HSF 等流行的開發(fā)框架,真正實現(xiàn)了 Serverless 架構(gòu)和微服務(wù)架構(gòu)的完美融合。除了微服務(wù)應(yīng)用外,用戶還能通過 Docker 鏡像部署任何語言的應(yīng)用。
阿里云函數(shù)計算有兩款產(chǎn)品,函數(shù)計算 [10] 是一個事件驅(qū)動的全托管 Serverless 計算服務(wù),用戶無需管理服務(wù)器等基礎(chǔ)設(shè)施,只需編寫代碼并上傳,函數(shù)計算會為用戶準(zhǔn)備好計算資源,并以彈性、可靠的方式運行用戶代碼。Serverless 工作流 [11] 是一個用來協(xié)調(diào)多個分布式任務(wù)執(zhí)行的全托管 Serverless 云服務(wù),致力于簡化開發(fā)和運行業(yè)務(wù)流程所需要的任務(wù)協(xié)調(diào)、狀態(tài)管理以及錯誤處理等繁瑣工作,讓用戶聚焦業(yè)務(wù)邏輯開發(fā)。用戶可以用順序、分支、并行等方式來編排分布式任務(wù),服務(wù)會按照設(shè)定好的順序可靠地協(xié)調(diào)任務(wù)執(zhí)行,跟蹤每個任務(wù)的狀態(tài)轉(zhuǎn)換,并在必要時執(zhí)行用戶定義的重試邏輯,以確保工作流順利完成。
用戶釘釘群:
小結(jié)
Serverless 本質(zhì)上是一個問題域,將研發(fā)流程中非業(yè)務(wù)核心卻影響業(yè)務(wù)迭代的問題抽象化,并提出相應(yīng)的解決方案。該概念不是突然產(chǎn)生的,大家或多或少已經(jīng)將其理念應(yīng)用到日常的工作中 ,只是伴隨著云計算浪潮,云上的 Serverless 服務(wù)和產(chǎn)品更系統(tǒng)、更具有競爭力,可以基于規(guī)模優(yōu)勢和豐富的產(chǎn)品線,面對問題域持續(xù)提供更滿足業(yè)務(wù)需求的服務(wù)。
Serverless 理念不僅在中心化的云端蓬勃發(fā)展,目前也逐步在邊緣端發(fā)展,使得服務(wù)的運行更加廣泛化,更好滿足業(yè)務(wù)自身的客戶,提供更低延時、穩(wěn)定的服務(wù)。
本篇文章嘗試從項目、開發(fā)的日常流程出發(fā),協(xié)助讀者從日常實踐角度來理解 Serverless 概念,根據(jù)所處的階段選擇適合的 Serverless 服務(wù)和產(chǎn)品。并嘗試從云產(chǎn)品內(nèi)部的視角,傳遞云產(chǎn)品和用戶共建的觀念,通過不同的分工更好傳遞和創(chuàng)造價值。
References
- [1]?wikipedia: Serverless computing
- [2]?Martin Fowler: Serverless Architectures
- [3]?wikipedia: Event-driven architecture
- [4]?wikipedia: Mobile backend as a service
- [5]?從 DevOps 到 NoOps,Serverless 技術(shù)的落地方式探討
- [6]?阿里云 ECI 產(chǎn)品主頁
- [7]?阿里云容器服務(wù)
- [8]?阿里云 Serverless Kubernetes 產(chǎn)品文檔
- [9]?阿里云 Serverless 應(yīng)用引擎
- [10]?阿里云函數(shù)計算
- [11]?阿里云 Serverless 工作流
- Cloud Programming Simplified: A Berkeley View on Serverless Computing
原文鏈接
本文為云棲社區(qū)原創(chuàng)內(nèi)容,未經(jīng)允許不得轉(zhuǎn)載。
總結(jié)
以上是生活随笔為你收集整理的Serverless 服务选型的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Serverless在大规模数据处理的实
- 下一篇: 谊品生鲜:放弃传统数据库架构,全站上阿里