小小的IP,大大的耦合,你痛過嗎?

什麼是耦合?

耦合,是架構中,本來不相干的代碼、模塊、服務、系統因為某些原因聯繫在一起,各自獨立性差,影響則相互影響,變動則相互變動的一種架構狀態。

感官上,怎麼發現系統中的耦合?

作為技術人,每每在心中罵上下游,罵兄弟部門,“這個東西跟我有什麼關係?為什麼需要我來配合做這個事情?”。明明不應該聯動,卻要被動配合,就可能有潛在的耦合。

因為IP配置,導致上下游必須聯動,就是一個耦合的典型案例。

場景還原

線上有一臺數據庫服務器,因為某種原因,例如磁盤故障,要進行更換。運維部署了一臺新機器,DBA部署好數據庫實例,做好了數據,只等調用方切換。

如何切換呢?

原來數據庫有個舊IP,現在有個新IP,要通知上游將流量切到新IP上來,怎麼辦?

一一通知上游切換唄。找到上游,抱歉,IP換了,麻煩修改配置重啟一下,連到新的IP上去。

小小的IP,大大的耦合,你痛過嗎?


不知道大家工作中會不會遇到這樣的場景,數據庫或者服務的IP換了,你作為上游的調用方,需要配合修改配置重啟。此時你心裡可能就在罵娘了,明明變化IP的是別人,為什麼配合修改配置重啟的人是我。

特別的,如果變換IP的是一個基礎服務或者一個基礎數據庫,調用它的上游很多,那麼可能A部門、B部門、C部門,要全部找一遍,全部配合修改配置重啟。

所以這個因為IP配置使得上下游耦合在一起的案例,其耦合範圍非常廣的,理想的情況是:誰修改IP,只有一處修改,流量就能默默遷移過去,這就是解耦。

如何解除IP耦合?

常見的方法是:使用內網域名替代內網IP,如果沒有做這個優化,強烈的建議馬上實施,將配置文件中的內網IP全部幹掉,全部改為內網域名。

使用內網域名,就不需要上游配合重啟了嗎?

假設現在不用內網IP,改用內網域名了,一個服務或者數據庫的IP變更,只需要一個地方更改,而不是所有上游更改:

小小的IP,大大的耦合,你痛過嗎?


  • 運維修改內網DNS,將內網域名指向新的IP,如果是短連接調用,未來新的請求流量,自然會切到新的IP上;如果是長連接調用,新的長連接會連到新的IP上,但舊的長連接仍然連接的是舊IP
  • 運維統一將舊IP上的連接切斷,如無意外,服務或者數據庫的連接池都有重連功能,重連後就會自動連到新IP上去

如此這般,只要運維配合就可以完成IP的遷移,對於所有上游的調用方不需要配合修改配置重啟。

使用內網域名來替換內網IP,只是一個很小的優化點,但對於IP解耦卻是非常的有效。

希望大家每天收穫一點點,這樣架構就能美好一點點。

如果想學習Java工程化、高性能及分佈式、深入淺出。性能調優、Spring,MyBatis,Netty源碼分析的朋友可以加我的Java高級架構進階群:180705916,群裡有阿里大牛直播講解技術,以及Java大型互聯網技術的視頻免費分享給大家



分享到:


相關文章: