[點晴永久免費OA]系統(tǒng)架構(gòu)7個非功能性需求
當(dāng)前位置:點晴教程→點晴OA辦公管理信息系統(tǒng)
→『 經(jīng)驗分享&問題答疑 』
作者:編碼專家 博客:https://www.codingbrick.com 寄語:就算終其一生是個平凡人,那也不算什么失敗。 在軟件系統(tǒng)里面,功能性需求是面向用戶、詳細明確的需求,由產(chǎn)品人員根據(jù)市場的需要提煉出來,是產(chǎn)品生命周期里最重要的一環(huán)。比如電商系統(tǒng)里面的優(yōu)惠券功能,通常包含需求:優(yōu)惠券分類、細分領(lǐng)券人群、核銷優(yōu)惠券等等。一旦需求通過技術(shù)評審,開發(fā)人員必須依照文檔實現(xiàn)功能,不允許輕易變更。 非功能性需求是什么呢?保障系統(tǒng)持續(xù)健康運轉(zhuǎn)的輔助需求。依然以電商系統(tǒng)的優(yōu)惠券為例,在促銷活動期間發(fā)放大量優(yōu)惠券,如何防止用戶集中領(lǐng)券時系統(tǒng)不崩盤呢?活動結(jié)束后,如何收縮服務(wù)器,節(jié)省服務(wù)器資源呢? 非功能性需求是面向運維的,重要但是不太緊迫,有時候可以沒有操作界面,由架構(gòu)師提出解決方案,再推動各個業(yè)務(wù)開發(fā)部門去接入相應(yīng)組件。這些輔助系統(tǒng)對業(yè)務(wù)系統(tǒng)性能影響很小,并且長期處于優(yōu)化狀態(tài)。 1 可伸縮性 可伸縮性是指系統(tǒng)根據(jù)外部負載自動調(diào)節(jié)計算能力,常見的做法是水平擴展和垂直擴展。 水平擴展 當(dāng)系統(tǒng)負載很高時,增加服務(wù)端的節(jié)點數(shù)量,也叫做擴容;當(dāng)負載很低時,釋放閑置的機器,也叫做縮容。這兩個過程有幾個重要的思考點: (1)節(jié)點越多,承載能力越高嗎:任何事情都有兩面性,為了解決問題引入一個方案,就必然帶來新的問題。節(jié)點越多,協(xié)調(diào)節(jié)點的開銷就越大,額外增加的計算資源抵不上協(xié)調(diào)節(jié)點的開銷,并發(fā)能力不升反降。 (2)擴容多少節(jié)點才夠用:資源總是有限的,用有限的資源做更多的事情,才能得到資本家的歡心。合理擴容的數(shù)量根據(jù)壓測的結(jié)果來定。在日常的運維中,要求系統(tǒng)能夠自動化擴容少量機器處理突發(fā)流量,如果超出負載再發(fā)出警報。 垂直擴展 垂直擴展是指增強單機處理能力,比如增加內(nèi)存、升級CPU、更換固態(tài)硬盤等等。這個做法的好處是簡單快速,無需調(diào)整系統(tǒng)設(shè)計;缺點是單機的處理能力始終有限,不可能無限升級,而且更換硬件必須停機,影響系統(tǒng)可用性。 2 可用性 系統(tǒng)可用性是指系統(tǒng)在規(guī)定的時間內(nèi)正常運行的能力,是衡量系統(tǒng)質(zhì)量和穩(wěn)定性的重要指標之一。例如,一個系統(tǒng)的可用性為99.9%,表示在一年中的時間里,系統(tǒng)正常運行的時間占據(jù)了99.9%。以下是計算公式: Availability = (Total Time - Downtime) / Total Time * 100% Total Time表示總的時間,Downtime表示系統(tǒng)的停機時間。 除了自然災(zāi)害如水災(zāi)、地震等不可抗因素,降低可用性的主要原因是: 系統(tǒng)錯誤:系統(tǒng)代碼邏輯存在BUG或者服務(wù)端配置錯誤等,導(dǎo)致用戶無法正常訪問。2019年2月22日,京東金融App中的理財資產(chǎn)被系統(tǒng)清零,故障持續(xù)約20分鐘。京東客服表示,故障原因是系統(tǒng)升級導(dǎo)致的。 基礎(chǔ)設(shè)施:通常是硬件故障,比如機房故障、網(wǎng)絡(luò)故障。2022 年 12 月 18 日,阿里云香港 Region 可用區(qū) C 機房部分服務(wù)器宕機了超過 15 小時,原因是機房水冷裝置的故障。 惡意攻擊:黑客攻擊。常用的攻擊方式是DDoS(Distributed Denial of Service Attack),向目標服務(wù)器發(fā)送大量惡意請求來使目標服務(wù)器不可用,合法用戶無法訪問在線服務(wù)。 系統(tǒng)過載:沒有合理規(guī)劃計算節(jié)點,訪問量超出系統(tǒng)可以承載的范圍,無法響應(yīng)用戶的正常請求。 對于大型互聯(lián)網(wǎng)公司尤其是SaaS、云服務(wù)等公司,系統(tǒng)可用性就是生命線,只要出現(xiàn)時間過長的服務(wù)不可用,會大大影響口碑和品牌。通常這類公司采取的技術(shù)措施是異地多活,在不同城市建立獨立的數(shù)據(jù)中心?!盎睢笔窍鄬τ诶鋫浞荻缘模鋫浞菔莻浞萑繑?shù)據(jù),平時不支撐業(yè)務(wù)需求,只有在主機房出現(xiàn)故障的時候才會切換到備用機房,而多活,是指這些機房在日常的業(yè)務(wù)中也需要做業(yè)務(wù)支撐。 3 可維護性 可維護性是衡量系統(tǒng)升級的能力,修改或者增加需求,開發(fā)周期越短越好,注意與“可伸縮性”區(qū)分。 需求變更是無比尋常的事情,可維護性是所有團隊都會關(guān)注的重點。一旦系統(tǒng)的可維護性變差,程序員的頭發(fā)會迅速脫落。影響可維護性的因素主有三個: 業(yè)務(wù)本身的復(fù)雜度,項目成員對業(yè)務(wù)的熟悉程度。 工程代碼的質(zhì)量好壞,研發(fā)流程的科學(xué)與合理性。 需求評審等環(huán)節(jié)的執(zhí)行質(zhì)量,技術(shù)文檔沉淀的質(zhì)量。 近些年在大型項目開發(fā)里,領(lǐng)域驅(qū)動設(shè)計(Domain Driven Design)的出鏡率很高。領(lǐng)域驅(qū)動設(shè)計是一套從系統(tǒng)分析到軟件建模的設(shè)計思想和方法論。核心思想是以領(lǐng)域為核心驅(qū)動力構(gòu)建軟件設(shè)計體系,并圍繞業(yè)務(wù)概念抽象出領(lǐng)域模型,通過領(lǐng)域和邊界劃分將復(fù)雜的業(yè)務(wù)模型抽象化、簡單化,最終實現(xiàn)復(fù)雜軟件應(yīng)用系統(tǒng)的拆解和封裝。領(lǐng)域驅(qū)動設(shè)計并沒有發(fā)明新的東西,每個概念都是沿用已久的軟件開發(fā)理念。它的實施成本很高,項目代碼更加繁瑣,人員的溝通成本也較高。 如果團隊規(guī)模很小或者開發(fā)小型項目,提高可維護性至少要做好兩個事情: 開發(fā)流程規(guī)范化:簡化開發(fā)流程但是要嚴格執(zhí)行重要的節(jié)點,比如需求評審;嚴格執(zhí)行工程代碼規(guī)范;只撰寫重要的技術(shù)文檔。 模塊化和可重用性:將重要功能或者工具模塊化,能夠重用到新需求上;模塊的命名要準確、功能要單一。避免過早做抽象設(shè)計,否則陷入過度設(shè)計。 4 一致性 數(shù)據(jù)是系統(tǒng)最重要的資產(chǎn),數(shù)據(jù)不能丟也不能錯,保持數(shù)據(jù)一致性萬分重要。一致性分兩種情況: 事務(wù)數(shù)據(jù)一致性:在傳統(tǒng)關(guān)系數(shù)據(jù)庫中,事務(wù)提交后數(shù)據(jù)保持一致狀態(tài),即事務(wù)的ACID特性。比如同行轉(zhuǎn)賬,資金從一個賬戶轉(zhuǎn)移到新的賬戶,兩個賬戶的總額保持不變。 副本數(shù)據(jù)一致性:分布式系統(tǒng)包含多個數(shù)據(jù)副本,數(shù)據(jù)可能被同時寫入多個節(jié)點,也可能被同時讀取多個節(jié)點。最理想的情況是所有副本在任何時刻都具有相同的值。比如跨行轉(zhuǎn)賬,隸屬不同系統(tǒng)的賬戶,資金從一個賬戶轉(zhuǎn)移到新的賬戶,兩個賬戶的總額保持不變。 在分布式系統(tǒng)中,保持數(shù)據(jù)一致性是公認的難題,主要體現(xiàn)在下面幾點: 獨立進程:分布式系統(tǒng)無法像單機系統(tǒng)那樣共享內(nèi)存或者進程,需要分別獲得各個進程的本地狀態(tài),再組合成全局狀態(tài)。 全局時鐘:分布式系統(tǒng)沒有全局時鐘,各個進程無法正確獲得事件消息的時序關(guān)系,狀態(tài)的一致性難以保障。 網(wǎng)絡(luò)超時:分布式環(huán)境下網(wǎng)絡(luò)超時狀態(tài)的存在,需要具有高度容錯特性的解決辦法。 保持強一致性的成本很高,最好的解決方案就是避免分布式事務(wù),但是在金融、電信領(lǐng)域中的部分業(yè)務(wù)場景要求數(shù)據(jù)強一致性,同時要保證服務(wù)的可擴展性和可靠性。結(jié)合實際的業(yè)務(wù)場景,一致性可以細分五個級別: 強一致性(strong consistency):任何時刻、任何用戶或節(jié)點都可以讀到最近一次成功更新的副本數(shù)據(jù)。強一致性是程度最高的一致性要求; 單調(diào)一致性(monotonic consistency):任何時刻、任何用戶一旦讀到某個數(shù)據(jù)在某次更新后的值,這個用戶不會再讀到比這個值更舊的值。單調(diào)一致性是弱于強一致性卻非常實用的一種級別。通常來說,用戶只關(guān)心從自身視角觀察到的一致性,而不會關(guān)注其他用戶。 會話一致性(session consistency):任何用戶在某一次會話內(nèi)一旦讀到某個數(shù)據(jù)在某次更新后的值,這個用戶在這次會話過程中不會再讀到比這個值更舊的值。會話一致性通過引入會話的概念,在單調(diào)一致性的基礎(chǔ)上進一步放松約束,會話一致性只保證單個用戶單次會話內(nèi)數(shù)據(jù)的單調(diào)修改,對于不同用戶間的一致性和同一用戶不同會話間的一致性沒有保障。 最終一致性(eventual consistency):一旦更新成功,各個副本上的數(shù)據(jù)最終將達到完全一致的狀態(tài),但達到完全一致狀態(tài)所需要的時間不能保障。一個用戶只要始終讀取某一個副本的數(shù)據(jù),則可以實現(xiàn)類似單調(diào)一致性的效果,但用戶更換讀取的副本,則無法保障任何一致性。 5 彈性 彈性,是指系統(tǒng)可以優(yōu)雅地處理意外、從故障中恢復(fù)過來。故障是不可避免的,甚至不可預(yù)測。由于微服務(wù)的普及,故障發(fā)生的幾率與計算節(jié)點數(shù)量成正比。分布式系統(tǒng)具備一定的容忍故障的能力,故而彈性設(shè)計又稱容錯設(shè)計,主要的解決方法有如下兩點: 故障隔離 系統(tǒng)必須具備防止故障從一個系統(tǒng)傳播到另一個系統(tǒng)的能力,常見場景如下: (1)系統(tǒng)間強依賴:如果系統(tǒng)間存在強依賴,當(dāng)一個系統(tǒng)發(fā)生故障時,強依賴它的組件將無法正常工作。通常的手段是將強依賴轉(zhuǎn)化為弱依賴或最弱依賴,比如設(shè)置合適的超時、捕獲異常、同步依賴轉(zhuǎn)異步依賴、提供備份組件等。 (2)系統(tǒng)共享資源:如果系統(tǒng)間存在共享的資源,如線程池、數(shù)據(jù)庫連接池、網(wǎng)絡(luò)連接池、內(nèi)存區(qū)等等。當(dāng)一個系統(tǒng)因為故障耗盡了共享的資源后,所有依賴該資源的系統(tǒng)也都會發(fā)生故障。通常的手段是對組件的資源使用建立配額體系,或者為重要組件提供專用資源。 服務(wù)降級、限流、熔斷 (1)服務(wù)降級:當(dāng)出現(xiàn)系統(tǒng)故障后,在有限的資源情況下犧牲某些業(yè)務(wù)功能或者某些客戶群體,保障更關(guān)鍵的業(yè)務(wù)服務(wù)質(zhì)量。服務(wù)降級可以是人工觸發(fā)的,也可以是系統(tǒng)自動執(zhí)行的。所有核心交易場景下的非關(guān)鍵服務(wù)訪問均應(yīng)進行服務(wù)降級設(shè)計,以保證核心交易成功率。 (2)服務(wù)限流:當(dāng)負載超出系統(tǒng)處理能力時,可能會造成系統(tǒng)部分業(yè)務(wù)失敗,需要通過業(yè)務(wù)限流來防止系統(tǒng)進一步化。例如在一個分布式系統(tǒng)中,每秒最多只能處理2000個請求。為了防止系統(tǒng)過載,可以設(shè)置規(guī)則限制上游服務(wù)請求量,當(dāng)超過2000時隨機拋棄一些請求來實現(xiàn)限流。 (3)服務(wù)熔斷:微服務(wù)與微服務(wù)之間有依賴性,可能導(dǎo)致故障傳播,對整個系統(tǒng)造成災(zāi)難性的后果,即服務(wù)的雪崩效應(yīng)。熔斷器是通過快速失敗(Fail Fast)的機制,避免請求大量阻塞,從而保護調(diào)用方。比如:服務(wù)A調(diào)用當(dāng)下游B失敗時,會導(dǎo)致請求超時引起堆積隊列,進而加大了B系統(tǒng)的壓力,增加了整個鏈路的請求時間。B系統(tǒng)本身就出現(xiàn)了問題,不斷的請求又把問題加重了。如果使用了A觸發(fā)了熔斷,拒絕了上游的請求,會降低下游B服務(wù)的壓力,給與B服務(wù)恢復(fù)的時間。 6 可觀察性 可觀測性是指通過度量、監(jiān)控和分析系統(tǒng)組件,了解系統(tǒng)的狀態(tài)、性能和問題的能力??捎^測性可以幫助開發(fā)人員快速定位和解決系統(tǒng)中的問題,提高系統(tǒng)的穩(wěn)定性和可靠性。系統(tǒng)可觀測性設(shè)計還有助于優(yōu)化系統(tǒng)性能,幫助研發(fā)人員針對性地做出調(diào)整和優(yōu)化,提高系統(tǒng)的吞吐量和響應(yīng)速度。 系統(tǒng)可觀測性設(shè)計應(yīng)遵循幾個重要原則: 全面性原則:全局角度考慮系統(tǒng)的可觀測性,涵蓋系統(tǒng)的各個方面,如性能、錯誤、日志、指標等。其次是實時性原則,即要確保監(jiān)測和日志記錄的數(shù)據(jù)是實時生成的,這樣可以及時發(fā)現(xiàn)問題并做出調(diào)整。 簡潔性原則:避免過多冗余的監(jiān)測數(shù)據(jù)和日志信息,確保數(shù)據(jù)的準確性和有效性。 安全性原則:確保監(jiān)測數(shù)據(jù)和日志信息的安全存儲和傳輸,防止信息泄露和數(shù)據(jù)丟失。 主流的可觀察系統(tǒng)基于三類數(shù)據(jù)構(gòu)建,覆蓋了一個應(yīng)用服務(wù)器產(chǎn)生的大部分數(shù)據(jù): 日志:每個應(yīng)用中產(chǎn)生事件日志、事務(wù)日志、消息日志和服務(wù)器日志,存儲在日志數(shù)據(jù)庫。 指標:在單位時間的測量值,包括時間戳、地址等數(shù)據(jù)。指標數(shù)據(jù)是固定的結(jié)構(gòu),以便于系統(tǒng)查詢和存儲,存儲在時序數(shù)據(jù)庫。 鏈路:跟蹤每個請求的來龍去脈,記錄每個處理節(jié)點的地址、時間、發(fā)起者等等數(shù)據(jù),存儲在日志數(shù)據(jù)庫。 可觀察性系統(tǒng)是監(jiān)控系統(tǒng)的超集,監(jiān)控能夠檢測到系統(tǒng)當(dāng)前的問題,但是可觀察性系統(tǒng)要幫助研發(fā)人員預(yù)判故障發(fā)生的可能性。 7 安全性 安全性是指保障硬件正常運行,讓用戶只能訪問合法授權(quán)的資源。安全是架構(gòu)設(shè)計中很重要的一部分,很多大型企業(yè)都因為安全漏洞泄露過數(shù)據(jù)。廣義的安全性涉及到所有的軟硬件,比如物理機房、服務(wù)器及網(wǎng)絡(luò)、操作系統(tǒng)、應(yīng)用系統(tǒng)。架構(gòu)安全設(shè)計可以遵循如下五個原則: 認證和授權(quán):用戶通過正確的賬號和密碼等憑證訪問系統(tǒng),授權(quán)決定用戶進入系統(tǒng)后可以做什么。從最小權(quán)限原則開始,一開始不應(yīng)該具有任何訪問權(quán)限,根據(jù)其工作內(nèi)容分配權(quán)限。也可以根據(jù)工作內(nèi)容創(chuàng)建訪問組,通過集中式用戶數(shù)據(jù)庫實現(xiàn)單點登錄,進行統(tǒng)一管理授權(quán)策略。 全方位保障:通常企業(yè)主要關(guān)注數(shù)據(jù)中心和物理安全和保護外層網(wǎng)絡(luò)免受攻擊,其實企業(yè)應(yīng)使用深度防御方法,將安全防護應(yīng)用于架構(gòu)的每一層。例如web應(yīng)用需要通過保護邊緣網(wǎng)絡(luò)和域名系統(tǒng)路由來使其免受外部互聯(lián)網(wǎng)流量攻擊,在負載均衡和網(wǎng)絡(luò)層使用安全防護工具組織惡意流量。可以通過限制web應(yīng)用層和數(shù)據(jù)層只允許必須的入站、出站流量,來保護應(yīng)用程序的每一個實例,用殺毒軟件保護操作系統(tǒng)。 縮小影響半徑:在每一層應(yīng)用安全措施時,應(yīng)該始終將系統(tǒng)進行合理的隔離,以減小影響半徑。如果攻擊者獲得了系統(tǒng)某個部分的訪問權(quán)限,應(yīng)該能夠?qū)踩┒聪拗圃趹?yīng)用程序的最小區(qū)域內(nèi)。提供最小的訪問權(quán)限可以確保不會暴露整個系統(tǒng),提供臨時憑證可以確保訪問權(quán)限不會長期開放,提供開放式接口時要特別謹慎,務(wù)必要設(shè)置安全令牌,并且定期更換密鑰。 監(jiān)控和審計:將系統(tǒng)中每一項活動都記錄日志,并定期審計。審計功能要按行業(yè)法規(guī)要求制定,同時采取主動監(jiān)控,配備告警能力,從而在用戶受到影響之前對事件進行處理。 數(shù)據(jù)保護:建立一些機制來減少直接訪問數(shù)據(jù),通過自動化的工具處理數(shù)據(jù),避免人工處理數(shù)據(jù),消除人為錯誤。盡可能對數(shù)據(jù)進行訪問控制,減少數(shù)據(jù)丟失和數(shù)據(jù)篡改的風(fēng)險。數(shù)據(jù)不僅在靜止?fàn)顟B(tài)下需要保護,在傳輸過程中也要保護。 系統(tǒng)安全等級越高,運作成本越高。為了節(jié)省成本,中小型團隊主要聚焦應(yīng)用系統(tǒng)的安全,其他的交給云服務(wù)。云服務(wù)商負責(zé)云端安全,尤其是用于托管資源的物理基礎(chǔ)設(shè)施的安全,包含如下內(nèi)容: 數(shù)據(jù)中心:全天候安全警衛(wèi)、雙因子認證、訪問記錄和審查、視頻監(jiān)控、磁盤消磁和銷毀等。 硬件基礎(chǔ)設(shè)施:服務(wù)器、存儲設(shè)備和其他依賴云服務(wù)的設(shè)備。 軟件基礎(chǔ)設(shè)施:主機操作系統(tǒng)、服務(wù)應(yīng)用和虛擬化軟件。 網(wǎng)絡(luò)基礎(chǔ)設(shè)施:路由器、交換機、負載均衡器、防火墻、布線等,還包括對外部邊界、安全接入點和冗余基礎(chǔ)設(shè)施的持續(xù)網(wǎng)絡(luò)監(jiān)控。 開發(fā)團隊根據(jù)自身人力和財力,酌情實施安全設(shè)計,通??梢越梃b的安全措施有5條: 操作系統(tǒng):及時升級服務(wù)端操作系統(tǒng)的補丁,避免服務(wù)器遭受外部攻擊。 應(yīng)用程序:主要包含應(yīng)用程序和它的環(huán)境(如開發(fā)、測試和生產(chǎn)環(huán)境),及其所屬密碼策略和訪問管理的安全措施。 防火墻:采用防火墻保護整個系統(tǒng)免受外部攻擊。云服務(wù)提供了這方面的安全保障,但使用者可以考慮增加額外的安全層。 網(wǎng)絡(luò)配置和安全組:云服務(wù)提供了創(chuàng)建網(wǎng)絡(luò)防火墻的工具,使用者需要設(shè)置防火墻規(guī)則,以確保其系統(tǒng)免受來自外部和內(nèi)部的網(wǎng)絡(luò)流量的破壞。 數(shù)據(jù)加密:通過各種加密機制來保護業(yè)務(wù)數(shù)據(jù),導(dǎo)出重要數(shù)據(jù)時要考慮脫敏。 本文為原創(chuàng)文章,著作權(quán)歸作者[編碼磚家]所有,商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請注明出處。 來源地址:https://www.cnblogs.com/xiaoyangjia/p/17791803.html 該文章在 2023/10/27 18:15:46 編輯過 |
關(guān)鍵字查詢
相關(guān)文章
正在查詢... |