有關(guān)云可移植性的三個(gè)考量:三事件驅(qū)動(dòng)架構(gòu)(EDA)和無(wú)服務(wù)器計(jì)算?
在這一系列文章中,我們將從架構(gòu)、設(shè)計(jì)等不同方面來(lái)探討,在云的可移植性方面,具體都需要考慮哪些細(xì)節(jié)問(wèn)題,如何最大限度避免云時(shí)代的技術(shù)鎖定,充分發(fā)揮云的靈活性?xún)?yōu)勢(shì)。
延伸閱讀,了解 Akamai cloud-computing
出海云服務(wù),選擇Akamai cloud-computing!
下文將簡(jiǎn)要探討事件驅(qū)動(dòng)架構(gòu)以及無(wú)服務(wù)器計(jì)算。歡迎點(diǎn)擊這里回顧云原生和容器技術(shù)在云可移植性方面的注意事項(xiàng);或點(diǎn)擊這里回顧微服務(wù)架構(gòu)對(duì)云可移植性的重要意義。
事件驅(qū)動(dòng)架構(gòu)(Event-Driven Architecture,EDA)會(huì)對(duì)事件或消息做出反應(yīng)并觸發(fā)特定操作,但不依賴(lài)于直接的同步通信。EDA是異步的,這樣組件即可獨(dú)立運(yùn)行,從而提高系統(tǒng)在可變工作負(fù)載下的響應(yīng)能力和性能。
我們可以考慮兩個(gè)簡(jiǎn)單的例子:文件上傳和新用戶(hù)注冊(cè)。這兩個(gè)操作都可以通過(guò)通過(guò)同步的請(qǐng)求-響應(yīng)流(例如REST API)發(fā)生,但需要發(fā)出新請(qǐng)求以更新文件上傳狀態(tài),或在將新用戶(hù)的數(shù)據(jù)插入數(shù)據(jù)庫(kù)后通過(guò)新請(qǐng)求觸發(fā)需要執(zhí)行的下一步操作。假設(shè)有一群任務(wù)運(yùn)行程序正在不斷地輪詢(xún)消息,甚至在“無(wú)線電靜默期”或者完全與自己無(wú)關(guān)的時(shí)間段內(nèi),它們也會(huì)不知疲倦地輪詢(xún)??上攵绻褂昧税葱韪顿M(fèi)的彈性云計(jì)算資源,這種方式會(huì)造成巨大浪費(fèi)。EDA通過(guò)基于推送的方法解決了這個(gè)問(wèn)題。
事件驅(qū)動(dòng)系統(tǒng)可以按需添加或移除組件從而快速擴(kuò)展,并對(duì)故障獲得極高適應(yīng)性,因?yàn)榧幢隳骋粋€(gè)組件不可用,系統(tǒng)依然能繼續(xù)運(yùn)行。EDA也非常適合實(shí)時(shí)處理以及海量數(shù)據(jù)處理,因?yàn)榻M件可以對(duì)事件做出反應(yīng)并在數(shù)據(jù)到達(dá)時(shí)就立即開(kāi)始處理,而不需要等待收到完整的數(shù)據(jù)集。
為何要使用EDA?
- 增強(qiáng)系統(tǒng)靈活性:事件驅(qū)動(dòng)架構(gòu)松散耦合的特性使得我們可以輕松修改、添加或移除組件而不影響整體系統(tǒng),從而讓系統(tǒng)能夠適應(yīng)不斷變化的需求。
- 提高可擴(kuò)展性:EDA支持非常方便的水平擴(kuò)展,借此,企業(yè)可以根據(jù)需要添加更多組件或服務(wù)實(shí)例,從而應(yīng)對(duì)增加的工作負(fù)載或流量。
- 提高系統(tǒng)彈性:EDA的異步通信以及解耦的組件有助于提高容錯(cuò)能力,因?yàn)橐粋€(gè)組件的故障并不一定導(dǎo)致整個(gè)系統(tǒng)中斷。
- 實(shí)時(shí)處理能力:EDA能實(shí)時(shí)處理大量數(shù)據(jù)和復(fù)雜的事件模式,因此很適合需要立即獲得洞察力或?qū)焖僮兓那闆r快速做出反應(yīng)的業(yè)務(wù)場(chǎng)景。
- 優(yōu)化資源使用:通過(guò)僅在事件發(fā)生時(shí)對(duì)其做出反應(yīng),EDA有助于優(yōu)化資源利用率并減少對(duì)持續(xù)運(yùn)行流程的需求,從而幫助企業(yè)節(jié)約成本,提高效率。
云原生無(wú)服務(wù)器計(jì)算
EDA同樣支持類(lèi)似無(wú)服務(wù)器計(jì)算這樣的應(yīng)用程序開(kāi)發(fā)模型,這樣我們就可以編寫(xiě)可移植,并且與特定供應(yīng)商無(wú)關(guān)的代碼,從而根據(jù)功能、支持的語(yǔ)言、成本等因素靈活選擇適合自己的云供應(yīng)商。函數(shù)即服務(wù)(Functions-as-a-Service,FaaS)是一種流行的產(chǎn)品,很多云供應(yīng)商都已提供,用戶(hù)可以通過(guò)這類(lèi)產(chǎn)品在一個(gè)位置管理函數(shù)和應(yīng)用程序基礎(chǔ)設(shè)施。云供應(yīng)商作為責(zé)任人,主要負(fù)責(zé)處理底層基礎(chǔ)設(shè)施,包括服務(wù)器的配置、縮放和維護(hù),這樣開(kāi)發(fā)者就可以更專(zhuān)注地編寫(xiě)代碼。
很多流行的FaaS服務(wù)(例如AWS Lambda、Azure Functions以及Google Cloud Functions)就是我們所說(shuō)的平臺(tái)原生服務(wù)。它們通常會(huì)限制用戶(hù)只能使用特定云提供商的平臺(tái),無(wú)法輕松遷移至其他平臺(tái)。Akamai曾多次介紹過(guò),Knative是一種開(kāi)源、基于Kubernetes的無(wú)服務(wù)器運(yùn)行平臺(tái),只需幾秒鐘即可將應(yīng)用程序從0個(gè)副本擴(kuò)展到N個(gè)副本。擴(kuò)展到0個(gè)副本這種能力非常實(shí)用,可以讓Kubernetes和Knative按需重新分配資源。
我們只需要使用一段代碼即可自動(dòng)擴(kuò)展資源,因?yàn)檫@種代碼可以并行調(diào)用多次。從本質(zhì)上來(lái)看,并不建議使用上文提到的平臺(tái)原生FaaS產(chǎn)品,因?yàn)檫@類(lèi)服務(wù)的費(fèi)用是不可預(yù)測(cè)的。但如果通過(guò)托管的Kubernetes服務(wù)在我們的計(jì)算實(shí)例上運(yùn)行Knative,用戶(hù)就只需要支付一個(gè)固定并且可預(yù)測(cè)的費(fèi)用,而不必?fù)?dān)心某些服務(wù)的免費(fèi)額度用完后開(kāi)始按照?qǐng)?zhí)行次數(shù)計(jì)費(fèi)。
為何使用無(wú)服務(wù)器?
- 成本效率:無(wú)服務(wù)器計(jì)算按用量付費(fèi)的定價(jià)模型有助于節(jié)約成本,企業(yè)只需要為自己實(shí)際使用的計(jì)算時(shí)間付費(fèi),無(wú)需提前分配資源。
- 提高可擴(kuò)展性:無(wú)服務(wù)器計(jì)算可以自動(dòng)擴(kuò)展資源以滿足需求,確保應(yīng)用程序可以順利處理激增的工作負(fù)載而無(wú)需人工介入或停機(jī)。
- 降低運(yùn)維開(kāi)銷(xiāo):對(duì)于無(wú)服務(wù)器計(jì)算,云提供商負(fù)責(zé)管理底層基礎(chǔ)設(shè)施,這樣IT團(tuán)隊(duì)就能更專(zhuān)注于應(yīng)用程序的開(kāi)發(fā)、創(chuàng)新,以及其他戰(zhàn)略性活動(dòng)。
- 更快的上市時(shí)間:無(wú)服務(wù)器計(jì)算簡(jiǎn)化的開(kāi)發(fā)和部署流程有助于企業(yè)更快速發(fā)布新功能、更新以及Bug修復(fù),從而增強(qiáng)自己的競(jìng)爭(zhēng)優(yōu)勢(shì)。
- 靈活性和適應(yīng)性:無(wú)服務(wù)器計(jì)算使得企業(yè)能夠使用各種編程語(yǔ)言和技術(shù)構(gòu)建并部署應(yīng)用程序,從而更易于適應(yīng)需求的變化或按需融入新技術(shù)。
正如上文所說(shuō),無(wú)服務(wù)器計(jì)算基于事件驅(qū)動(dòng)架構(gòu),這意味著函數(shù)可以由HTTP請(qǐng)求、文件上傳、數(shù)據(jù)庫(kù)更新等事件來(lái)觸發(fā)。這有助于簡(jiǎn)化應(yīng)用程序架構(gòu)并改善可擴(kuò)展性。
無(wú)服務(wù)器函數(shù)的世界也應(yīng)該是無(wú)狀態(tài)的。函數(shù)在不同調(diào)用之間不存儲(chǔ)任何數(shù)據(jù)或狀態(tài),這保證了函數(shù)可以輕松擴(kuò)展,并且函數(shù)故障后可以輕松替換。函數(shù)還應(yīng)當(dāng)是短暫的,這保證了資源不會(huì)被浪費(fèi),并且函數(shù)能夠快速擴(kuò)展。如果一個(gè)函數(shù)的任務(wù)需要長(zhǎng)時(shí)間運(yùn)行,則需評(píng)估是否更適合使用持續(xù)運(yùn)行的服務(wù)來(lái)代替。
無(wú)服務(wù)器函數(shù)同樣需要監(jiān)視并記錄日志,這樣才能確保函數(shù)按照預(yù)期運(yùn)行,同時(shí)發(fā)現(xiàn)可能存在的任何問(wèn)題或錯(cuò)誤。為此可以使用一些日志聚合器和應(yīng)用程序性能監(jiān)視(APM)工具,例如Prometheus和Grafana。另外,別忘了通過(guò)身份驗(yàn)證、認(rèn)證授權(quán)、加密等最佳實(shí)踐措施保護(hù)函數(shù),這樣不僅可以保護(hù)應(yīng)用程序本身,也能保護(hù)敏感數(shù)據(jù)。在將函數(shù)部署到生產(chǎn)環(huán)境之前,請(qǐng)進(jìn)行完善的測(cè)試,從而確保函數(shù)能夠按照預(yù)期運(yùn)行并且不存在漏洞。
無(wú)服務(wù)器計(jì)算極具成本效益,但為了進(jìn)一步降低成本提高效率,依然需要使用各種成本優(yōu)化技術(shù),例如函數(shù)優(yōu)化、資源共享以及自動(dòng)擴(kuò)展。用戶(hù)有必要評(píng)估自己的工作負(fù)載、使用模式以及需求,從而決定對(duì)于自己的特定用例來(lái)說(shuō),無(wú)服務(wù)器計(jì)算是否是一種具備成本效益的方式。另外,對(duì)于選擇使用的無(wú)服務(wù)器平臺(tái),還需要考慮預(yù)期使用模式、性能需求以及定價(jià)結(jié)構(gòu)。
這篇文章的內(nèi)容感覺(jué)還行吧?您還可以進(jìn)一步了解Akamai的云服務(wù)方案!別忘了,現(xiàn)在注冊(cè)可以免費(fèi)獲得價(jià)值 100 美元的使用額度,快點(diǎn)自己動(dòng)手體驗(yàn)本文介紹的功能和服務(wù)吧↓↓↓
歡迎關(guān)注Akamai ,第一時(shí)間了解高可用的MySQL/MariaDB參考架構(gòu),以及豐富的應(yīng)用程序示例