zoukankan      html  css  js  c++  java
  • 一个巧妙的负载均衡算法-翘动你的大脑

      有一个愿分享的领导还是很棒的。

      现在的负载均衡技术,可以说是满大街都是,但是我们基本都停留在了使用的阶段上,并没有真正深入去了解其核心。如果真的出现了问题,可能就很难知道是什么原因导致了,只能去google,百度了。 因此,了解一些核心的东西,还是不错的。

      负载均衡大概流程就是,随时收集各服务器信息或者各服务器主动上报信息,由配置主心进行保存,计算出权重,然后根据相应算法进行服务机器选择。(当然了,这不是本文的重点,我也说得不一定对)

      我要展示的是,一个根据权重进行机器选择的一个巧妙算法,如下:

    int chooseOneRoute ( LB_SvrInfo * & pSvr )
    {
        double dblTotalWeight = 0.0;
        int i = 0;
        time_t curTime = time(NULL);
        //权重的计算方法是Late方法
        if ( curTime - calWeightTime >= CAL_WEIGHT_TIME_INTERVAL )
        {
            calculateWeight();
        }
        //先把各服务器权重加起来
        for ( i = 0; i < MAX_SERVER_NUM; i++ )
        {
            if ( !oServerInfo[i].isOkForRoute() ) continue;
            dblTotalWeight += oServerInfo[i].getWeight();
        }
        dblTotalWeight *= rand() / ( RAND_MAX + 1.0 );
        //做减法
        for ( i = 0; i < MAX_SERVER_NUM; i++ )
        {
            if ( !oServerInfo[i].isOkForRoute() ) continue;
            dblTotalWeight -= oServerInfo[i].getWeight();
        //找到对应服务器
            if ( dblTotalWeight < 0 ) break;
        }
        pSvr = &( oServerInfo[i] );
        return 0;
    }
      分步解释就是:
        1. 先计算得到各机器的权重值,保存起来;
        2. 按顺序将各机器权重相加,相加之后就相当于各机器在总权重上占了各相应的一段比例;
        3. 取随机数,得到一个0~1的随机值,并乘以总权重,作为选中机器的标志;
        4. 再按顺序减去各机器的权重,当减到选择机器的权重范围时,就得到了机器号,从而选定该机器。
      算法示意图如下:

      

      服务器权重越高,在线段上占的长度越长,被随机数选中的概率也越大。

      刚开始的时候,我以为是哪个数学家搞出来的公式得到的呢,结果原理却出奇的简单,所以好的东西不一定是复杂的,或者说看起来牛逼的东西,不一定就很复杂,但是肯定是大多数人意想不到的。

        涨姿势了!

  • 相关阅读:
    《java程序设计》第三周学习总结
    《Java程序设计》第2周学习总结
    #20175201 实验一 Java开发环境的熟悉(Linux + Eclipse)
    学号 20175201张驰 《Java程序设计》第4周学习总结
    #学号 20175201张驰 《Java程序设计》第3周学习总结
    #学号 20175201张驰 《Java程序设计》第2周学习总结
    #学号 20175201张驰 《Java程序设计》第1周学习总结
    实现一个book类
    学号 20175329 2018-2019-3《Java程序设计》第六周学习总结
    20175229许钰玮 2018-2019-2《Java程序设计》结对编程项目-四则运算 第一周 阶段性总结
  • 原文地址:https://www.cnblogs.com/yougewe/p/8036273.html
Copyright © 2011-2022 走看看