更新時(shí)間:2022-05-11 10:15:54 來(lái)源:動(dòng)力節(jié)點(diǎn) 瀏覽1530次
動(dòng)力節(jié)點(diǎn)小編來(lái)給大家進(jìn)行軟件系統(tǒng)設(shè)計(jì)原則介紹。
在這篇文章中,我們將介紹一篇關(guān)于軟件系統(tǒng)設(shè)計(jì)原則的綜合文章。軟件架構(gòu)對(duì)于創(chuàng)建同時(shí)實(shí)現(xiàn)多個(gè)目標(biāo)所需的復(fù)雜軟件結(jié)構(gòu)非常關(guān)鍵。在項(xiàng)目開始時(shí)創(chuàng)建正確的軟件架構(gòu)可以在可擴(kuò)展性、可用性、可靠性和降低維護(hù)成本方面帶來(lái)更好的長(zhǎng)期結(jié)果。糟糕的軟件架構(gòu)和架構(gòu)決策可能會(huì)導(dǎo)致維護(hù)成本增加和系統(tǒng)難以維護(hù)。
讓我們來(lái)看看一些最好的系統(tǒng)設(shè)計(jì)原則。
關(guān)注點(diǎn)分離是軟件設(shè)計(jì)中最重要的原則,即將您的軟件系統(tǒng)劃分為組件,每個(gè)部分構(gòu)建一次。關(guān)注點(diǎn)分離導(dǎo)致應(yīng)用程序的模塊化,而模塊化是可擴(kuò)展和可維護(hù)的軟件架構(gòu)的關(guān)鍵。
軟件系統(tǒng)需要以盡可能少的重疊功能進(jìn)行分解。系統(tǒng)中的每個(gè)模塊或服務(wù)都應(yīng)該專注于一組專用的功能。這種方法使其更易于理解、開發(fā)、維護(hù)和易于增強(qiáng)應(yīng)用程序。設(shè)計(jì)具有分離關(guān)注點(diǎn)的系統(tǒng)有助于用不同的編程語(yǔ)言開發(fā)不同的模塊。面向?qū)ο缶幊?/span>中的繼承和組合特性有助于提高應(yīng)用程序的模塊化。
模塊化的主要好處是:
(1)可重用性
模塊化使重用代碼變得容易。公共代碼可以打包為庫(kù),并且可以在多個(gè)項(xiàng)目和/或模塊中使用。
(2)可維護(hù)性
當(dāng)軟件應(yīng)用程序模塊化時(shí),易于排除應(yīng)用程序故障,易于修復(fù)任何錯(cuò)誤,易于維護(hù)。由于每個(gè)組件都是自包含的,因此可以輕松緩解依賴性問(wèn)題。通過(guò)模擬其他依賴項(xiàng)來(lái)測(cè)試每個(gè)模塊也很容易。模塊化有助于提高開發(fā)團(tuán)隊(duì)的生產(chǎn)力,因?yàn)楣ぷ骺梢暂p松地在開發(fā)人員或開發(fā)團(tuán)隊(duì)之間分離。
(3)可擴(kuò)展性
模塊化將模塊彼此抽象。只要保持向后兼容性或創(chuàng)建新版本的 API,就可以更輕松地?cái)U(kuò)展每個(gè)模塊的功能或向現(xiàn)有模塊添加新功能,而不會(huì)對(duì)其他模塊產(chǎn)生重大影響。通過(guò)創(chuàng)建新組件或模塊可以輕松添加新功能。
內(nèi)聚度是模塊的相關(guān)元素歸屬在一起并做一件專門的事情的程度。模塊中的所有相關(guān)代碼應(yīng)該彼此靠近。這有助于減少處理請(qǐng)求的延遲。耦合是指應(yīng)用程序中不同模塊相互依賴的程度。
耦合是兩個(gè)系統(tǒng)之間的依賴程度。使軟件組件盡可能松耦合,即每個(gè)模塊應(yīng)盡可能獨(dú)立于其他模塊,以便一個(gè)系統(tǒng)中的更改對(duì)其他組件的影響最小甚至沒(méi)有。繼承是緊耦合的一個(gè)例子。組合是松散耦合的一個(gè)例子。減少耦合導(dǎo)致增加內(nèi)聚。
事件驅(qū)動(dòng)架構(gòu)可幫助應(yīng)用程序在后端系統(tǒng)中感興趣的數(shù)據(jù)項(xiàng)發(fā)生更改時(shí)得到通知。應(yīng)用程序監(jiān)聽這些通知并刷新它們的緩存并采取任何后續(xù)行動(dòng)。如果客戶端應(yīng)用程序可以處理事件通知,則有助于減少對(duì)后端系統(tǒng)的調(diào)用次數(shù)。
有幾種通知機(jī)制可用于應(yīng)用程序開發(fā)。其中一些是 ActiveMQ、RabbitMQ、Kafka 等分布式消息傳遞系統(tǒng)。每個(gè)云提供商還提供不同的消息傳遞/通知服務(wù)。
客戶端請(qǐng)求路徑中的大量處理會(huì)導(dǎo)致客戶端調(diào)用延遲增加并限制吞吐量應(yīng)用程序處理量。最少的處理導(dǎo)致更快的響應(yīng),應(yīng)用程序可以用更少的容量處理更多的負(fù)載。通過(guò)預(yù)先計(jì)算可能的響應(yīng)項(xiàng)并將它們緩存在分布式緩存中,可以實(shí)現(xiàn)最少的處理。當(dāng)客戶端請(qǐng)求數(shù)據(jù)項(xiàng)時(shí),可以直接從填充的緩存中獲取預(yù)先計(jì)算的數(shù)據(jù)。
在適用的地方使用緩存來(lái)減少遠(yuǎn)程服務(wù)調(diào)用、數(shù)據(jù)庫(kù)調(diào)用和請(qǐng)求路徑中的處理量。這有助于減少客戶端調(diào)用服務(wù)的延遲。使用事件通知機(jī)制來(lái)保持緩存溫暖并避免向客戶端提供陳舊數(shù)據(jù)。
分布式系統(tǒng)被設(shè)計(jì)為高度可擴(kuò)展、可靠且可用于服務(wù)于負(fù)載的變化,并且高度可靠且可用。以下是有關(guān)這些特征的更多詳細(xì)信息:
(1)可擴(kuò)展性
可擴(kuò)展性是系統(tǒng)通過(guò)增加額外容量自動(dòng)增長(zhǎng)和管理需求增長(zhǎng)的能力。縮放有兩種類型,垂直縮放和水平縮放。
1)垂直縮放
在 Vertical Scaling 中,您可以添加更多具有更大容量的高級(jí)硬件,例如更多 RAM、強(qiáng)大的處理器等,以增加應(yīng)用程序的負(fù)載。垂直擴(kuò)展的問(wèn)題在于容量可以增長(zhǎng)多少總是有限制的。由于硬件成本,這種類型的擴(kuò)展很昂貴,并且需要時(shí)間來(lái)獲得新硬件。如果您想快速擴(kuò)展您的應(yīng)用程序以增加負(fù)載,那么這種類型的擴(kuò)展不是一個(gè)很好的選擇。
2)水平縮放
在水平擴(kuò)展中,您可以在現(xiàn)有容量中添加更多服務(wù)器,以應(yīng)對(duì)應(yīng)用程序增加的負(fù)載。增加的應(yīng)用程序負(fù)載通過(guò)負(fù)載均衡器分布在集群中的所有服務(wù)器上。如果您想快速擴(kuò)展您的軟件并且它并不昂貴,那么這種類型的擴(kuò)展是最佳選擇。
通過(guò)配置更改可以輕松擴(kuò)展云環(huán)境中的應(yīng)用程序,這會(huì)根據(jù)性能監(jiān)控指標(biāo)自動(dòng)將額外的服務(wù)器添加到集群中。
(2)可靠性
系統(tǒng)的可靠性是在給定環(huán)境中特定時(shí)間段內(nèi)軟件操作失敗的概率。如果即使系統(tǒng)的部分硬件或軟件出現(xiàn)故障,它仍能繼續(xù)為客戶端請(qǐng)求提供服務(wù),則該系統(tǒng)被認(rèn)為是高度可靠的。任何失敗的組件都可以在不影響客戶端請(qǐng)求的情況下進(jìn)行更換。
分布式系統(tǒng)的可靠性可以通過(guò)軟件組件和數(shù)據(jù)的冗余來(lái)實(shí)現(xiàn),因此任何一個(gè)組件或數(shù)據(jù)容器的丟失都不會(huì)導(dǎo)致性能下降或客戶端請(qǐng)求失敗。由于軟件組件和數(shù)據(jù)的冗余,高可靠性會(huì)導(dǎo)致額外的成本。
(3)可用性
可用性是系統(tǒng)保持運(yùn)行并在特定時(shí)期內(nèi)繼續(xù)執(zhí)行其功能的時(shí)間。如果一個(gè)系統(tǒng)是可靠的,那么它就會(huì)自動(dòng)可用,即它會(huì)繼續(xù)運(yùn)行。
(4)簡(jiǎn)單性
每個(gè)系統(tǒng)設(shè)計(jì)都是為了使系統(tǒng)盡可能簡(jiǎn)單。系統(tǒng)的簡(jiǎn)單性帶來(lái)了一些好處,例如代碼的重用、易于更改、易于添加新功能、易于測(cè)試和解決任何生產(chǎn)問(wèn)題。
使用異步處理和并行處理將有助于加快客戶端請(qǐng)求并減少請(qǐng)求的整體延遲。使用 RxJava 等框架并行處理給定客戶端請(qǐng)求中涉及的多個(gè)子請(qǐng)求。盡可能使用異步調(diào)用來(lái)調(diào)用其他系統(tǒng)。減少客戶端請(qǐng)求路徑中的調(diào)用次數(shù)可以提高應(yīng)用程序的性能,并且應(yīng)用程序易于擴(kuò)展。
以上就是關(guān)于“軟件系統(tǒng)設(shè)計(jì)原則介紹”,大家如果想了解更多相關(guān)知識(shí),可以關(guān)注一下動(dòng)力節(jié)點(diǎn)的Java視頻,里面的課程內(nèi)容從入門到精通,細(xì)致全面,通俗易懂,很適合沒(méi)有基礎(chǔ)的朋友學(xué)習(xí),相信對(duì)大家會(huì)有所幫助的。
相關(guān)閱讀
0基礎(chǔ) 0學(xué)費(fèi) 15天面授
有基礎(chǔ) 直達(dá)就業(yè)
業(yè)余時(shí)間 高薪轉(zhuǎn)行
工作1~3年,加薪神器
工作3~5年,晉升架構(gòu)
提交申請(qǐng)后,顧問(wèn)老師會(huì)電話與您溝通安排學(xué)習(xí)
初級(jí) 202925
初級(jí) 203221
初級(jí) 202629
初級(jí) 203743