C# 云模式和最佳實(shí)踐
在云中,僅允許較短的延遲或停機(jī)時(shí)間,代碼必須為此做好準(zhǔn)備,代碼要包含從這些平臺(tái)異常中成功恢復(fù)的邏輯。如果以前曾現(xiàn)場(chǎng)編碼,或編寫就地執(zhí)行的程序代碼,這是一個(gè)重要的思想轉(zhuǎn)變。需要忘掉很多有關(guān)管理異常的東西,學(xué)會(huì)接受失敗,并創(chuàng)建從這種失敗中恢復(fù)的代碼。
需要將可移植性、可伸縮性和彈性等概念集成到在云運(yùn)行中的程序里。但這里的可移植性有什么特殊含義?如果程序可在多個(gè)平臺(tái)上移動(dòng)或執(zhí)行,例如Windows、Linux和macOS,該程序就是可移植的。一些ASP.NET Core特性位于開源技術(shù)的新堆棧上,為開發(fā)人員提供把代碼編譯到二進(jìn)制文件中的選項(xiàng),以便在這些平臺(tái)上運(yùn)行。傳統(tǒng)上,開發(fā)人員使用ASP.NET編寫程序,在后臺(tái)運(yùn)行C#,使用IIS在 Windows服務(wù)器上運(yùn)行該程序。然而,從以云為核心的角度看,在沒有人工干預(yù)或程序化干預(yù)的情況下,程序及其所有依賴項(xiàng)從一個(gè)虛擬機(jī)移動(dòng)到另一個(gè)虛擬機(jī)的能力是最適用的“可移植性”。記住,云中會(huì)出現(xiàn)失敗,運(yùn)行程序的虛擬機(jī)(VM)可以在任何給定的時(shí)間消失,然后在另一臺(tái)虛擬機(jī)上重新構(gòu)建。因此,程序必須是可移植的,能從這樣的事件中恢復(fù)。
“可伸縮性”意味著,當(dāng)多個(gè)客戶使用代碼時(shí),代碼能正常響應(yīng)。例如,如果每分鐘有1500個(gè)請(qǐng)求,且請(qǐng)求的完成和響應(yīng)在1秒鐘之內(nèi)完成,則大約每秒有25個(gè)并發(fā)請(qǐng)求。如果每分鐘有15000個(gè)請(qǐng)求,則每秒有250個(gè)并發(fā)請(qǐng)求。云程序能以相同的方式響應(yīng)25個(gè)和250個(gè)并發(fā)請(qǐng)求嗎?如果是2550個(gè)并發(fā)請(qǐng)求呢?以下是幾個(gè)有效管理可伸縮性的云編程模式:
? 命令和查詢責(zé)任分離(Command and Query Responsibility Segregation, CQRS)模式——這種模式涉及把讀取數(shù)據(jù)的操作與修改或更新數(shù)據(jù)的操作分離開。
? 物化視圖模式——這會(huì)修改存儲(chǔ)結(jié)構(gòu),以便反映數(shù)據(jù)查詢模式。例如,為極常用的查詢創(chuàng)建視圖可以執(zhí)行更有效的查詢。
? 分片(Sharding)模式——這把數(shù)據(jù)分解到多個(gè)水平碎片中(其中包含明顯不同的數(shù)據(jù)子集),而不是通過增加硬件的容量進(jìn)行垂直伸縮。
? 管家鑰匙(Valet Key)1i式一這允許客戶直接訪問數(shù)據(jù)存儲(chǔ),以傳輸或上傳大文件。它不是讓W(xué)eb客戶機(jī)管理數(shù)據(jù)存儲(chǔ)的守衛(wèi)工作,而是給客戶提供一把管家鑰匙,并允許直接訪問數(shù)據(jù)存儲(chǔ)。
“彈性”是指程序響應(yīng)和從服務(wù)故障和異常中恢復(fù)的程度。從歷史上看,IT基礎(chǔ)設(shè)施一直專注于失敗的預(yù)防,其可接受的停機(jī)時(shí)間是最短的,期望值是99.99%或99.999% SLA(Service-LevelAgreement,服務(wù)水平協(xié)議)。 但在云中運(yùn)行程序,可靠性需要做思維轉(zhuǎn)變,我們需要擁抱失敗,要更關(guān)注恢復(fù)(而不是預(yù)防)。程序有多個(gè)依賴項(xiàng),如數(shù)據(jù)庫(kù)、存儲(chǔ)器、網(wǎng)絡(luò)和第三方服務(wù),其中一些沒有SLA,所以需要轉(zhuǎn)變視角。在出現(xiàn)中斷或非正常運(yùn)行的情況下,如果仍能做出用戶友好的響應(yīng),會(huì)使云程序富有彈性。下面的一些云編程模式可用于將彈性嵌入云程序:
? 斷路器模式——這是一種代碼設(shè)計(jì)方式,它了解遠(yuǎn)程服務(wù)的狀態(tài),只有在服務(wù)可用的情況下,才會(huì)試圖連接。如果通過以前的失敗知道遠(yuǎn)程服務(wù)不可用,就會(huì)避免嘗試請(qǐng)求和浪費(fèi)CPU周期。
? 健康端點(diǎn)監(jiān)控模式一一這會(huì)通過實(shí)現(xiàn)端點(diǎn)檢測(cè),檢查基于云的應(yīng)用程序是否可用。
? 重試模式——在短暫的異?;蚬收虾笾卦囌?qǐng)求。這種模式在給定的時(shí)間段內(nèi)重試多次,當(dāng)重試次數(shù)到達(dá)閾值時(shí),就停止重試。
? 節(jié)流模式一一管理云程序的使用,以便滿足SLA,而且程序在高負(fù)載下仍然可用。
使用上述一個(gè)或多個(gè)模式,有助于更成功地實(shí)現(xiàn)云遷移。上述模式會(huì)提高程序的可伸縮性和彈性,從而提高程序的可用性。這反過來會(huì)帶來更愉悅的用戶或客戶體驗(yàn)。
點(diǎn)擊加載更多評(píng)論>>