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

    /// <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.1.12", 1},
            {"192.168.1.13", 1 },
            { "192.168.1.14", 3},
            { "192.168.1.15", 1},
            {"192.168.1.16", 1},
            {"192.168.1.17", 1 },
            { "192.168.1.18", 1},
            { "192.168.1.19", 1}
        };

        public static string roundRobin()
        {
            //獲取ip列表list
            List<string> it = dic.Keys.ToList();

            List<String> serverList = new List<string>();

            foreach (var item in it)
            {
                int weight = 0;
                dic.TryGetValue(item, out weight);

                for (int i = 0; i < weight; i++)
                {
                    serverList.Add(item);
                }
            }

            string server = null;

            lock (obj)
            {
                if (pos >= serverList.Count)
                {
                    pos = 0;
                }
                server = serverList[pos];
                pos++;
            }
            return server;
        }

    }
时间: 2024-11-05 14:45:00

负载均衡算法(二)加权轮询负载均衡算法的相关文章

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

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

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

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

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

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

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

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

Nginx 做负载均衡的几种轮询策略

网上看见nginx的upstream目前支持的5种方式的分配,摘录备忘. 1.轮询(默认)每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除.upstream backserver {server 192.168.0.14;server 192.168.0.15;} 2.weight指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况.upstream backserver {server 192.168.0.14 weight=10;serv

十四.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

加权轮询和加权随机算法

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

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

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) 原文

LVS负载均衡地址转换使用轮询算法实验(结尾代码随记)

地址转换模式:调度服务器有双网卡,做NAT映射,请求经过调度服务器, 也是各个节点服务器回应客户机的出口,可作用于私网,较安全. 实验思路及环境 一.调度服务器配置双网卡,做网关,请求的流量以及转发的流量走调度服务器走 二.资源服务器两台都提供网页服务,为了测试,两台的内容不相同ip:192.168.10.10/24 httpd服务ip:192.168.10.20/24 httpd服务 三.远程存储设备使用NFS做远程存储,给资源服务器提供内存支持 图解如下 1.安装ipvsadm包 yum i