位置:首頁 > 軟件操作教程 > 編程開發(fā) > C# > 問題詳情

C# 云模式和最佳實踐

提問人:劉團(tuán)圓發(fā)布時間:2020-12-09

    在云中,僅允許較短的延遲或停機(jī)時間,代碼必須為此做好準(zhǔn)備,代碼要包含從這些平臺異常中成功恢復(fù)的邏輯。如果以前曾現(xiàn)場編碼,或編寫就地執(zhí)行的程序代碼,這是一個重要的思想轉(zhuǎn)變。需要忘掉很多有關(guān)管理異常的東西,學(xué)會接受失敗,并創(chuàng)建從這種失敗中恢復(fù)的代碼。

    需要將可移植性、可伸縮性和彈性等概念集成到在云運(yùn)行中的程序里。但這里的可移植性有什么特殊含義?如果程序可在多個平臺上移動或執(zhí)行,例如Windows、Linux和macOS,該程序就是可移植的。一些ASP.NET Core特性位于開源技術(shù)的新堆棧上,為開發(fā)人員提供把代碼編譯到二進(jìn)制文件中的選項,以便在這些平臺上運(yùn)行。傳統(tǒng)上,開發(fā)人員使用ASP.NET編寫程序,在后臺運(yùn)行C#,使用IIS在 Windows服務(wù)器上運(yùn)行該程序。然而,從以云為核心的角度看,在沒有人工干預(yù)或程序化干預(yù)的情況下,程序及其所有依賴項從一個虛擬機(jī)移動到另一個虛擬機(jī)的能力是最適用的“可移植性”。記住,云中會出現(xiàn)失敗,運(yùn)行程序的虛擬機(jī)(VM)可以在任何給定的時間消失,然后在另一臺虛擬機(jī)上重新構(gòu)建。因此,程序必須是可移植的,能從這樣的事件中恢復(fù)。

    “可伸縮性”意味著,當(dāng)多個客戶使用代碼時,代碼能正常響應(yīng)。例如,如果每分鐘有1500個請求,且請求的完成和響應(yīng)在1秒鐘之內(nèi)完成,則大約每秒有25個并發(fā)請求。如果每分鐘有15000個請求,則每秒有250個并發(fā)請求。云程序能以相同的方式響應(yīng)25個和250個并發(fā)請求嗎?如果是2550個并發(fā)請求呢?以下是幾個有效管理可伸縮性的云編程模式:

    ? 命令和查詢責(zé)任分離(Command and Query Responsibility Segregation, CQRS)模式——這種模式涉及把讀取數(shù)據(jù)的操作與修改或更新數(shù)據(jù)的操作分離開。

    ? 物化視圖模式——這會修改存儲結(jié)構(gòu),以便反映數(shù)據(jù)查詢模式。例如,為極常用的查詢創(chuàng)建視圖可以執(zhí)行更有效的查詢。

    ? 分片(Sharding)模式——這把數(shù)據(jù)分解到多個水平碎片中(其中包含明顯不同的數(shù)據(jù)子集),而不是通過增加硬件的容量進(jìn)行垂直伸縮。

    ? 管家鑰匙(Valet Key)1i式一這允許客戶直接訪問數(shù)據(jù)存儲,以傳輸或上傳大文件。它不是讓W(xué)eb客戶機(jī)管理數(shù)據(jù)存儲的守衛(wèi)工作,而是給客戶提供一把管家鑰匙,并允許直接訪問數(shù)據(jù)存儲。

    “彈性”是指程序響應(yīng)和從服務(wù)故障和異常中恢復(fù)的程度。從歷史上看,IT基礎(chǔ)設(shè)施一直專注于失敗的預(yù)防,其可接受的停機(jī)時間是最短的,期望值是99.99%或99.999% SLA(Service-LevelAgreement,服務(wù)水平協(xié)議)。 但在云中運(yùn)行程序,可靠性需要做思維轉(zhuǎn)變,我們需要擁抱失敗,要更關(guān)注恢復(fù)(而不是預(yù)防)。程序有多個依賴項,如數(shù)據(jù)庫、存儲器、網(wǎng)絡(luò)和第三方服務(wù),其中一些沒有SLA,所以需要轉(zhuǎn)變視角。在出現(xiàn)中斷或非正常運(yùn)行的情況下,如果仍能做出用戶友好的響應(yīng),會使云程序富有彈性。下面的一些云編程模式可用于將彈性嵌入云程序:

    ? 斷路器模式——這是一種代碼設(shè)計方式,它了解遠(yuǎn)程服務(wù)的狀態(tài),只有在服務(wù)可用的情況下,才會試圖連接。如果通過以前的失敗知道遠(yuǎn)程服務(wù)不可用,就會避免嘗試請求和浪費(fèi)CPU周期。

    ? 健康端點(diǎn)監(jiān)控模式一一這會通過實現(xiàn)端點(diǎn)檢測,檢查基于云的應(yīng)用程序是否可用。

    ? 重試模式——在短暫的異常或故障后重試請求。這種模式在給定的時間段內(nèi)重試多次,當(dāng)重試次數(shù)到達(dá)閾值時,就停止重試。

    ? 節(jié)流模式一一管理云程序的使用,以便滿足SLA,而且程序在高負(fù)載下仍然可用。

    使用上述一個或多個模式,有助于更成功地實現(xiàn)云遷移。上述模式會提高程序的可伸縮性和彈性,從而提高程序的可用性。這反過來會帶來更愉悅的用戶或客戶體驗。


繼續(xù)查找其他問題的答案?

相關(guān)視頻回答
回復(fù)(0)
返回頂部