自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

架構(gòu)設(shè)計(jì)的簡(jiǎn)單原則,你學(xué)會(huì)了嗎?

開(kāi)發(fā) 架構(gòu)
誰(shuí)都無(wú)法忍受這樣的場(chǎng)景。功能復(fù)雜的組件,另一個(gè)典型特征就是采用了復(fù)雜的算法。復(fù)雜算法導(dǎo)致的問(wèn)題主要是難以理解,進(jìn)而難以實(shí)現(xiàn)、難以修改,并且出了問(wèn)題難以快速解決。

簡(jiǎn)單原則宣言是:“簡(jiǎn)單優(yōu)于復(fù)雜”。

圖片圖片

由于軟件架構(gòu)與建筑架構(gòu)在表面上存在相似性,我們往往會(huì)下意識(shí)地將對(duì)建筑的審美觀念遷移至軟件架構(gòu)之上。對(duì)于我們親自構(gòu)建的軟件架構(gòu),我們期望它如著名建筑一般宏偉、精美、富有藝術(shù)感且豪華…… 總之,絕不能顯得寒酸或簡(jiǎn)單。

團(tuán)隊(duì)壓力有時(shí)也會(huì)在有意無(wú)意間促使我們走向復(fù)雜的方向。因?yàn)樵诖蠖鄶?shù)人評(píng)價(jià)一個(gè)方案水平高低時(shí),復(fù)雜性是一項(xiàng)重要的參考指標(biāo)。例如,設(shè)計(jì)一個(gè)主備方案,若采用心跳機(jī)制來(lái)實(shí)現(xiàn),或許大家會(huì)覺(jué)得這太過(guò)簡(jiǎn)單。然而,若引入 ZooKeeper 來(lái)做主備決策,很多人可能會(huì)認(rèn)為這個(gè)方案更加 “高大上”。畢竟 ZooKeeper 運(yùn)用的是 ZAB 協(xié)議,而 ZAB 協(xié)議本身就十分復(fù)雜。實(shí)際上,真正理解 ZAB 協(xié)議的人少之又少,但這并不妨礙我們都知曉 ZAB 協(xié)議很優(yōu)秀。

軟件領(lǐng)域的復(fù)雜性體現(xiàn)在兩個(gè)方面

結(jié)構(gòu)復(fù)雜的系統(tǒng)通常具備兩個(gè)特點(diǎn):一是組成系統(tǒng)的組件數(shù)量眾多;二是這些組件之間的關(guān)系極為復(fù)雜。

然而,結(jié)構(gòu)上的復(fù)雜性存在第一個(gè)問(wèn)題。組件越多,其中某個(gè)組件出現(xiàn)故障進(jìn)而導(dǎo)致系統(tǒng)故障的可能性就越大。這個(gè)概率是可以計(jì)算出來(lái)的,假設(shè)組件的故障率為 10%(即有 10% 的時(shí)間不可用),那么由 3 個(gè)組件組成的系統(tǒng)可用性為(1 - 10%)×(1 - 10%)×(1 - 10%)=72.9%,而由 5 個(gè)組件組成的系統(tǒng)可用性為(1 - 10%)×(1 - 10%)×(1 - 10%)×(1 - 10%)×(1 - 10%)=59%,兩者的可用性相差 13%。

結(jié)構(gòu)上的復(fù)雜性存在第二個(gè)問(wèn)題。某個(gè)組件的改動(dòng)會(huì)影響與之關(guān)聯(lián)的所有組件,而這些被影響的組件又會(huì)繼續(xù)遞歸地影響更多的組件。這一問(wèn)題會(huì)影響整個(gè)系統(tǒng)的開(kāi)發(fā)效率,因?yàn)橐坏┳兏婕巴獠肯到y(tǒng),就需要協(xié)調(diào)各方共同進(jìn)行方案評(píng)估、資源協(xié)調(diào)以及上線配合。

結(jié)構(gòu)上的復(fù)雜性存在第三個(gè)問(wèn)題。在復(fù)雜系統(tǒng)中定位問(wèn)題總是比在簡(jiǎn)單系統(tǒng)中更加困難。首先,由于組件眾多,每個(gè)組件都有出現(xiàn)問(wèn)題的嫌疑,所以需要逐一排查;其次,組件間關(guān)系復(fù)雜,表現(xiàn)出故障的組件未必是真正問(wèn)題的根源。

第二個(gè)方面體現(xiàn)在邏輯的復(fù)雜性

