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

2022-05-05 11:09:13 字數 1162 閱讀 8115

什麼是耦合?

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

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

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

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

場景還原

線上有一台資料庫伺服器,因為某種原因,例如磁碟故障,要進行更換。運維部署了一台新機器,dba部署好資料庫例項,做好了資料,只等呼叫方切換。

如何切換呢?

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

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

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

特別的,如果變換ip的是乙個基礎服務或者乙個基礎資料庫,呼叫它的上游很多,那麼可能a部門、b部門、c部門,要全部找一遍,全部配合修改配置重啟。

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

如何解除ip耦合?

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

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

假設現在不用內網ip,改用內網網域名稱了,乙個服務或者資料庫的ip變更,只需要乙個地方更改,而不是所有上游更改:

運維修改內網dns,將內網網域名稱指向新的ip,如果是短連線呼叫,未來新的請求流量,自然會切到新的ip上;如果是長連線呼叫,新的長連線會連到新的ip上,但舊的長連線仍然連線的是舊ip

運維統一將舊ip上的連線切斷,如無意外,服務或者資料庫的連線池都有重連功能,重連後就會自動連到新ip上去

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

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

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

小小的公共庫,大大的耦合,你痛過嗎?

什麼是耦合?耦合,是架構中,本來不相干的 模組 服務 系統因為某些原因聯絡在一起,各自獨立性差,影響則相互影響,變動則相互變動的一種架構狀態。感官上,怎麼發現系統中的耦合?作為技術人,每每在心中罵上下游,罵兄弟部門,這個東西跟我有什麼關係?為什麼需要我來配合做這個事情?明明不應該聯動,卻要被動受影響...

三正規化的依賴,小小的知識,大大的學問

三正規化使得資料庫的設計變得有據可依,資料庫的冗餘大大減少。然而,三正規化的定義,卻不那麼讓人省心,一堆文字外加數學知識,讓人著實有點小蒙。雖然說完全按照三正規化設計資料庫並不可取,但是要想設計乙個好的資料庫,三正規化的知識是必不可少的。要想更好理解三正規化的定義,那麼了解依賴是必不可少的,了解了這...

寫MFC遇到的各種大大小小的坑

搭建環境 vs2013 mfc120生成器 python3.6 這是乙個記錄了遇到的大大小小的坑,真的是十個裡面九個是坑!這裡是用來記錄我遇到的坑的,當然裡面還有許多未解之謎,我自己也不明白 有cmd命令列註冊,有直接regsvr32 c windows system32 syswow64 msco...