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

如何發(fā)現(xiàn)架構(gòu)中的耦合(五大場(chǎng)景)?

開發(fā) 架構(gòu)
架構(gòu)痛點(diǎn)是別人,被動(dòng)修改配合方卻是你。這是一個(gè)架構(gòu)設(shè)計(jì)上“反向依賴”的問題,這就是典型的耦合特征。

如何發(fā)現(xiàn)系統(tǒng)架構(gòu)中的耦合?

答:架構(gòu)痛點(diǎn)是別人,被動(dòng)修改配合方卻是你。這是一個(gè)架構(gòu)設(shè)計(jì)上“反向依賴”的問題,這就是典型的耦合特征。

如果系統(tǒng)架構(gòu)中經(jīng)常出這類情況,往往架構(gòu)上就有解耦優(yōu)化的空間。

案例一:公共庫耦合。

如上圖所示,三個(gè)服務(wù)s123,通過一個(gè)公共的庫biz.jar來實(shí)現(xiàn)一段業(yè)務(wù)邏輯,s123其實(shí)間接通過公共庫耦合在了一起,一個(gè)業(yè)務(wù)s1主動(dòng)修改一塊公共的代碼,導(dǎo)致影響s23被動(dòng)受影響,這種耦合不合理。

那怎么解耦呢?

答:業(yè)務(wù)垂直拆分。

公共庫中應(yīng)該是通用代碼,不應(yīng)該實(shí)現(xiàn)個(gè)性化很強(qiáng)的業(yè)務(wù)邏輯??梢詫iz.jar拆分為biz1.jar/biz2.jar/biz3.jar,個(gè)性化的業(yè)務(wù)邏輯各回各家,來對(duì)s12s3進(jìn)行解耦。這樣的話,任何業(yè)務(wù)的改動(dòng),影響范圍只是自己,不會(huì)影響其他人。

案例二:通信機(jī)制不當(dāng)耦合。

什么是通信機(jī)制不當(dāng)?

有一類業(yè)務(wù)場(chǎng)景,消息發(fā)送方不關(guān)注消息接收方的執(zhí)行結(jié)果,如果采用RPC調(diào)用的方式來通信,會(huì)導(dǎo)致系統(tǒng)上下游耦合。

如上圖所示,上游通過RPC調(diào)用的方式通知下游,如果新增消息接收方biz4,會(huì)發(fā)現(xiàn)修改代碼的是消息發(fā)送方,新增一個(gè)對(duì)biz-4的調(diào)用,你的主動(dòng)需求,我的被動(dòng)修改,這種耦合不合理。

那怎么解耦呢?

答:通過MQ異步解耦。

如上圖所示,消息發(fā)送方upper將消息發(fā)布給MQ,消息接收方從MQ去訂閱,任何新增對(duì)消息的消費(fèi),upper都不需要修改代碼。

案例三:配置中的ip耦合。

何時(shí)會(huì)出現(xiàn)配置中的ip耦合?

如上圖所示,在配置中使用了IP,當(dāng)服務(wù)方修改IP時(shí),如果需要調(diào)用方被動(dòng)配合修改配置重啟,則上下游間接的通過ip這個(gè)配置耦合在了一起,架構(gòu)不合理。

那怎么解耦呢?

答:通過內(nèi)網(wǎng)域名而不是IP來進(jìn)行下游連接。

如上圖所示,如果使用內(nèi)網(wǎng)域名,當(dāng)服務(wù)方要更換IP時(shí),只需要運(yùn)維層面將內(nèi)網(wǎng)域名指向新的ip,然后統(tǒng)一切斷原有舊的連接,連接就能夠自動(dòng)切換到新的ip上來。這個(gè)過程不需要所有上游配合,就能完成解耦。

案例四:服務(wù)化不徹底耦合。

微服務(wù)是互聯(lián)網(wǎng)非常典型的架構(gòu)模式,但如果服務(wù)化不徹底,service本身也容易成為業(yè)務(wù)耦合點(diǎn)。

如上圖所示,共性服務(wù)biz.service中,可能包含“根據(jù)不同業(yè)務(wù),執(zhí)行不同個(gè)性分支”的代碼。

  • switch (biz-type)
  • case biz-1 : exec1
  • case biz-2 : exec2
  • case biz-3 : exec3

在這種架構(gòu)下,biz123有個(gè)性的業(yè)務(wù)需求,可能導(dǎo)致修改代碼的是共性的biz-service。個(gè)性主動(dòng)需求,共性被動(dòng)修改,使其成為研發(fā)瓶頸,這種耦合不合理。

那怎么解耦呢?

業(yè)務(wù)特性代碼上浮,業(yè)務(wù)共性代碼下沉。

如上圖所示,把swithc case中業(yè)務(wù)特性代碼放到業(yè)務(wù)層實(shí)現(xiàn),這樣biz123有個(gè)性的業(yè)務(wù)需求,升級(jí)的是自己的業(yè)務(wù)系統(tǒng),而不是下游的微服務(wù)。

稍作總結(jié):

  • 公共庫耦合,業(yè)務(wù)垂直拆分解耦;
  • 通信機(jī)制不當(dāng)耦合,MQ異步解耦;
  • 配置中的ip耦合,通過內(nèi)網(wǎng)域名解耦;
  • 服務(wù)化不徹底耦合,業(yè)務(wù)特性代碼上浮,業(yè)務(wù)共性代碼下沉解耦。

總而言之,痛的是你,被動(dòng)修改的卻是我,大概率就有耦合。

案例五:下游擴(kuò)容導(dǎo)致的耦合。

如上圖所示,這次不是換換ip這么簡(jiǎn)單了,下游服務(wù)提供方原來是集群123,要擴(kuò)容為12345,使用的是內(nèi)網(wǎng)域名,上游卻還是需要被動(dòng)修改配置,新增擴(kuò)容后的節(jié)點(diǎn),再重啟。

這種情況下,怎么解耦呢?

知其然,知其所以然。

思路比結(jié)論更重要。

責(zé)任編輯:趙寧寧 來源: 架構(gòu)師之路
相關(guān)推薦

2019-10-15 15:22:56

人工智能智慧社區(qū)智能

2020-05-19 10:49:56

云計(jì)算文件數(shù)據(jù)

2018-08-28 08:10:19

AI芯片自動(dòng)駕駛手機(jī)

2020-04-28 22:14:07

自動(dòng)化威脅Bots

2019-08-15 09:45:54

軟件技術(shù)Docker

2019-08-15 10:41:33

云時(shí)代運(yùn)維容器

2013-06-21 10:15:33

BYOD

2021-03-25 18:02:17

辦公

2019-06-04 10:40:07

2024-10-21 16:34:15

2023-11-27 15:27:21

2023-12-11 21:45:52

Javaforeach循環(huán)結(jié)構(gòu)

2023-03-09 15:25:52

2020-06-22 07:00:00

軟件架構(gòu)架構(gòu)模式

2021-09-26 05:38:16

云計(jì)算云計(jì)算環(huán)境云應(yīng)用

2021-11-10 18:51:33

新華三

2022-03-04 14:21:56

區(qū)塊鏈數(shù)據(jù)架構(gòu)

2022-05-16 11:39:46

云架構(gòu)云可視化CROPS

2010-06-08 18:31:36

UML建模工具

2024-04-25 09:24:19

系統(tǒng)設(shè)計(jì)開發(fā)
點(diǎn)贊
收藏

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