當(dāng)我們意識(shí)到結(jié)構(gòu)的復(fù)雜性后,第一反應(yīng)或許是 “降低組件數(shù)量”,畢竟組件數(shù)量越少,系統(tǒng)結(jié)構(gòu)就越簡(jiǎn)單。而最簡(jiǎn)單的結(jié)構(gòu)無(wú)疑是整個(gè)系統(tǒng)僅有一個(gè)組件,即系統(tǒng)本身,所有功能和邏輯都在這一個(gè)組件中實(shí)現(xiàn)。

然而,不幸的是,這樣做并不可行。原因在于除了結(jié)構(gòu)的復(fù)雜性之外,還存在邏輯的復(fù)雜性。如果某個(gè)組件的邏輯過(guò)于復(fù)雜,同樣會(huì)帶來(lái)各種問(wèn)題。

邏輯復(fù)雜的組件,有一個(gè)典型特征就是單個(gè)組件承擔(dān)了過(guò)多的功能。以電商業(yè)務(wù)為例,常見(jiàn)的功能包括商品管理、商品搜索、商品展示、訂單管理、用戶管理、支付、發(fā)貨、客服等。如果把這些功能全部在一個(gè)組件中實(shí)現(xiàn),那就是典型的邏輯復(fù)雜性。

假設(shè)現(xiàn)在淘寶將這些功能全部在單一的組件中實(shí)現(xiàn),我們可以想象一下這個(gè)恐怖的場(chǎng)景:系統(tǒng)會(huì)非常龐大,可能有上百萬(wàn)、上千萬(wàn)的代碼規(guī)模,“clone” 一次代碼要 30 分鐘。幾十、上百人維護(hù)這一套代碼,某個(gè) “菜鳥(niǎo)” 不小心改了一行代碼,就可能導(dǎo)致整站崩潰。需求如雪片般飛來(lái),為了應(yīng)對(duì),會(huì)開(kāi)幾十個(gè)代碼分支,然后各種分支合并、各種分支覆蓋。產(chǎn)品、研發(fā)、測(cè)試、項(xiàng)目管理不停地開(kāi)會(huì)討論版本計(jì)劃,協(xié)調(diào)資源,解決沖突。版本太多,每天都要上線幾十個(gè)版本,系統(tǒng)每隔 1 個(gè)小時(shí)就要重啟一次。線上運(yùn)行出現(xiàn)故障,幾十個(gè)人撲上去定位和處理,一間小黑屋都裝不下所有人,整個(gè)辦公區(qū)都會(huì)鬧翻天。

總之,誰(shuí)都無(wú)法忍受這樣的場(chǎng)景。功能復(fù)雜的組件,另一個(gè)典型特征就是采用了復(fù)雜的算法。復(fù)雜算法導(dǎo)致的問(wèn)題主要是難以理解,進(jìn)而難以實(shí)現(xiàn)、難以修改,并且出了問(wèn)題難以快速解決。

責(zé)任編輯:武曉燕 來(lái)源: 二進(jìn)制跳動(dòng)
相關(guān)推薦

2024-03-05 10:09:16

restfulHTTPAPI

2022-09-28 07:31:03

SOLID對(duì)象設(shè)計(jì)

2024-03-06 08:28:16

設(shè)計(jì)模式Java

2024-05-09 08:14:09

系統(tǒng)設(shè)計(jì)語(yǔ)言多語(yǔ)言

2022-07-08 09:27:48

CSSIFC模型

2024-02-02 11:03:11

React數(shù)據(jù)Ref

2024-01-26 08:24:16

Dalvik架構(gòu)ART

2023-01-10 08:43:15

定義DDD架構(gòu)

2024-02-04 00:00:00

Effect數(shù)據(jù)組件

2023-07-26 13:11:21

ChatGPT平臺(tái)工具

2024-01-19 08:25:38

死鎖Java通信

2024-01-30 18:29:29

微服務(wù)架構(gòu)Ingress

2024-01-02 12:05:26

Java并發(fā)編程

2023-08-01 12:51:18

WebGPT機(jī)器學(xué)習(xí)模型

2024-10-18 10:35:10

2023-06-06 07:50:07

權(quán)限管理hdfsacl

2023-03-28 08:20:07

場(chǎng)景sync.Once?系統(tǒng)

2022-12-06 08:37:43

2024-05-29 07:47:30

SpringJava@Resource

2024-05-06 00:00:00

InnoDBView隔離
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)