Home | 简体中文 | 繁体中文 | 杂文 | Github | 知乎专栏 | 51CTO学院 | CSDN程序员研修院 | OSChina 博客 | 腾讯云社区 | 阿里云栖社区 | Facebook | Linkedin | Youtube | 打赏(Donations) | About
知乎专栏多维度架构

84.3. 广域网负载均衡的用法

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到另一台负载均衡设备上的开销