別做平庸Coder!掌握這十個架構(gòu)絕技,讓你成為團(tuán)隊MVP
一般來說,軟件系統(tǒng)的需求可以分為兩類:功能需求和非功能需求。軟件系統(tǒng)的架構(gòu)設(shè)計需要滿足這兩類需求。特別是系統(tǒng)架構(gòu)對軟件非功能需求的支持,成為架構(gòu)的質(zhì)量屬性。本文描述了軟件的10個質(zhì)量屬性,但這并不意味著每個質(zhì)量屬性都會出現(xiàn)在架構(gòu)設(shè)計中;你可以選擇對你的產(chǎn)品最重要的質(zhì)量屬性,然后實現(xiàn)它們。
可擴(kuò)展性
隨著用戶數(shù)量或請求數(shù)量的增加,系統(tǒng)的運行和操作能力也會增加。在云平臺上,可通過水平或垂直擴(kuò)展機(jī)器或簡單地附加一個自動擴(kuò)展組來實現(xiàn)可擴(kuò)展性。
- 流量模式:了解系統(tǒng)的流量模式。即使機(jī)器利用率低,也不值得生成盡可能多的機(jī)器。
- 日常模式:特定區(qū)域的流量在早上增加,晚上減少。
- 全球/區(qū)域模式:某些區(qū)域的應(yīng)用程序使用量很大。
- 突發(fā)流量:許多用戶在高峰期或人口稠密地區(qū)請求資源,但只有少數(shù)機(jī)器能夠提供服務(wù)。
- 自動擴(kuò)展:能夠快速啟動一些機(jī)器來處理突發(fā)流量,并在需求減少時優(yōu)雅地縮減。
- 延遲:能夠盡快為請求提供服務(wù),包括優(yōu)化算法和在用戶位置附近復(fù)制系統(tǒng)以減少往返請求。
可用性
通過正常運行時間的百分比來衡量,定義系統(tǒng)正常運行和工作時的時間比例。可用性受系統(tǒng)錯誤、基礎(chǔ)設(shè)施問題、惡意攻擊和系統(tǒng)負(fù)載的影響。
- 部署標(biāo)簽:部署應(yīng)用組件的多個獨立副本,包括數(shù)據(jù)存儲區(qū)。
- 區(qū)域部署:將后端服務(wù)部署到一組地理節(jié)點,每個節(jié)點可以處理來自任何區(qū)域的任何客戶端請求。
可擴(kuò)展性
可擴(kuò)展性指標(biāo)擴(kuò)展系統(tǒng)的能力以及實現(xiàn)可擴(kuò)展性所需的工作。擴(kuò)展可以通過添加新功能或修改現(xiàn)有功能來實現(xiàn),原則是在不影響當(dāng)前系統(tǒng)功能的前提下進(jìn)行增強(qiáng)。
模塊化/可重用性:可重用性和可擴(kuò)展性使技術(shù)能夠轉(zhuǎn)移到另一個項目中,減少開發(fā)和維護(hù)時間,同時增強(qiáng)可靠性和一致性??刹灏涡裕耗軌蜉p松插入其他組件,如微內(nèi)核架構(gòu)。
一致性
一致性確保每次讀取操作返回最新的寫操作結(jié)果。這意味著在執(zhí)行每次操作后,所有節(jié)點上的數(shù)據(jù)都是一致的,因此無論連接到哪個節(jié)點,所有客戶端都能同時看到相同的數(shù)據(jù)。一致性提高了數(shù)據(jù)的新鮮度。
彈性
可恢復(fù)性:準(zhǔn)備和功能的過程可以在意外變化發(fā)生后將服務(wù)恢復(fù)到初始操作狀態(tài)。意外變化包括應(yīng)用程序的軟刪除或硬刪除或配置錯誤。災(zāi)難恢復(fù)包括旨在防止或盡量減少災(zāi)難性事件造成的數(shù)據(jù)丟失和業(yè)務(wù)中斷的最佳實踐,涵蓋從設(shè)備故障和局部停電到網(wǎng)絡(luò)攻擊、民事緊急情況、犯罪或軍事攻擊,以及自然災(zāi)害。
設(shè)計模式:
- 隔離:將應(yīng)用程序的元素隔離到池中,以便當(dāng)一個池失敗時,其他元素繼續(xù)運行。
- 斷路器:在連接到遠(yuǎn)程服務(wù)或資源時,處理可能需要不同時間修復(fù)的故障。
- 選舉:通過選舉一個實例作為負(fù)責(zé)管理其他實例的領(lǐng)導(dǎo)者,協(xié)調(diào)分布式應(yīng)用程序中協(xié)作任務(wù)實例集合執(zhí)行的操作。
可觀察性
可觀察性是收集有關(guān)程序執(zhí)行、內(nèi)部模塊狀態(tài)和組件之間通信的數(shù)據(jù)的能力??梢允褂酶鞣N測試和跟蹤技術(shù)和工具來提高可觀察性。
- 日志記錄:在每個請求中生成不同類型的日志:事件日志、事務(wù)日志、消息日志和服務(wù)器日志。
- 警報和監(jiān)控:準(zhǔn)備監(jiān)控儀表板,創(chuàng)建SLIs(服務(wù)級別指標(biāo))并設(shè)置關(guān)鍵警報。
- L1/L2/L3:為L1/L2設(shè)置隨叫隨到的支持流程。L1支持與客戶互動,L2支持將L1路由到他們的票據(jù)并協(xié)助排除故障。L3是最終支持級別,通常涉及解決技術(shù)問題的開發(fā)團(tuán)隊。
安全性
軟件保護(hù)信息和數(shù)據(jù),為個人或其他產(chǎn)品或系統(tǒng)提供相應(yīng)級別的數(shù)據(jù)訪問類型和授權(quán)。這一系列功能包括機(jī)密性(數(shù)據(jù)只能由授權(quán)人員訪問)、完整性(軟件防止未經(jīng)授權(quán)的訪問或修改軟件或信息)、不可否認(rèn)性(能夠證明已發(fā)生的行為或事件)、可追責(zé)性(能夠追蹤用戶行為)和真實性(驗證用戶身份)。
- 審計性:審核和跟蹤系統(tǒng)活動,以便在安全漏洞發(fā)生時識別安全漏洞,確定漏洞的機(jī)制和范圍。遠(yuǎn)程存儲審計跟蹤可以防止入侵者掩蓋其蹤跡。
合法性:
- 合規(guī)性:遵守GDPR和個人信息保護(hù)法等數(shù)據(jù)保護(hù)法律法規(guī)。
- 隱私:能夠?qū)緝?nèi)部員工隱藏交易(加密交易,即使是DBA和網(wǎng)絡(luò)架構(gòu)師也看不到)。
- 身份驗證:確保用戶身份的安全要求。
- 授權(quán):確保用戶只能訪問應(yīng)用程序中的某些功能(通過用例、子系統(tǒng)、網(wǎng)頁、業(yè)務(wù)規(guī)則和字段級權(quán)限)。
持久性
耐久性是軟件在長時間內(nèi)提供服務(wù)并滿足用戶需求的能力。
- 復(fù)制:涉及共享信息以確保冗余資源之間的一致性,從而提高可靠性、容錯性或可訪問性。
- 容錯:容錯性是一種允許系統(tǒng)在一個或多個組件發(fā)生故障時繼續(xù)正常運行的功能。
- 歸檔:數(shù)據(jù)是否需要在一段時間后歸檔或刪除?(例如,客戶數(shù)據(jù)將在三個月后刪除或標(biāo)記為過時,并在備用數(shù)據(jù)庫中歸檔以供將來訪問。)
敏捷性
敏捷性已成為描述當(dāng)代軟件方法學(xué)的流行術(shù)語,敏捷團(tuán)隊可能是那些能夠適應(yīng)變化的團(tuán)隊。
- 可維護(hù)性:修改應(yīng)用程序和增強(qiáng)系統(tǒng)的難易程度。它表示開發(fā)人員在修改軟件以改進(jìn)、糾正或適應(yīng)環(huán)境和需求變化方面的有效性和效率。
- 可測試性:開發(fā)人員和其他人測試軟件的難易程度。
- 開發(fā)容易性:開發(fā)人員在修改軟件時不會引入缺陷或損害現(xiàn)有產(chǎn)品質(zhì)量的程度。
- 可部署性:從代碼提交到生產(chǎn)部署所需的時間。
- 可安裝性:在所有必要的平臺上安裝系統(tǒng)的難易程度。
- 可升級性:能夠輕松/快速地在服務(wù)器和客戶端上升級此應(yīng)用程序/解決方案的以前版本。
- 可移植性:系統(tǒng)是否需要在多個平臺上運行?(例如,前端是否需要與Oracle和SAP對接?)
- 可配置性:最終用戶可以通過可用接口輕松更改軟件配置的各個方面。
- 兼容性:產(chǎn)品、系統(tǒng)或組件在共享相同硬件或軟件環(huán)境時與其他產(chǎn)品、設(shè)計或成員交換信息的程度。
結(jié)語
在了解軟件架構(gòu)的10個質(zhì)量屬性后,我們可能需要考慮哪些質(zhì)量屬性更適合我們的產(chǎn)品或項目。那么,我們?nèi)绾卧陧椖恐欣^續(xù)采用這些特性?
一旦了解了功能需求,嘗試識別系統(tǒng)中可能阻礙這些功能的瓶頸。如何找到瓶頸?你可以嘗試回答幾個問題,例如:
- 系統(tǒng)能否在超過1億用戶的規(guī)模上運行?
- 系統(tǒng)能否處理1萬個并發(fā)請求?
- 數(shù)據(jù)處理是否安全?
- 是否可以輕松添加更多功能而不影響現(xiàn)有功能?通過回答這些問題,我們可以更好地理解和應(yīng)用軟件架構(gòu)的質(zhì)量屬性,提高系統(tǒng)的整體性能和可靠性。