這是1998年一個普通的上午, 張大胖剛上班就被老板叫去訓話,
張大胖有個親戚在賣IBM的服務器,經常吹噓說性能有多好,張大胖就想花錢把現在的‘老破小’服務器給替換掉,
老板不管程序,只要結果,
大胖悻悻地去找Bill, 將老板的指示聲情并茂地做了傳達,
張大胖思索了一會兒,想出了用DNS做中間層的辦法,
讓網站的域名映射到多個服務器的IP!
用戶面對系統的域名,查詢IP的時候用輪詢的方式,
這DNS系統也真是太不智能了, 張大胖沒招了,
Bill決定另辟蹊徑,開發一個自己的負載均衡軟體,
Load Balancer 簡稱LB , 有兩個IP,一個對外(115.39.19.22),一個對內(192.168.0.100),
用戶看到的是那個對外的IP,后面的真正提供服務的服務器有三個,稱為RS1, RS2,RS3, 他們的網關都指向LB,
但是這個資料包一看就是發給Load Balancer的, 怎么發給后面的某個服務器呢?
等到RS1處理完了,要回傳首頁的HTML, 會把資料包發給網關LB, LB再次施展同樣的手段,把IP和埠都修改成自己的, 再發給客戶就行了,
修改IP地址和埠,計算機網路中的NAT(網路地址轉換)思想在這里被用上了,張大胖決定把這種方式叫做NAT 負載均衡,
Bill 吩咐張大胖組織人力把這個負載均衡軟體給開發出來,
三個月后,Load Balancer的第一版開發出來了,這是運行在Linux上的一個軟體, 公司試用了一下,感徑訓真是不錯,僅僅用幾臺便宜的服務器就可以實作負載均衡了,
可是好景不長,張大胖發現這個Load Balancer存在這瓶頸,
所有的資料包都要通過它,不管是客戶端發來的,還是要發給客戶端的,
Bill 給出了一個新的方案:把請求和回應分開處理,
Bill展示了一張更加復雜的圖:
張大胖通過第一版Load Balancer的開發,積累了豐富的經驗,
所有服務器都有一個IP:115.39.19.22, 簡稱VIP,
每個實際的服務器的loopback都系結到了這個VIP上,
但是,一個巨大的問題出現了:
RS1(192.168.0.10)這個服務器收到了資料包,拆開一看,目的地IP是115.39.19.22,是自己的IP, 那就可以處理了,
對于客戶端來說,它看到的還是那個唯一的地址115.39.19.22, 并不知道后臺發生了什么事情,
張大胖決定把這種方式叫做Direct Server(DR)模式,
幾個月以后,DR模式也開發成功,并且部署到了生產環境上,
后記: 本文所描述的,其實就是著名開源軟體LVS的原理,上面講的兩種負載均衡的方式,就是LVS的NAT和DR,LVS是章文嵩博士在1998年5月成立的自由軟體專案,現在已經是Linux內核的一部分,
最后再留個小疑問給大家:對于用戶的一個請求來說,可能會被分成多個資料包來發送, 如果這些資料包被我們的Load Balancer發到了不同的機器上,那就完全亂套了啊!這該怎么辦?
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/262970.html
標籤:其他
