文章轉(zhuǎn)載來源《千家網(wǎng)》
你推出了一個(gè)新的物聯(lián)網(wǎng)產(chǎn)品,可能使用AWS、Azure或其他主要云提供商提供的物聯(lián)網(wǎng)框架,你的設(shè)備現(xiàn)在可以從云發(fā)送和接收數(shù)據(jù)。那么,如何處理這些數(shù)據(jù)以獲得有價(jià)值的見解,例如設(shè)備健康遙測或用戶行為跟蹤?有許多不同的方法可以在云中建立數(shù)據(jù)處理基礎(chǔ)設(shè)施,以平衡控制和復(fù)雜性。無服務(wù)器架構(gòu)最終是一種軟件設(shè)計(jì)原則,它允許您在不管理基礎(chǔ)設(shè)施的情況下構(gòu)建、擴(kuò)展和運(yùn)行服務(wù),而MistyWest對這種“無服務(wù)器”模式如何使團(tuán)隊(duì)能夠快速構(gòu)建和擴(kuò)展云解決方案感到興奮。
為了幫助您理解這對于物聯(lián)網(wǎng)產(chǎn)品解決方案的適用性,我們提供了以下不同架構(gòu)模式的概述,以及您應(yīng)該在什么情況下考慮為您的項(xiàng)目采用無服務(wù)器。
使用虛擬機(jī)
現(xiàn)在,設(shè)置云管道的老派方法(如果希望獲得更多控制,推薦使用這種方法)是在云中啟動(dòng)一個(gè)虛擬機(jī)(VM)來運(yùn)行處理代碼。Azure虛擬機(jī)、AWS EC2或GCP計(jì)算引擎是一些常見的選項(xiàng)。你得到一個(gè)虛擬計(jì)算機(jī),它可以運(yùn)行類似于在你的個(gè)人計(jì)算機(jī)上運(yùn)行的代碼。然而,這種路由的局限性是,您將迅速耗盡單個(gè)VM的處理能力,特別是當(dāng)您正在處理來自數(shù)千個(gè)物聯(lián)網(wǎng)設(shè)備的數(shù)據(jù)時(shí)。
要獲得更強(qiáng)的處理能力,可以添加更多vm并將處理工作分配給多臺計(jì)算機(jī)。像Kubernetes和Docker Swarm這樣的工具可以讓您跨多臺機(jī)器編排處理工作負(fù)載,云提供商提供AWS Elastic Kubernetes Service和谷歌Kubernetes Engine這樣的服務(wù),以支持在云中跨多臺機(jī)器編排工作負(fù)載。像AWS Elastic Beanstalk或Azure App Services這樣的服務(wù)可以自動(dòng)設(shè)置和擴(kuò)展常見的web開發(fā)框架,如Django、Rails和Node,它們是很好的起點(diǎn)服務(wù),可以幫助你管理它們。
然而,設(shè)置和配置編排工具可能是復(fù)雜的,需要大量的時(shí)間和專業(yè)知識,不能直接為客戶提供價(jià)值。如果你想快速構(gòu)建原型,為客戶提供價(jià)值,并且你知道你的解決方案可以擴(kuò)展,那么無服務(wù)器可能是正確的選擇。
什么是無服務(wù)器架構(gòu)?
無服務(wù)器架構(gòu)允許您將服務(wù)器管理完全卸載給云提供商,同時(shí)可以直接專注于應(yīng)用程序代碼。一個(gè)更常見的體系結(jié)構(gòu)子集是功能即服務(wù)(FaaS)。但無服務(wù)器體系結(jié)構(gòu)提供的服務(wù)遠(yuǎn)不止這些——從數(shù)據(jù)庫和隊(duì)列系統(tǒng)到事件處理服務(wù),每個(gè)云服務(wù)提供商都提供各種各樣的服務(wù)來滿足您的需求。
圖1–多個(gè)手動(dòng)配置的服務(wù)器
無服務(wù)器化的好處
1.收費(fèi):一個(gè)好處是,無服務(wù)器平臺傾向于根據(jù)無服務(wù)器功能運(yùn)行的頻率和時(shí)間來收費(fèi),所以您只需要為所使用的計(jì)算時(shí)間付費(fèi)。這可以在開發(fā)過程中保持較低的成本,同時(shí)以一種在發(fā)行過程中自動(dòng)擴(kuò)展的方式進(jìn)行構(gòu)建。
2.快速響應(yīng):無服務(wù)器函數(shù)也傾向于快速響應(yīng)需求峰值,因?yàn)槠脚_會自動(dòng)增加可用的計(jì)算能力來運(yùn)行函數(shù),然后在負(fù)載減少時(shí)降低計(jì)算能力。這可以有效地利用資源,只在需要時(shí)部署計(jì)算能力。
3.語言選項(xiàng):對各種編程語言都有很好的支持,所以您很可能可以用您選擇的語言構(gòu)建無服務(wù)器函數(shù)。例如,AWS Lambda本機(jī)支持Java、Go、PowerShell、Node.js、c#、Python和Ruby,并提供了一個(gè)運(yùn)行時(shí)API來允許使用其他編程語言。Azure函數(shù)支持c#、Javascript、f#、Java、Powershell、Python和Typescript。
4.Bug預(yù)防:使用無服務(wù)器功能進(jìn)行構(gòu)建必然會創(chuàng)建一個(gè)無狀態(tài)和無主機(jī)的系統(tǒng),這可以簡化對系統(tǒng)的推理,并防止一些關(guān)于狀態(tài)管理的復(fù)雜Bug。
5.數(shù)據(jù)管道:通過您的物聯(lián)網(wǎng)框架,您可以設(shè)置自動(dòng)的、事件驅(qū)動(dòng)的數(shù)據(jù)管道觸發(fā)器和數(shù)據(jù)庫存儲。通過附加的可視化框架或開發(fā)您的內(nèi)部儀表板,您可以立即監(jiān)視進(jìn)度。
6.少花錢:如果你的VM運(yùn)轉(zhuǎn)起來了,那么不管你是否充分利用了這些資源,還是它只是閑置著,你都要花錢。如果你的物聯(lián)網(wǎng)設(shè)備很少發(fā)送小的數(shù)據(jù)包,這就不是理想的,即使你有數(shù)千個(gè)設(shè)備不斷傳輸數(shù)據(jù),在包之間也會有很多空閑時(shí)間,這將是非常低效的。利用無服務(wù)器框架可以讓你只為你使用的東西付費(fèi),并且可以在不需要任何配置更改的情況下為你處理擴(kuò)展——無論你有一臺設(shè)備還是一百萬臺設(shè)備。此外,如果您使用的是Azure,正如《荒野中的無服務(wù)器》一文中最初提出的那樣,通過讓它預(yù)測調(diào)用,您將能夠顯著減少冷啟動(dòng)。
圖2–在無服務(wù)器平臺上運(yùn)行的功能
無服務(wù)器化的弊端
1.更少的控制:使用無服務(wù)器平臺的一個(gè)缺點(diǎn)是,您對運(yùn)行代碼的實(shí)例的控制更少,因?yàn)槟鸁o法控制底層硬件的配置。在無服務(wù)器環(huán)境中,對處理能力、內(nèi)存和處理時(shí)間的限制可能是一種局限,而在虛擬機(jī)中,您可以進(jìn)行相當(dāng)大的垂直擴(kuò)展。
2.長延遲:另一個(gè)缺點(diǎn)是,由于平臺在需求高峰期間處理增加可用計(jì)算能力(即啟動(dòng)更多虛擬機(jī)來運(yùn)行功能),當(dāng)用戶必須等待虛擬機(jī)啟動(dòng)時(shí),您對延遲的控制力度較低。這有時(shí)會導(dǎo)致第一次請求的長延遲,稱為“冷啟動(dòng)延遲”,這可能是對延遲高度敏感的應(yīng)用程序中的一個(gè)問題,盡管這通常不是一個(gè)問題。
彈性結(jié)構(gòu)
網(wǎng)上有許多關(guān)于無服務(wù)器架構(gòu)的成本比較;我們發(fā)現(xiàn)媒體上的無服務(wù)器轉(zhuǎn)換和燃燒和尚的分析非常有幫助。無服務(wù)器架構(gòu)非常適用于物聯(lián)網(wǎng)解決方案,并且越來越受歡迎。隨著當(dāng)今世界上數(shù)十億物聯(lián)網(wǎng)設(shè)備的使用,擁有一個(gè)彈性架構(gòu)對于快速投入生產(chǎn)至關(guān)重要。使用無服務(wù)器架構(gòu)構(gòu)建將讓您快速原型化,快速失敗,并從長遠(yuǎn)來看擊敗您的競爭對手——只需注意所有的底層屬性,以便最大限度地利用您的資金。
作者:Jason Choi