zoukankan      html  css  js  c++  java
  • C# 实现 Nginx 平滑加权轮询算法

    代码很简单,算法很经典!

    1. 定义实体类

        public struct ServerConfig
        {
            //初始权重
            public int Weight {get;set;}
    
            //当前权重
            public int Current {get;set;}
    
            //服务名称
            public string Name {get;set;}
        }

    2. 算法

        // 找出数组中当前权重最小的那个服务的index,并把那个服务的当前权重减去总权重。
    public static int NextServerIndex(ServerConfig[] serverConfigArray) { int index = -1; int totalWeight = 0; int size = serverConfigArray.Count(); for(int i = 0; i< size; i++) { serverConfigArray[i].Current += serverConfigArray[i].Weight; totalWeight += serverConfigArray[i].Weight; if (index == -1 || serverConfigArray[index].Current < serverConfigArray[i].Current) { index = i; } } serverConfigArray[index].Current -= totalWeight; return index; }

    3.调用

        public static void TestServerAssignment()
        {
            //构建三台服务器
            var servers = new ServerConfig[] {
                new ServerConfig{Name="A", Weight = 4},
                new ServerConfig{Name="B", Weight = 2},
                new ServerConfig{Name="C", Weight = 1}
            };
            int beUsedIndex = 0;
            int sum = servers.Sum(m => m.Weight); //总权重
            //模拟调用服务次数为总权重数
            for(int i=0; i<sum; i++)
            {
                beUsedIndex = NextServerIndex(servers);
                Console.WriteLine("Current Server is {0}, its weight is {1}", 
                        servers[beUsedIndex].Name, servers[beUsedIndex].Weight);
            }
        }

    4.运行结果

    *****************************************************
    *** No matter how far you go, looking back is also necessary. ***
    *****************************************************
  • 相关阅读:
    力扣238.除自身以外数组的乘积 & 剑指offer 51.构建乘积数组
    网易的Airtest
    ZOOKEEPER
    Apache和Nginx负载均衡集群及测试分析
    mysql——创建索引、修改索引、删除索引的命令语句
    sql-索引的作用
    ADB连接手机的两种方式(usb数据线连接和wifi连接)
    adb shell dumpsys 命令
    count(*) 和 count(1)和count(列名)区别
    博客园页面设置
  • 原文地址:https://www.cnblogs.com/gangle/p/9358175.html
Copyright © 2011-2022 走看看