函数粘合云服务提供端到端解决方案
作者 | 西流 阿里云技術(shù)專家
導(dǎo)讀:阿里云Serverless 產(chǎn)品函數(shù)計(jì)算可以作為粘合劑, 串聯(lián)其他云服務(wù)提供端到端解決方案, 從而簡(jiǎn)化編程模型, 快速實(shí)現(xiàn)最上層的業(yè)務(wù)目標(biāo)。
傳統(tǒng)單體應(yīng)用的拆解
首先我們來(lái)看下單體應(yīng)用里面常見(jiàn)的兩個(gè)編程模型,如上圖所示,一種是 UI-driven,另外一種是 Message-driven。單體應(yīng)用這種體系結(jié)構(gòu),客戶端可能相對(duì)不那么智能,系統(tǒng)中的許多邏輯(比如身份驗(yàn)證、頁(yè)面導(dǎo)航、搜索、交易等)由服務(wù)器應(yīng)用程序?qū)崿F(xiàn),隨著業(yè)務(wù)邏輯復(fù)雜度的增長(zhǎng),服務(wù)端的應(yīng)用程序會(huì)越發(fā)膨脹和難以維護(hù)。
而在 Message-driven 異步消息處理這種模式中,需要用戶實(shí)現(xiàn)一個(gè)常駐的、彈性高可用的消費(fèi)者服務(wù)。為了更專注具體業(yè)務(wù)邏輯的開(kāi)發(fā),對(duì)一個(gè)龐大的單體應(yīng)用進(jìn)行拆解,充分利用云服務(wù)體系結(jié)構(gòu)是一個(gè)非常好的解決方案。在這里,最大的關(guān)鍵是如何為應(yīng)用程序的各個(gè)組件選擇和使用正確的云服務(wù),而通過(guò)函數(shù)作為粘合劑來(lái)串聯(lián)云上的托管服務(wù),就是一個(gè)非常好的實(shí)踐。
如上圖所示,UI-driven 切換到 Serverless 架構(gòu)以后:
- 第三方 BaaS 服務(wù)取代認(rèn)證邏輯;
- 允許客戶端通過(guò)臨時(shí) token 直接訪問(wèn)架構(gòu)與第三方上的數(shù)據(jù)子庫(kù)(BaaS);
- 寵物商店服務(wù)端的邏輯可以轉(zhuǎn)移到客戶端中,例如跟蹤用戶訪問(wèn),讀取數(shù)據(jù)庫(kù)轉(zhuǎn)化為可視視圖等,客戶端則慢慢轉(zhuǎn)化為單頁(yè)面應(yīng)用;
- CPU 密集型或者需要訪問(wèn)大量數(shù)據(jù),比如搜索,使用 FaaS 實(shí)現(xiàn),無(wú)需一直運(yùn)行的 server;
- 購(gòu)買功能使用另外一個(gè) FaaS 實(shí)現(xiàn),因?yàn)榘踩蚍旁诜?wù)端。
Message-driven 切換到 Serverless 架構(gòu)以后:
與單體應(yīng)用示例相比,這里改動(dòng)很小,同時(shí)使用 FaaS 功能替換了長(zhǎng)期存在的消息消費(fèi)者應(yīng)用程序,消息消費(fèi)的高可用性交給了云平臺(tái)去負(fù)責(zé)。
事件驅(qū)動(dòng)與編排助力完整 Serverless 應(yīng)用
目前,在很多的人的第一印象中,一般將 FaaS,也就是 Fucntion as a Service(函數(shù)即服務(wù))等同于 Serverless, 比如阿里云的函數(shù)計(jì)算、AWS 的 Lambda,但是實(shí)際上有許多其他的云服務(wù)也是 Serverless,他們和 FC 一起構(gòu)建成完整的 Serverless 應(yīng)用,讓用戶完全聚焦他最上層和核心的原始業(yè)務(wù)。比如,用戶直接使用 API 網(wǎng)關(guān), 就可以從 API 限流、鑒權(quán)等許多 API 層面上需要考慮的繁雜工作中解放出來(lái);直接使用 Serverless 的 NoSQL 數(shù)據(jù)庫(kù) TableStore 或者對(duì)象存儲(chǔ) OSS 來(lái)持久化數(shù)據(jù),替代自己管理數(shù)據(jù)庫(kù)實(shí)例;使用 SLS 或者 Datahub 從外部系統(tǒng)收集數(shù)據(jù)流;使用消息服務(wù) MNS/MQ 來(lái)管理消息等。
用戶可以使用一個(gè)個(gè)函數(shù)將這些 Serverless 服務(wù)串聯(lián)起來(lái),從而達(dá)到構(gòu)建具體復(fù)雜的業(yè)務(wù)邏輯和應(yīng)用的目標(biāo)。在這里,用戶也可以選擇 Serverless 工作流來(lái)編排函數(shù)和其他云服務(wù),簡(jiǎn)化了開(kāi)發(fā)和運(yùn)行業(yè)務(wù)流程(比如自己去編寫代碼進(jìn)行任務(wù)協(xié)調(diào)、狀態(tài)管理、錯(cuò)誤處理以及重試等繁瑣工作),讓用戶聚焦業(yè)務(wù)邏輯開(kāi)發(fā)。當(dāng)然,用戶也可以使用阿里云提供的開(kāi)發(fā)工具鏈來(lái)簡(jiǎn)化自動(dòng)化部署和持續(xù)集成。使用這些開(kāi)箱即可使用的工具可以幫助用戶快速達(dá)到想要的目標(biāo)和效果。
如果是一個(gè)龐大復(fù)雜的單體應(yīng)用或者是一個(gè)面向服務(wù)體系的架構(gòu),開(kāi)發(fā)者需要負(fù)責(zé)所有的事情,包括代碼的編寫、管理和部署數(shù)據(jù)庫(kù)以及其他相關(guān)的后端服務(wù)等,切換到 Servrless 架構(gòu), 可以看到:特定的的模塊交由特定的托管云服務(wù)去處理, 之后再使用實(shí)現(xiàn)了具體業(yè)務(wù)代碼的函數(shù)將它們串聯(lián)起來(lái), 也實(shí)現(xiàn)了解耦。 為了使這種架構(gòu)運(yùn)轉(zhuǎn)的更有效率, 事件驅(qū)動(dòng)是一個(gè)必不可少的特性, 比如用戶嘗試往 OSS 上傳一個(gè)文件或者更新表格存儲(chǔ)會(huì)自動(dòng)做一些邏輯處理,對(duì)于開(kāi)發(fā)者來(lái)說(shuō), 最關(guān)心的是什么樣的事件可以觸發(fā)我的編寫邏輯。
Serverless 粘合云服務(wù)示例
這里有一個(gè)有趣的例子:
如上圖所示,用戶上傳圖片文件,產(chǎn)生消息事件觸發(fā)了 FC 函數(shù)執(zhí)行,處理生成了圖片縮略圖,并將縮略圖存儲(chǔ)至對(duì)象存儲(chǔ) OSS,之后觸發(fā)了另一個(gè) FC 函數(shù)將圖片產(chǎn)生的更新信息寫入表格存儲(chǔ)數(shù)據(jù)庫(kù),最后再觸發(fā)一個(gè) FC 函數(shù)完成搜索模塊的更新。整個(gè)過(guò)程中文件處理存儲(chǔ)、搜索服務(wù)、表格存儲(chǔ)數(shù)據(jù)庫(kù)服務(wù)被幾個(gè) FC 函數(shù)粘合為一個(gè)業(yè)務(wù)處理邏輯。
參考文章:https://martinfowler.com/articles/serverless.html
《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
以上是生活随笔為你收集整理的函数粘合云服务提供端到端解决方案的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 函数计算的开发与配置
- 下一篇: 函数计算的可观测性