一、什么是负载均衡

负载均衡,名字很直白了就是让服务器的负载更均衡合理(好像说了句废话^_^)。负载均衡在不同的应用场景意义也有所不同。负载均衡的作用总结起来就两点:灾备和分流

灾备:在应用中的目的是提供系统的可用性,保证某个服务出现异常时不至于整体瘫痪。集群让有同样功能的服务互相替补。灾备是集群自然具有的能力

分流:在应用中的目的是为了提高系统的性能,通过集群让系统能够承载更大的压力。

负载均衡的关键只有一个,"分发"!。负载均衡的各种负载策略也只是为了让上面说到的分流更合理。所以说分流的优化是需要我们认为努力的,而灾备的能力是集群紫瑶具备的。

二、负载均衡方案

一、DNS负载均衡

主要负载算法,轮询。

二、Nginx负载均衡

Nginx的物种负载均衡算法:

1、round robin(默认)

轮询方式,依次将请求分配到各个后台服务器中,默认的负载均衡方式。 适用于后台机器性能一致的情况。 挂掉的机器可以自动从服务列表中剔除。

2、weight

根据权重来分发请求到不同的机器中,指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。比如:

upstream bakend {
    server 192.168.0.14 weight=10;
    server 192.168.0.15 weight=10;
}

3、IP_hash

根据请求者ip的hash值将请求发送到后台服务器中,可以保证来自同一ip的请求被打到固定的机器上,可以解决session问题。比如:

upstream bakend {
    ip_hash;
    server 192.168.0.14:88;
    server 192.168.0.15:80;
}

4、url_hash(第三方)

根据请求的url的hash值将请求分到不同的机器中,当后台服务器为缓存的时候效率高。相当于某个服务只处理某些业务。在upstream中加入hash语句,server语句中不能写入weight等其他的参数,hash_method是使用的hash算法。Nginx中在做详细介绍

5、fair(第三方)

根据后台响应时间来分发请求,响应时间短的分发的请求多。例如:

upstream backend {
    server server1;
    server server2;
    fair;
}

三、服务间负载均衡

服务间通信除了负载均衡,服务连接池还能够实现***故障转移、超时处理、限流限速、ID串行化***等诸多功能。

四、数据库负载均衡

在数据量很大的情况下,由于数据层(db/cache)涉及数据的水平切分,所以数据层的负载均衡更为复杂一些,它分为“数据的均衡”,与“请求的均衡”。这里的负载均衡和集群的概念有些不同。

1、数据的均衡

数据的均衡是指:水平切分后的每个服务(db/cache),数据量是均匀的。

2、请求的均衡

请求的均衡是指:水平切分后的每个服务(db/cache),请求量是均匀的。同时,根据水平切分的方式,主要又分为range水平切分和ID哈希水平切分。

分表分库再详细介绍

总结

负载均衡(Load Balance)是分布式系统架构设计中必须考虑的因素之一,它通常是指,将请求/数据均匀分摊到多个操作单元上执行,其的关键在于均匀:

反向代理层的负载均衡,是通过“DNS轮询”实现的
站点层的负载均衡,是通过“nginx”实现的
服务层的负载均衡,是通过“服务连接池”实现的
数据层的负载均衡,要考虑“数据的均衡”与“请求的均衡”两个点,常见的方式有“按照范围水平切分”与“hash水平切分”

01-01 17:56