成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

憑啥修改代碼的是我?原來這就是耦合!

開發(fā) 開發(fā)工具 前端
本文將討論的是架構設計中常見的“反向依賴”的設計,以及對應的優(yōu)化方案,希望對大伙有所啟示。

[[405640]]

 

你有沒有遇到過這樣的場景?

  • 硬件升級,要換一臺高配機器;
  • 網(wǎng)絡重新規(guī)劃,若干服務器要調整機架;
  • 服務器當機,要重新部署恢復服務;

更具體的,如上圖:數(shù)據(jù)庫換了一個ip,此時往往連接此數(shù)據(jù)庫的上游需要修改配置重啟,如果數(shù)據(jù)庫有很多上游調用方,改配置重啟的調用方會很多,每次換ip的成本往往很高,成為大家共性的痛點。

由A的調整(數(shù)據(jù)庫換ip),配合修改和調整的卻是BCDE(改配置重啟),BCDE內心非常的郁悶:明明換ip的是你,憑什么配合重啟的卻是我?

根本上,這是一個“架構耦合”的問題,是一個架構設計上“反向依賴”的問題,本文將討論的是架構設計中常見的“反向依賴”的設計,以及對應的優(yōu)化方案,希望對大伙有所啟示。

如何尋找不合理的“反向依賴”耦合?

方法論:變動方是A,配合方卻是BCDE。

(或者說需求方是A,改動方卻是BCDE。)

畫外音:想想“換IP的是你,配合重啟的卻是我”更好記憶。

如果系統(tǒng)中經(jīng)常出現(xiàn)了這類情況,就是“反向依賴”的特征,往往架構上有優(yōu)化的空間。

場景1:公共庫導致耦合。

三個服務s1/s2/s3,通過一個公共的庫biz.jar來實現(xiàn)一段業(yè)務邏輯,s1/s2/s3其實間接通過biz.jar耦合在了一起,一個業(yè)務s1修改一塊公共的代碼,導致影響其他業(yè)務s2/s3,架構上是不合理的。

優(yōu)化方案1:業(yè)務垂直拆分。

如果biz.jar中實現(xiàn)的邏輯“業(yè)務特性”很強,可以拆分為biz1.jar/biz2.jar/biz3.jar,來對s1/s2/s3進行解耦。這樣的話,任何業(yè)務的改動,影響范圍只是自己,不會影響其他人。

優(yōu)化方案2:服務化。

如果biz.jar中實現(xiàn)的邏輯“業(yè)務共性”很強,可以將biz.jar優(yōu)化為biz.service服務,來對s1/s2/s3進行解耦。服務化之后,兼容性能更好的通過接口自動化回歸測試來保證。

 

基礎服務的抽象,本身是一種共性聚焦,是系統(tǒng)解耦常見的方案。

場景2:服務化不徹底導致耦合。

服務化是解決“業(yè)務共性”組件庫導致系統(tǒng)耦合的常見方案之一,但如果服務化不徹底,service本身也容易成為業(yè)務耦合點。

典型的服務化不徹底導致的業(yè)務耦合的特征是,共性服務中,包含大量“根據(jù)不同業(yè)務,執(zhí)行不同個性分支”的代碼。

  1. switch (biz-type) 
  2. case biz-1 : exec1 
  3. case biz-2 : exec2 
  4. case biz-3 : exec3 
  5. … 

在這種架構下,biz-1/biz-2/biz-3有個性的業(yè)務需求,可能導致修改代碼的是共性的biz-service,使其成為研發(fā)瓶頸,架構上也是不合理的。

優(yōu)化方案:業(yè)務特性代碼上浮,業(yè)務共性代碼下沉,徹底解耦。

把swithc case中業(yè)務特性代碼放到業(yè)務層實現(xiàn),這樣biz-1/biz-2/biz-3有個性的業(yè)務需求,升級的是自己的業(yè)務系統(tǒng)。

場景3:notify的不合理實現(xiàn)導致的耦合。

究竟什么時候該使用MQ?》一文中有一類業(yè)務場景,消息發(fā)送方不關注消息接收方的執(zhí)行結果,如果采用調用的方式來實現(xiàn)通知,會導消息發(fā)送方和消息接收方耦合。

如何新增消息接收方biz-4,會發(fā)現(xiàn)修改代碼的是消息發(fā)送方,新增一個對biz-4的調用,極不合理。

優(yōu)化方案:通過MQ實現(xiàn)解耦。

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

場景4:配置中的ip導致上下游耦合。

即“緣起”中舉的例子,下游服務換ip,可能導致多個服務調用方修改配置重啟。上下游間接的通過ip這個配置耦合在了一起,架構不合理。

