家电维修网

 找回密码
 注册
家电维修网 网站首页 电工学习 查看内容

仅需这一篇,妥妥的吃透“”负载均衡”

2018-10-17 16:35| 发布者: 南召修电视| 查看: 1295| 评论: 0

摘要: 我们都对高可用有一个基本的认识,其中负载均衡是高可用的核心工作。本文将通过如下几个方面,让你妥妥的吃透“”负载均衡”。负载均衡是什么常用负载均衡策略图解常用负载均衡策略优缺点和适用场景用健康探测来保障 ...

我们都对高可用有一个基本的认识,其中负载均衡是高可用的核心工作。本文将通过如下几个方面,让你妥妥的吃透“”负载均衡”。

  • 负载均衡是什么

  • 常用负载均衡策略图解

  • 常用负载均衡策略优缺点和适用场景

  • 用健康探测来保障高可用

  • 结语


负载均衡是什么


正如上图所示的这样,由一个独立的统一入口来收敛流量,再做二次分发的过程就是负载均衡,它的本质和分布式系统一样,是分治。


假如大家习惯了开车的时候用一些导航软件,我们会发现,导航软件的推荐路线方案会有一个数量的上限,比如 3 条、5 条。


因此,其实本质上它也起到了一个类似负载均衡的作用,因为假如只能取 Top3 的通畅路线,自然拥堵严重的路线就无法推荐给你了,使得车流的压力被分摊到了相对空闲的路线上。


在软件系统中也是一样的道理,为了避免流量分摊不均,造成局部节点负载过大(如 CPU 吃紧等),所以引入一个独立的统一入口来做类似上面的“导航”的工作。


但是,软件系统中的负载均衡与导航的不同在于:导航是一个柔性策略,最终还是需要使用者做选择,而前者则不同。


怎么均衡的背后是策略在起作用,而策略的背后是由某些算法或者说逻辑来组成的。


比如,导航中的算法属于路径规划范畴,在这个范畴内又细分为静态路径规划和动态路径规划,并且,在不同的分支下还有各种具体计算的算法实现,如 Dijikstra、A* 等。


同样的,在软件系统中的负载均衡,也有很多算法或者说逻辑在支撑着这些策略,巧的是也有静态和动态之分。


常用负载均衡策略图解


下面来罗列一下日常工作中最常见的 5 种策略。


轮询


这是最常用也最简单策略,平均分配,人人都有、一人一次。大致的代码如下:

int  globalIndex = 0;   //注意是全局变量,不是局部变量。

try
{

    return servers[globalIndex];
}
finally
{
    globalIndex++;
    if (globalIndex == 3)
        globalIndex = 0;
}


加权轮询


在轮询的基础上,增加了一个权重的概念。权重是一个泛化后的概念,可以用任意方式来体现,本质上是一个能者多劳思想。


比如,可以根据宿主的性能差异配置不同的权重。大致的代码如下:

int matchedIndex = -1;
int total = 0;

for (int i = 0; i < servers.Length; i++)
{
      servers[i].cur_weight += servers[i].weight;//①每次循环的时候做自增(步长=权重值)
      total += servers[i].weight;//②将每个节点的权重值累加到汇总值中
      if (matchedIndex == -1 || servers[matchedIndex].cur_weight < servers[i].cur_weight) //③假如 当前节点的自增数 > 当前待返回节点的自增数,则覆盖。
      {
            matchedIndex = i;
      }
}

servers[matchedIndex].cur_weight -= total;//④被选取的节点减去②的汇总值,以降低下一次被选举时的初始权重值。
return servers[matchedIndex];


123下一页

最新评论

  • 三相电源断零线,为什么会接二连三烧坏电器
  • 风力发电机转那么慢,一圈能发多少电?
  • 零线不带电,为什么还要拉一条?直接用地做
  • 电磁阀基础知识详解:原理、维护、选型
  • 新能源汽车DC/DC变换器及实物拆机图
推荐阅读

QQ|门户地图|网站地图|家电维修|手机版|家电维修技术论坛 ( 蜀ICP备14030498号-16 )

GMT+8, 2024-4-27 03:32

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

返回顶部