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