優(yōu)化方案:通過內網(wǎng)域名而不是ip來進行下游連接。

如果在配置中使用內網(wǎng)域名來進行下游連接,當下游服務或者數(shù)據(jù)庫更換ip時,只需要運維層面將內網(wǎng)域名指向新的ip,然后統(tǒng)一切斷原有舊的連接,連接就能夠自動切換到新的ip上來。這個過程不需要所有上游配合,非常帥氣,強烈推薦!

總結

如何發(fā)現(xiàn)系統(tǒng)架構中不合理的“反向依賴”設計?

  • 變動方是A,配合方卻是BCDE;
  • 需求方是A,改動方卻是BCDE;此時往往架構上可以進行解耦優(yōu)化。

常見反向依賴如何優(yōu)化?

(1)公共庫導致耦合。

  • 優(yōu)化一:如果公共庫是業(yè)務特性代碼,進行公共庫垂直拆分。
  • 優(yōu)化二:如果公共庫是業(yè)務共性代碼,進行服務化下沉抽象。

(2)服務化不徹底導致耦合。

  • 特征:服務中包含大量“根據(jù)不同業(yè)務,執(zhí)行不同個性分支”的代碼。
  • 優(yōu)化方案:個性代碼放到業(yè)務層實現(xiàn),將服務化更徹底更純粹。

(3)notify的不合理實現(xiàn)導致的耦合。

  • 特征:調用方不關注執(zhí)行結果,以調用的方式去實現(xiàn)通知,新增訂閱者,修改代碼的是發(fā)布者。
  • 優(yōu)化方案:通過MQ解耦。

(4)配置中的ip導致上下游耦合。

  • 特征:多個上游需要修改配置重啟。
  • 優(yōu)化方案:使用內網(wǎng)域名替代內網(wǎng)ip,通過“修改DNS指向,統(tǒng)一切斷舊連接”的方式來上游無感切換。

【本文為51CTO專欄作者“58沈劍”原創(chuàng)稿件,轉載請聯(lián)系原作者】

戳這里,看該作者更多好文

 

責任編輯:趙寧寧 來源: 51CTO專欄
相關推薦

2021-09-03 10:44:42

ThreadLocalObject 數(shù)組

2017-04-24 09:11:22

IP架構數(shù)據(jù)庫

2014-01-02 14:04:42

2016-01-12 17:01:45

Bootstrap原因

2018-01-05 12:39:23

網(wǎng)吧電腦故障

2018-01-02 14:40:58

程序員年齡時間

2018-11-08 15:30:04

JavaScriptES6異步

2015-09-19 13:45:27

2016-11-04 21:42:55

2015-07-21 10:24:02

Windows RT升級

2015-06-30 08:59:28

Web前端程序員

2013-08-30 10:58:59

微信易信

2019-01-02 04:40:19

物聯(lián)網(wǎng)企業(yè)IOT

2024-12-13 16:37:56

SpringBootJava

2015-07-27 10:56:02

2020-11-24 06:17:57

微信代碼移動應用

2020-02-17 15:55:22

Office 365

2024-04-24 09:47:36

2015-01-09 10:10:00

Linux

2018-11-01 13:38:51

Java中斷停止
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产亚洲精品久久午夜玫瑰园 | 亚洲国产精品99久久久久久久久 | 成人美女免费网站视频 | 久久精品男人的天堂 | 一区二区三区视频免费观看 | 毛片网站在线观看视频 | 国产一区二区欧美 | 伊人精品一区二区三区 | 国产精品久久久久无码av | 91影院在线观看 | 正在播放国产精品 | 成人在线播放 | 免费一区二区三区 | 国产专区在线 | 日韩av成人 | 国内精品视频 | 久久精品国产精品青草 | 亚洲国产aⅴ成人精品无吗 国产精品永久在线观看 | 成人免费观看视频 | 狠狠操狠狠干 | 日本欧美国产在线观看 | 欧日韩不卡在线视频 | 亚洲欧美国产毛片在线 | 91深夜福利视频 | 国产一区二区三区四区在线观看 | 免费a网| 81精品国产乱码久久久久久 | 国产亚洲二区 | 精品一区二区三区四区五区 | 日本久久精| 99re热这里只有精品视频 | 国产精品精品久久久 | 日韩高清一区二区 | 免费在线观看一区二区 | 国产成人综合在线 | 99福利在线观看 | 国产免国产免费 | 国产成人一区二区 | 午夜一区二区三区在线观看 | 精品久久久久久亚洲国产800 | 日韩一区二区三区av |