小小的IP,大大的耦合,你痛過嗎?
什么是耦合?
耦合,是架構(gòu)中,本來不相干的代碼、模塊、服務(wù)、系統(tǒng)因為某些原因聯(lián)系在一起,各自獨立性差,影響則相互影響,變動則相互變動的一種架構(gòu)狀態(tài)。
感官上,怎么發(fā)現(xiàn)系統(tǒng)中的耦合?
作為技術(shù)人,每每在心中罵上下游,罵兄弟部門,“這個東西跟我有什么關(guān)系?為什么需要我來配合做這個事情?”。明明不應(yīng)該聯(lián)動,卻要被動配合,就可能有潛在的耦合。
因為IP配置,導(dǎo)致上下游必須聯(lián)動,就是一個耦合的典型案例。
場景還原
線上有一臺數(shù)據(jù)庫服務(wù)器,因為某種原因,例如磁盤故障,要進(jìn)行更換。運維部署了一臺新機器,DBA部署好數(shù)據(jù)庫實例,做好了數(shù)據(jù),只等調(diào)用方切換。
如何切換呢?
原來數(shù)據(jù)庫有個舊IP,現(xiàn)在有個新IP,要通知上游將流量切到新IP上來,怎么辦?
一一通知上游切換唄。找到上游,抱歉,IP換了,麻煩修改配置重啟一下,連到新的IP上去。
不知道大家工作中會不會遇到這樣的場景,數(shù)據(jù)庫或者服務(wù)的IP換了,你作為上游的調(diào)用方,需要配合修改配置重啟。此時你心里可能就在罵娘了,明明變化IP的是別人,為什么配合修改配置重啟的人是我。
特別的,如果變換IP的是一個基礎(chǔ)服務(wù)或者一個基礎(chǔ)數(shù)據(jù)庫,調(diào)用它的上游很多,那么可能A部門、B部門、C部門,要全部找一遍,全部配合修改配置重啟。
所以這個因為IP配置使得上下游耦合在一起的案例,其耦合范圍非常廣的,理想的情況是:誰修改IP,只有一處修改,流量就能默默遷移過去,這就是解耦。
如何解除IP耦合?
常見的方法是:使用內(nèi)網(wǎng)域名替代內(nèi)網(wǎng)IP,如果沒有做這個優(yōu)化,強烈的建議馬上實施,將配置文件中的內(nèi)網(wǎng)IP全部干掉,全部改為內(nèi)網(wǎng)域名。
使用內(nèi)網(wǎng)域名,就不需要上游配合重啟了嗎?
假設(shè)現(xiàn)在不用內(nèi)網(wǎng)IP,改用內(nèi)網(wǎng)域名了,一個服務(wù)或者數(shù)據(jù)庫的IP變更,只需要一個地方更改,而不是所有上游更改:
- 運維修改內(nèi)網(wǎng)DNS,將內(nèi)網(wǎng)域名指向新的IP,如果是短連接調(diào)用,未來新的請求流量,自然會切到新的IP上;如果是長連接調(diào)用,新的長連接會連到新的IP上,但舊的長連接仍然連接的是舊IP
- 運維統(tǒng)一將舊IP上的連接切斷,如無意外,服務(wù)或者數(shù)據(jù)庫的連接池都有重連功能,重連后就會自動連到新IP上去
如此這般,只要運維配合就可以完成IP的遷移,對于所有上游的調(diào)用方不需要配合修改配置重啟。
使用內(nèi)網(wǎng)域名來替換內(nèi)網(wǎng)IP,只是一個很小的優(yōu)化點,但對于IP解耦卻是非常的有效。
【本文為51CTO專欄作者“58沈劍”原創(chuàng)稿件,轉(zhuǎn)載請聯(lián)系原作者】