• 负载均衡(一)概述


    一、什么是负载均衡

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

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

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

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

    二、负载均衡方案

    一、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水平切分”

  • 相关阅读:
    使用uploadify上传图片时返回“Cannot read property 'queueData' of undefined”
    用户在网站注册,网站通过微信发送验证码,这个操作是怎么实现的?
    Javascript Array和String的互转换。
    JS判断一个数组中是否有重复值的三种方法
    监控聚币网行情 并实时发送到微信
    聚币网API使用教程 demo
    sourceTree安装与使用
    SourceTree 的初次使用的两个小问题
    解决oracle语句中 含数字的字符串按数字排序问题
    使用git pull文件时和本地文件冲突怎么办
  • 原文地址:https://www.cnblogs.com/cuiqq/p/11856546.html
Copyright © 2020-2023  润新知