為邊緣編程成功值得借鑒的六個(gè)經(jīng)驗(yàn)
鑒于許多組織紛紛獲得邊緣計(jì)算在延遲、靈活性、成本和性能等方面帶來的好處,邊緣計(jì)算正在迅猛發(fā)展。IDC估計(jì),2022年全球在邊緣硬件、軟件和服務(wù)上的支出將超過1760億美元,比上一年猛增14.8%,到2025年將達(dá)到2740億美元。因此,您的開發(fā)人員很可能現(xiàn)正在開發(fā)邊緣應(yīng)用程序,或者在不遠(yuǎn)的將來會(huì)開發(fā)。
在積極試水之前,有幾個(gè)方面需要考慮。我是一名企業(yè)架構(gòu)師,與多家開發(fā)組織有過合作,在創(chuàng)建邊緣應(yīng)用程序方面可以給出幾個(gè)重要的經(jīng)驗(yàn)。牢記這些經(jīng)驗(yàn)可以幫助您避免令人沮喪的結(jié)果,并確保您充分發(fā)揮邊緣計(jì)算的優(yōu)勢(shì)。
經(jīng)驗(yàn)一:質(zhì)疑自己的想法
開發(fā)人員常常將創(chuàng)建邊緣應(yīng)用程序視為它們就像是面向數(shù)據(jù)中心或云的應(yīng)用程序。但是邊緣是一種不同的范式,需要不同的方法來編寫代碼,還需要深思熟慮地選擇哪些應(yīng)用程序適合邊緣。
大多數(shù)開發(fā)人員習(xí)慣于少量服務(wù)器擁有大量計(jì)算資源的集中式計(jì)算環(huán)境。但邊緣計(jì)算顛覆了這種情形,將數(shù)量適中的資源分布在不同位置的多臺(tái)服務(wù)器上。這會(huì)影響任何一種邊緣工作負(fù)載的可擴(kuò)展性。比如說,使用大量內(nèi)存的應(yīng)用程序面對(duì)成百上千個(gè)邊緣實(shí)例時(shí)可能無法很好地?cái)U(kuò)展。出于這個(gè)原因,大多數(shù)邊緣應(yīng)用程序?qū)⑹菍iT為邊緣構(gòu)建的,而不是從現(xiàn)有數(shù)據(jù)中心或云部署環(huán)境“平移”。
您需要批判性地思考邊緣架構(gòu)如何影響自己的應(yīng)用程序、哪些應(yīng)用程序?qū)⑹芤嬗谶@種分布式方法。將邏輯引入到數(shù)據(jù)所在的位置通常比較容易。因此,如果數(shù)據(jù)比較分散,或需要訪問大型集中式數(shù)據(jù)存儲(chǔ),基于云的方法可能很明智。但當(dāng)應(yīng)用程序使用邊緣處生成的數(shù)據(jù)時(shí),比如來自在線用戶的請(qǐng)求/響應(yīng)、Cookie和標(biāo)頭,這時(shí)候邊緣計(jì)算就能真正大放異彩。
經(jīng)驗(yàn)二:不要忽視基本面
雖然將代碼分發(fā)到邊緣可以改善延遲和可擴(kuò)展性,但不會(huì)一下子運(yùn)行得更快。低效的代碼在邊緣同樣很低效。如前所述,邊緣的每個(gè)接入點(diǎn)都將比典型的集中式計(jì)算環(huán)境更受資源的限制,尤其是在無服務(wù)器邊緣環(huán)境下。在為邊緣編寫代碼時(shí),優(yōu)化效率對(duì)于充分利用這種架構(gòu)至關(guān)重要。
當(dāng)將功能推送到邊緣相對(duì)快速和容易時(shí),您仍然需要運(yùn)用通常用于任何代碼的同樣的妥善管理流程。這包括良好的變更管理流程、將代碼存儲(chǔ)在源代碼控制系統(tǒng)中,以及使用代碼審查來評(píng)估代碼質(zhì)量。
經(jīng)驗(yàn)三:重新考慮可擴(kuò)展性
如果使用邊緣,您是“橫向擴(kuò)展”而不是“縱向擴(kuò)展”。因此,您需要開發(fā)代碼以適應(yīng)每個(gè)請(qǐng)求的約束,而不是從每個(gè)服務(wù)器的約束方面來考慮。這包括內(nèi)存使用、CPU周期和每個(gè)請(qǐng)求的時(shí)間等方面的約束。約束會(huì)因您使用的邊緣平臺(tái)而異,因此了解這些約束并相應(yīng)地設(shè)計(jì)代碼很重要。
通常,您需要使用每個(gè)操作所需的最小數(shù)據(jù)集進(jìn)行操作。比如說,如果您在邊緣進(jìn)行A/B測(cè)試,您可能只想存儲(chǔ)您在處理的特定請(qǐng)求或頁面所需的那部分?jǐn)?shù)據(jù),而不是整個(gè)規(guī)則集。如果是基于位置的體驗(yàn),您只需要輕量級(jí)查詢中該邊緣實(shí)例為特定的州或地區(qū)所提供的數(shù)據(jù),而不是所有地區(qū)的數(shù)據(jù)。
經(jīng)驗(yàn)四:為確??煽啃跃帉懘a
確保邊緣應(yīng)用程序的可靠性對(duì)于提供積極的用戶體驗(yàn)而言至關(guān)重要。確保您的質(zhì)量保證(QA)計(jì)劃包含測(cè)試邊緣代碼。添加適當(dāng)?shù)腻e(cuò)誤處理對(duì)于確保代碼能夠從容地處理錯(cuò)誤也很重要,包括規(guī)劃和測(cè)試出現(xiàn)問題時(shí)的回退行為。比如說,如果您的代碼超出了平臺(tái)施加的限制,您希望創(chuàng)建回退機(jī)制,以便退回到一些默認(rèn)內(nèi)容,這樣用戶不會(huì)收到影響體驗(yàn)的出錯(cuò)消息。
執(zhí)行分布式負(fù)載測(cè)試是證實(shí)應(yīng)用程序具有可擴(kuò)展性的好方法。一旦您部署了代碼,繼續(xù)監(jiān)控平臺(tái),以確保不會(huì)超出CPU和內(nèi)存方面的限制,并跟蹤任何錯(cuò)誤。
經(jīng)驗(yàn)五:優(yōu)化性能
邊緣計(jì)算的主要好處是將數(shù)據(jù)和計(jì)算資源移到靠近用戶的位置,從而大幅縮短延遲。當(dāng)您在成百上千個(gè)接入點(diǎn)(PoP)進(jìn)行擴(kuò)展時(shí),創(chuàng)建輕量級(jí)高效代碼對(duì)于獲得這個(gè)優(yōu)點(diǎn)至關(guān)重要。完成一項(xiàng)功能所需的數(shù)據(jù)也應(yīng)該在邊緣處。開發(fā)需要從集中式數(shù)據(jù)存儲(chǔ)獲取數(shù)據(jù)的代碼將使邊緣帶來的延遲優(yōu)點(diǎn)蕩然無存。
對(duì)于您可能希望用于邊緣應(yīng)用程序的任何第三方代碼,同樣需要強(qiáng)調(diào)高效執(zhí)行。一些現(xiàn)有的代碼庫很低效,損害性能及/或超出邊緣平臺(tái)在CPU和內(nèi)存方面的限制。因此在將任何代碼合并到部署的邊緣環(huán)境之前,先仔細(xì)評(píng)估一番。
經(jīng)驗(yàn)六:不重新發(fā)明輪子
雖然邊緣是一種新范式,但這并不意味著必須從頭開始編寫所有代碼。大多數(shù)邊緣平臺(tái)與各種內(nèi)容交付網(wǎng)絡(luò)(CDN)功能相集成,允許您創(chuàng)建自定義邏輯,以生成表示現(xiàn)有CDN功能(如緩存)的輸出。
構(gòu)建代碼確保可重用也是一個(gè)好主意,以便代碼在邊緣和集中式計(jì)算環(huán)境中都可以執(zhí)行。將核心功能抽取到不依賴瀏覽器、Node.JS或特定平臺(tái)功能的庫中,讓代碼可以“同構(gòu)”,能夠在客戶端、服務(wù)器和邊緣處運(yùn)行。
使用現(xiàn)有的開源庫是另一種避免重寫通用功能的方法。但要注意需要Node.JS或?yàn)g覽器功能的庫。一些第三方開發(fā)人員開發(fā)與您使用的邊緣平臺(tái)集成的產(chǎn)品,還要考慮與他們合作,這可以節(jié)省時(shí)間和精力,同時(shí)獲得互操作性經(jīng)過驗(yàn)證的優(yōu)點(diǎn)。
將經(jīng)驗(yàn)付諸實(shí)踐
為了說明這些最佳實(shí)踐帶來的影響,不妨考慮一個(gè)真實(shí)案例:一家組織在邊緣實(shí)施地理圍欄應(yīng)用程序時(shí)遇到了困難。由于超出了平臺(tái)在CPU和內(nèi)存方面的限制,該組織面臨高錯(cuò)誤率。
看看該組織如何構(gòu)建應(yīng)用程序,他們擁有所有地理圍欄區(qū)域的數(shù)據(jù),即900KB的JSON,存儲(chǔ)在每個(gè)邊緣PoP處。使用CPU密集型算法針對(duì)每個(gè)地理圍欄檢查興趣點(diǎn),在接受檢查的前幾個(gè)區(qū)域中未找到興趣點(diǎn)時(shí),就觸發(fā)CPU超時(shí)。
為了糾正這個(gè)問題,每個(gè)地理圍欄區(qū)域的數(shù)據(jù)都被移到了鍵值存儲(chǔ)(KVS)系統(tǒng),每個(gè)區(qū)域存儲(chǔ)在一個(gè)單獨(dú)的條目中。并添加了輕量級(jí)檢查,以確定某個(gè)興趣點(diǎn)可能存在的“候選區(qū)域”(通常是1到3個(gè)候選區(qū)域)。僅針對(duì)候選區(qū)域執(zhí)行完整的數(shù)據(jù)和CPU密集型檢查,這大大減少了CPU工作量。這些變化將錯(cuò)誤率降到了可忽略不計(jì)的水平,同時(shí)縮短了初始化時(shí)間,并減少了內(nèi)存使用量,如下圖所示。
圖1:成功率和錯(cuò)誤率的前后對(duì)比(請(qǐng)注意,成功和錯(cuò)誤度量指標(biāo)在不同的尺度上,因此無法直接比較)
圖2:初始化時(shí)間前后對(duì)比
圖3:內(nèi)存使用量前后對(duì)比。(圖片來源:Akamai)
充分發(fā)揮邊緣的優(yōu)勢(shì)
邊緣計(jì)算為受益于貼近用戶的應(yīng)用程序提供了巨大的優(yōu)勢(shì),不僅帶來了速度和效率,還帶來了個(gè)性化用戶體驗(yàn)。成功的關(guān)鍵是確保您的應(yīng)用程序很適合邊緣,然后優(yōu)化代碼以充分利用邊緣平臺(tái)功能,又不超出約束范圍。
如果注意我在與多家組織合作中獲得的經(jīng)驗(yàn),您可以更快速地充分發(fā)揮邊緣的好處,又沒有棘手的問題。
原文作者:JoshJohnson
譯者|布加迪
來源:51CTO