知乎專欄 | 多維度架構 | 微信號 netkiller-ebook | QQ群:128659835 請註明“讀者” |
User --> Web LB1 --> Database
User | LB1 V 0.0.0.0:80 ---------------------------------------- / | \ web Node 1 web Node 2 web Node 3 LB1 LB2 LB3 \ | / ---------------------------------------- | V 0.0.0.0:1152 / 0.0.0.0:3306 ---------------------------------------- / | \ DB Node 1 DB Node 2 DB Node 3
這個方案非常適合全國布點的情況,經常誇公網訪問資料庫等資源。我們假設所有的伺服器都不在同一個機房,廣域網的連結是無法保證99.9%的聯通性。
當一端公網的web伺服器,連結另一端的資料庫伺服器是,一般會出現,由於網絡不穩定ping時間長連結耗時嚴重,可能出現短時間中斷,導致web不能正常工作
當然你可以通過調整程序解決,當DB1連結失敗後嘗試連結DB2..DB3..,這樣的改進仍不能滿足用戶需求,例如:用戶連結web用了1秒中,web連結數據DB1 用了30秒發現連結不上,在去連結DB2,最終用戶打開網頁至少32秒,而且下一個用戶也會重複這樣的操作去DB1連結在到DB2
你也可以考慮在增加一台負載均衡,但新的問題來了,web 到這台負載均衡的網絡就能保證嗎?
我的解決方法是,每個web server上都安裝負載均衡軟件,Web與負載均衡安裝在一台伺服器上,用戶連結到web(通過智能DNS),web請求資料庫localhost:3306負載均衡分配到資料庫節點,這樣可以解決當web伺服器連結公網上的另一台數據伺服器的時候,能保證剔除不穩定的節點,同時減少了web到另一台負載均衡設備上的開銷