平滑加权轮询算法

        static void Test1()
        {
            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 < 100; i++)
            {
                index = NextServerIndex(sv);
                System.Console.WriteLine("{0}{1}", sv[index].Name, sv[index].Weight);

            }
        }

        public struct ServerConfig
        {
            //初始权重
            public int Weight { get; set; }

            //当前权重
            public int Current { get; set; }

            //服务名称
            public string Name { get; set; }
        }

        public static int NextServerIndex(ServerConfig[] serverConfigArray)
        {
            int index = -1;
            int total = 0;
            int size = serverConfigArray.Count();
            for (int i = 0; i < size; i++)
            {
                serverConfigArray[i].Current += serverConfigArray[i].Weight;
                total += serverConfigArray[i].Weight;
                if (index == -1 || serverConfigArray[index].Current < serverConfigArray[i].Current)
                {
                    index = i;
                }
            }
            serverConfigArray[index].Current -= total;
            return index;
        }

原文地址:https://www.cnblogs.com/liuxiaoji/p/10318853.html

时间: 2024-08-03 05:47:04

平滑加权轮询算法的相关文章

平滑加权轮询算法下的降权

func (this *LoadBalance) RoundRobinByWeight3() *HttpServer { //平滑加权轮询 for _, s := range this.Servers { s.CWeight = s.CWeight + s.Weight } sort.Sort(this.Servers) max := this.Servers[0] max.CWeight = max.CWeight - SumWeight return max } 来自为知笔记(Wiz) 原文

十四.nginx,web,反向代理,调用加权轮询算法,nfs服务

一.部署nginx反向代理web服务,调度算法使用加权轮询: 1.首先配置一个nginx服务端,三个web客户端.用vmware 新建虚拟机完成,并用xshell连接 2.在服务端和3个web客户端都下载epel_release 和nginx软件包; yum install epel_release -y ;  yum install nginx -y 3.关闭服务端和web客户端的防火墙,在服务端和web客户端都开启nginx软件包并且查看是否开启; 如未开启重新启动nginx: system

加权轮询算法

func (this *LoadBalance) RoundRobinByWeight() *HttpServer { server := this.Servers[ServerIndices[this.CurIndex]] this.CurIndex = (this.CurIndex + 1) % len(ServerIndices) //ServersIndices存放的是按照权重排放的索引,如3,1,2 则ServerIndices=[0,0,0,1,2,2] 然后遍历ServerIndi

Dubbo加权轮询负载均衡的源码和Bug,了解一下?

本文是对于Dubbo负载均衡策略之一的加权随机算法的详细分析.从2.6.4版本聊起,该版本在某些情况下存在着比较严重的性能问题.由问题入手,层层深入,了解该算法在Dubbo中的演变过程,读懂它的前世今生. 之前也写了Dubbo的负载均衡策略: <一文讲透Dubbo负载均衡之最小活跃数算法> <Dubbo一致性哈希负载均衡的源码和Bug,了解一下?> 本文目录 第一节:什么是轮询? 本小节主要是介绍轮询算法和其对应的优缺点.引出加权轮询算法. 第二节:什么是加权轮询? 本小节主要是介

负载均衡算法(二)加权轮询负载均衡算法

/// <summary> /// 加权轮询算法 /// </summary> public static class WeightRoundRobin { private static object obj = new object(); private static int pos = 0; static Dictionary<string, int> dic = new Dictionary<string, int> { { "192.168

Dubbo加权轮询负载均衡算法应用之推荐产品

Dubbo加权轮询负载均衡算法,核心点:weight(固定的权重),currentWeight(当前权重,动态变化的),算法逻辑:轮询服务提供者(每个服务提供者都有weight和currentWeight),currentWeight增加weight,取最大的currentWeight,然后取对应的服务提供者,最后将取到的服务提供者的currentWeight减去总的权重(所有服务提供者的weight之和).示例如下: 服务器 [A, B, C] 对应权重 [5, 1, 1] ,现在有7个请求依

加权轮询和加权随机算法

今天在看<大型分布式网站架构设计与实践>一书中, 看到了一种比较简单的加权的算法, 在这里记下来: var serverWeightMap = new Dictionary<string, int>(); serverWeightMap.Add("192.168.1.100", 1); serverWeightMap.Add("192.168.1.101", 1); // 权重为 4 serverWeightMap.Add("192

Nginx 负载均衡-加权轮询策略剖析

本文介绍的是客户端请求在多个后端服务器之间的均衡,注意与客户端请求在多个nginx进程之间的均衡相区别(Nginx根据每个工作进程的当前压力调整它们获取监听套接口的几率,那些当前比较空闲的工作进程有更多机会获取到监听套接口,从而客户端的请求到达后也就相应地被它捕获并处理).如果Nginx是以反向代理的形式配置运行,那么对请求的实际处理需要转发到后端服务器运行,如果后端服务器有多台,如何选择一台合适的后端服务器来处理当前请求,就是本文要说的负载均衡.这两种均衡互不冲突并且能同时生效. nginx不

【Nginx】负载均衡-加权轮询策略剖析

转自:江南烟雨 本文介绍的是客户端请求在多个后端服务器之间的均衡,注意与客户端请求在多个nginx进程之间的均衡相区别. 如果Nginx是以反向代理的形式配置运行,那么对请求的实际处理需要转发到后端服务器运行,如果后端服务器有多台,如何选择一台合适的后端服务器来处理当前请求,就是本文要说的负载均衡.这两种均衡互不冲突并且能同时生效. nginx不单可以作为强大的web服务器,也可以作为一个反向代理服务器,而且nginx还可以按照调度规则实现动态.静态页面的分离,可以按照轮询.ip哈希.URL哈希