下面總結一下常見的高可用和負載均衡架構模式。
1. 客戶端切換。
客戶端配置多個服務器地址。如果發生某個服務器無法訪問或者使用異常,客戶端就切換到其它服務器上。
優點:簡單,高效,可以在業務層面檢測服務可用性
缺點:需要提前配置。
Mysql connect 這樣做load balance 和failed over .在JDBC連接上可以配置多個服務器。
http://dev.mysql.com/doc/connector-j/en/connector-j-reference-configuration-properties.html#connector-j-reference-url-format
# Connection URL for a server failover setup: jdbc:mysql//primaryhost,secondaryhost1,secondaryhost2/test
2. DNS映射
DNS服務返回不同的IP來達到切換和負載均衡的效果。由於DNS會緩存,實際使用中問題會比較多。.
優點:對使用者是透明,
缺點:由於DNS緩存問題,可能切換不及時
3. 服務注冊發現
注冊服務器(zookeeper)用來管理當前可以用的服務提供。dubbo使用這種方式來實現。
優點:可以使用復雜的負載均衡策略,可以實現服務路由。
缺點:實現復雜
http://shiyanjun.cn/archives/325.html
4. keepalive+浮動IP
如果正在使用的機器出問題,外網Ip可以根據情況,分配到另外一台主機上。這樣IP切換對外部訪問者是透明的。不過要實現浮動IP,對底層網絡的支持。在現在的雲服務器中無法使用。
優點: 高效,對客戶端透明
缺點: 對主機網絡有要求,無法在雲服務器中使用。
5 代理服務器(nginx ,lVS,Haproxy)
代理服務器檢測上游服務器是否可用。並且會根據一定策略來路由前端過來的請求。為了避免代理服務器出現故障,導致系統無法被訪問。所以一般都要結合keepalive+vip一起使用。
優點: 支持大量服務器,可以配置復雜路由規則
缺點:代理服務器有單點問題,故障檢測不及時
總結以上模式主要區別在:
1. 服務器信息誰維護,客戶端,代理服務器或者注冊服務
2. 故障發現手段。通用的檢測方式只能檢查端口能不能連接,如果出現服務器僵屍情況常常不能及時被發現。
3. 服務器利用率。