zoukankan      html  css  js  c++  java
  • 【转】C# Nginx平滑加权轮询算法

    代码很简单,但算法很经典,话不多说,直接上代码。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    public struct ServerConfig
    {
        /// <summary>
        /// 初始权重
        /// </summary>
        public int Weight { get; set; }
        /// <summary>
        /// 当前权重
        /// </summary>
        public int Current { get; set; }
        /// <summary>
        /// 服务名称
        /// </summary>
        public string Name { get; set; }
    }

      

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    public static int NextServerIndex(ServerConfig[] ss)
    {
        int index = -1;
        int total = 0;
        int size = ss.Count();   
     
        for (int i = 0; i < size; i++)
        {
            ss[i].Current += ss[i].Weight;
            total += ss[i].Weight;
     
            if (index == -1 || ss[index].Current < ss[i].Current)
            {
                index = i;
            }
        }
     
        ss[index].Current -= total;
        return index;
    }

      

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    static void Main(string[] args)
    {
     
        var sv = new ServerConfig[] {
            new ServerConfig{ Name="A",Weight=4},
            new ServerConfig{ Name="B",Weight=2},
            new ServerConfig{ Name="C",Weight=1}
        };
     
        int index = 0;
        int sum = sv.Sum(m => m.Weight);
        for (int i = 0; i < sum; i++)
        {
            index = NextServerIndex(sv);
            Console.WriteLine("{0} {1}", sv[index].Name, sv[index].Weight);
        }
     
        Console.Read();
    }

      参考文献:http://blog.csdn.net/gqtcgq/article/details/52076997

          文章出处:http://www.cnblogs.com/anech/p/6704240.html

  • 相关阅读:
    移动开发 Native APP、Hybrid APP和Web APP介绍
    urllib与urllib2的学习总结(python2.7.X)
    fiddler及postman讲解
    接口测试基础
    UiAutomator2.0 和1.x 的区别
    adb shell am instrument 命令详解
    GT问题记录
    HDU 2492 Ping pong (树状数组)
    CF 567C Geometric Progression
    CF 545E Paths and Trees
  • 原文地址:https://www.cnblogs.com/hycms/p/13458015.html
Copyright © 2011-2022 走看看