示例#1
0
        static void RunRoundRobinLoadBalance()
        {
            var roundRobin = new RoundRobinLoadBalance();
            var people = new List <int> {
                210, 350, 440
            }.Select(num => new Person {
                Id = num, Weight = num
            }).ToList();
            var totalWeight     = people.Sum(person => person.Weight);
            var calculator      = new PersonWeightCalculator();
            var limitedWeight   = 10;
            var limitCalculator = new PersonLimitedWeightCalculator(limitedWeight); // 限制最大权重和的权重计算器(当遇到超大的权重和时,对于 RoundRobinLoadBalance 该算法可以提升加权负载的性能,减少内存占用,但命中率可能会产生小幅度的偏差)

            var monitor = people.ToDictionary(person => person, person => 0);

            Console.WriteLine("--- Run round robin load balance with weight[{0}] calculator ---", totalWeight);
            for (int i = 1; i <= 1000; i++)
            {
                var person = roundRobin.Select(calculator, people, "normal");
                monitor[person]++;
            }
            DisplayLoadBalanceMonitor(monitor);

            monitor = people.ToDictionary(person => person, person => 0);
            Console.WriteLine("--- Run round robin load balance with limited weight[{0}] calculator ---", limitedWeight);
            for (int i = 1; i <= 1000; i++)
            {
                var person = roundRobin.Select(limitCalculator, people, "limited");
                monitor[person]++;
            }
            DisplayLoadBalanceMonitor(monitor);
        }
示例#2
0
文件: ICalculate.cs 项目: lcksy/Dot
        public Calculate()
        {
            var weightCalculator = new ServiceMetadataWeightCalculator(30);
            var loadBalance      = new RoundRobinLoadBalance();
            var registery        = new ZooKeeperRegistery(ZooKeeperClient.Instance);

            _unaryInvoker = new UnaryServiceInvoker(registery, "/dotdubbo/unary/providers", loadBalance, weightCalculator);
        }
示例#3
0
文件: Program.cs 项目: lcksy/Dot
        static void Main(string[] args)
        {
            var weightCalculator = new ServiceMetadataWeightCalculator(30);
            var loadBalance      = new RoundRobinLoadBalance();

            // 创建注册中心
            var registery = new ZooKeeperRegistery(ZooKeeperClient.Instance);

            // 启动并注册 UnaryService
            Enumerable.Range(UNARY_SERVICE_MIN_PORT, UNARY_SERVICE_MAX_COUNT)
            .Select(port => HostUnaryService(port))
            .ForEach(meta => registery.Register(meta, true), 1000);

            // 调用 UnaryService
            var unaryInvoker = new UnaryServiceInvoker(registery, UNARY_SERVICE_PROVIDER_PATH, loadBalance, weightCalculator);

            for (int i = -1; i >= -10; i--)
            {
                Console.WriteLine("unaryInvoker.Negate({0}) = {1}", i, unaryInvoker.Negate(i));
            }
            Console.WriteLine("------------------");


            // 启动并注册 CalcService
            Enumerable.Range(CALC_SERVICE_MIN_PORT, CALC_SERVICE_MAX_COUNT)
            .Select(port => HostCalcService(port))
            .ForEach(meta => registery.Register(meta, true), 1000);

            // 调用 CalcService
            var calcInvoker = new CalculateServiceInvoker(registery, CALC_SERVICE_PROVIDER_PATH, loadBalance, weightCalculator);

            for (int i = 1; i <= 10; i++)
            {
                calcInvoker.Multicast(i);
                Console.WriteLine("{0} + {1} = {2}", i, i + 1, calcInvoker.Add(i, i + 1));
                Console.WriteLine("-------------------");
                System.Threading.Thread.Sleep(1000);
            }

            Console.Read();

            // 断开与 ZooKeeper 服务器的连接
            ZooKeeperClient.Instance.Dispose();
        }