Azure架構(gòu)良好的框架是一組指導(dǎo)原則,可用于提高工作負荷的質(zhì)量。該框架包含卓越體系結(jié)構(gòu)的五個要素:成本優(yōu)化、卓越運營、性能效率、可靠性和安全性。
若要使用在Microsoft Azure架構(gòu)良好的框架中找到的原則來評估工作負載,請參閱Microsoft Azure架構(gòu)良好的框架回顧。
成本優(yōu)化
設(shè)計云解決方案時,請重點關(guān)注如何及早產(chǎn)生增值。運用生成-度量-學(xué)習的原則,在加快上市時間的同時避免資本密集型解決方案。將即用即付策略用于你的體系結(jié)構(gòu),并且投資于橫向擴展,而不是交付大型投資第一版??紤]你的體系結(jié)構(gòu)中的機會成本,以及在先發(fā)優(yōu)勢與“快速跟進”之間的平衡。使用成本計算器來估計初始成本和運營成本。最后,建立策略、預(yù)算和控制,以便為解決方案設(shè)置成本限制。
成本指南
·查看成本原則
·開發(fā)成本模型
·創(chuàng)建預(yù)算和警報
·查看成本優(yōu)化清單
卓越運營
此構(gòu)成要素涵蓋讓應(yīng)用程序在生產(chǎn)環(huán)境中持續(xù)運行的操作過程。部署必須可靠且可預(yù)測。它們應(yīng)實現(xiàn)自動化,以減少人為失誤的可能性。它們應(yīng)當是一個快速、例行的過程,這樣就不會拖慢新功能或bug修復(fù)的發(fā)布。如果更新出現(xiàn)問題,你必須能夠快速回滾或前滾,這一點也同樣重要。
監(jiān)視和診斷至關(guān)重要。云應(yīng)用程序在遠程數(shù)據(jù)中心內(nèi)運行,你在此中心內(nèi)無法完全控制基礎(chǔ)結(jié)構(gòu),或者在某些情況下無法控制操作系統(tǒng)。在大型應(yīng)用程序中,不可能登錄到VM來解決問題或仔細查看日志文件。使用PaaS服務(wù)時,可能根本就沒有可登錄的專用VM。通過監(jiān)視和診斷,你可以深入了解系統(tǒng),以便知道故障在何時及何處出現(xiàn)。所有系統(tǒng)都必須可觀測??墒褂贸R姷囊恢氯罩居涗浖軜?gòu),以便跨系統(tǒng)關(guān)聯(lián)事件。
監(jiān)視和診斷過程包含多個不同的階段:
·檢測。根據(jù)應(yīng)用程序日志、Web服務(wù)器日志、Azure平臺內(nèi)置的診斷以及其他來源生成原始數(shù)據(jù)。
·收集和存儲。將數(shù)據(jù)整合到一個位置。
·分析和診斷。用于解決問題,查看總體運行狀況。
·可視化和警報。使用遙測數(shù)據(jù)發(fā)現(xiàn)趨勢或向運營團隊發(fā)出警報。
使用DevOps清單從管理和DevOps角度審查你的設(shè)計。
卓越運營指南
·管理和監(jiān)視的設(shè)計模式
·最佳做法:監(jiān)視和診斷
性能效率
性能效率是指工作負載能夠以高效的方式擴展以滿足用戶對它的需求。實現(xiàn)這一點的主要方法是適當?shù)厥褂每缮炜s性并實現(xiàn)內(nèi)置可伸縮性的PaaS產(chǎn)品/服務(wù)。
應(yīng)用程序可通過兩種主要方式進行擴展。垂直擴展(縱向擴展)指增加資源的容量,例如通過使用更大的VM。水平擴展(橫向擴展)指添加資源的新實例,比如VM或數(shù)據(jù)庫副本。
水平擴展相較垂直擴展具有明顯優(yōu)勢:
·真正的云規(guī)模??蓪?yīng)用程序設(shè)計為在數(shù)百個甚至數(shù)千個節(jié)點上運行,其規(guī)模是在單個節(jié)點上無法達到的。
·水平擴展具有彈性。如果負載增加,可以添加更多實例;在較安靜的時間段,則可以刪除實例。
·可以按計劃或為響應(yīng)負載變化,自動觸發(fā)橫向擴展。
·橫向擴展可能比縱向擴展更便宜。運行多個小型VM比運行單個大型VM的成本更低。
·水平擴展還可通過添加冗余提高復(fù)原能力。如果某個實例出現(xiàn)故障,應(yīng)用程序?qū)⒗^續(xù)運行。
垂直擴展的一個優(yōu)點是,擴展時不必對應(yīng)用程序進行任何更改。但會在某個時候達到極限,即,再也無法縱向擴展。這時,任何進一步的擴展都只能是水平擴展。
必須將水平擴展設(shè)計到系統(tǒng)中。例如,可通過將VM放在負載均衡器后面來橫向擴展VM。但池中的每個VM都必須能夠處理任何客戶端請求,因此應(yīng)用程序必須無狀態(tài)或?qū)顟B(tài)存儲在外部(例如,在分布式緩存中)。托管PaaS服務(wù)通常內(nèi)置水平擴展和自動擴展。能輕松擴展這些服務(wù)是使用PaaS服務(wù)的主要優(yōu)點。
不過,只添加更多實例并不意味著就擴展了應(yīng)用程序。它可能只是將瓶頸推到了其他地方。例如,如果擴展Web前端以處理更多客戶端請求,則可能在數(shù)據(jù)庫中觸發(fā)鎖爭用。然后,你就得考慮其他對策,比如樂觀并發(fā)或數(shù)據(jù)分區(qū),以提高數(shù)據(jù)庫的吞吐量。
始終執(zhí)行性能和負載測試以發(fā)現(xiàn)這些潛在瓶頸。系統(tǒng)的有狀態(tài)部分(如數(shù)據(jù)庫)是導(dǎo)致瓶頸最常見的原因,因此在設(shè)計水平擴展時需謹慎。解決一個瓶頸可能會暴露其他位置的其他瓶頸。
使用性能效率檢查表從可伸縮性的角度審查你的設(shè)計。
性能效率指南
·可伸縮性和性能的設(shè)計模式
·最佳做法:自動縮放、后臺作業(yè)、緩存、CDN、數(shù)據(jù)分區(qū)
可靠性
可靠的工作負載是可復(fù)原且可用的工作負載。復(fù)原能力是指系統(tǒng)從故障中恢復(fù)并繼續(xù)正常運行的能力。復(fù)原能力的目標是在故障發(fā)生后將應(yīng)用程序恢復(fù)到可完全正常運行的狀態(tài)??捎眯允侵赣脩粼谛枰獣r能否訪問你的工作負載。
傳統(tǒng)應(yīng)用程序開發(fā)一直將焦點放在如何延長平均故障間隔時間(MTBF)上,并嘗試各種辦法防止系統(tǒng)出現(xiàn)故障。在云計算中,必須采用不同的思維方式,原因如下:
·分布式系統(tǒng)很復(fù)雜,一個點的故障可能在整個系統(tǒng)中級聯(lián)。
·云環(huán)境通過使用商用硬件保持低成本,因此必須預(yù)料到偶爾的硬件故障。
·應(yīng)用程序通常依賴于外部服務(wù),這些服務(wù)可能會變得暫時不可用或限制大量用戶。
·現(xiàn)在的用戶都希望應(yīng)用程序能夠全天候可用,永不下線。
所有這些因素都意味著設(shè)計云應(yīng)用程序時必須預(yù)料到偶發(fā)故障并從中恢復(fù)。Azure已向平臺內(nèi)置許多復(fù)原功能。例如:
·Azure存儲、SQL數(shù)據(jù)庫和Cosmos DB都在區(qū)域內(nèi)以及跨區(qū)域提供內(nèi)置數(shù)據(jù)復(fù)制。
·Azure托管磁盤自動放置在不同的存儲縮放單元,以限制硬件故障的影響。
·可用性集中的VM分布在多個容錯域。容錯域是指一組共享公共電源和網(wǎng)絡(luò)交換機的VM??缛蒎e域分布VM可限制物理硬件故障、網(wǎng)絡(luò)中斷或斷電的影響。
話雖如此,你仍需構(gòu)建應(yīng)用程序的復(fù)原能力。復(fù)原策略可應(yīng)用于體系結(jié)構(gòu)的所有級別。有些緩解措施本質(zhì)上更具戰(zhàn)術(shù)意義—例如,在暫時性網(wǎng)絡(luò)故障后重試遠程調(diào)用。其他緩解措施則更具戰(zhàn)略意義,比如將整個應(yīng)用程序故障轉(zhuǎn)移到次要區(qū)域。戰(zhàn)術(shù)性緩解措施可以帶來很大變化。整個區(qū)域都發(fā)生中斷的情況很少見,像網(wǎng)絡(luò)擁塞這樣的暫時性問題則更常見—因此先鎖定這些問題。正確的監(jiān)視和診斷也很重要,它們都能檢測到正在發(fā)生的故障并找到根本原因。
設(shè)計可復(fù)原的應(yīng)用程序時,必須了解可用性要求??梢越邮芏嚅L的故障時間?這在一定程度上取決于成本。潛在的停機會給業(yè)務(wù)造成多大的損失?使應(yīng)用程序保持高可用性需要投入多少資金?
可靠性指南
·設(shè)計可靠的Azure應(yīng)用程序
·復(fù)原能力的設(shè)計模式
·最佳做法:暫時性錯誤處理、特定服務(wù)重試指南
安全性
考慮從設(shè)計和實現(xiàn)到部署和運行的整個應(yīng)用程序生命周期的安全性。Azure平臺會提供保護以應(yīng)對各種威脅,如網(wǎng)絡(luò)入侵和DDoS攻擊。但你仍需在應(yīng)用程序和DevOps過程中構(gòu)建安全性。
下面是一些需要考慮的較廣泛的安全領(lǐng)域。
身份管理
請考慮使用Azure Active Directory(Azure AD)對用戶進行身份驗證和授權(quán)。Azure AD是一項完全托管的標識和訪問管理服務(wù)。該服務(wù)可用于創(chuàng)建僅存在于Azure的域,或與本地Active Directory標識集成。Azure AD還與Office365、Dynamics CRM Online和許多第三方SaaS應(yīng)用程序集成。對于面向使用者的應(yīng)用程序,Azure Active Directory B2C允許用戶使用其現(xiàn)有社交帳戶(如Facebook、Google或LinkedIn)進行身份驗證,或者創(chuàng)建由Azure AD管理的新用戶帳戶。
若要將本地Active Directory環(huán)境與Azure網(wǎng)絡(luò)集成,可通過多種方法實現(xiàn),具體視你的要求而定。有關(guān)詳細信息,請參閱我們的標識管理參考體系結(jié)構(gòu)。
保護基礎(chǔ)結(jié)構(gòu)
控制對已部署的Azure資源的訪問。每個Azure訂閱都與某個Azure AD租戶存在信任關(guān)系??墒褂没诮巧脑L問控制(RBAC)向組織內(nèi)的用戶授予對Azure資源的正確權(quán)限。通過向用戶或組分配RBAC角色,授予對特定范圍的訪問權(quán)限。該范圍可以是訂閱、資源組或單個資源。審核對基礎(chǔ)結(jié)構(gòu)的所有更改。
應(yīng)用程序安全性
一般來說,應(yīng)用程序開發(fā)的安全性最佳做法在云端仍然適用。其中包括隨處使用SSL、防止CSRF和XSS攻擊、阻止SQL注入攻擊等等。
云應(yīng)用程序通常使用具有訪問密鑰的托管服務(wù)。絕不要將這些服務(wù)簽入源控件中。請考慮將應(yīng)用程序密碼存儲到Azure Key Vault中。
數(shù)據(jù)自主性和加密
使用Azure的高可用性時,確保數(shù)據(jù)一直位于正確的地緣政治區(qū)域中。Azure的異地復(fù)制存儲采用了同一地緣政治區(qū)域中的配對區(qū)域這一概念。
使用Key Vault保護加密密鑰和密碼。通過使用Key Vault,可以利用受硬件安全模塊(HSM)保護的密鑰來加密密鑰和密碼。許多Azure存儲和DB服務(wù)支持靜態(tài)數(shù)據(jù)加密,包括Azure存儲、Azure SQL數(shù)據(jù)庫、Azure Synapse Analytics和Cosmos DB。