注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

itoedr的it学苑

记录从IT文盲学到专家的历程

 
 
 

日志

 
 

IP地址散列调度均衡算法及其实现原理 (转存)  

2013-08-01 02:03:24|  分类: 应用负载均衡 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
作为网络请求分配的控制者,负载均衡器起着至关重要的作用,考虑到在任何网络请求中,都有一个源地址和目标地址(源IP和目标IP),因此我们这里讨论P地址散列调度均衡算法。
   网络负载均衡本质上是分布式业务中调度系统的一种实现。
      作为网络请求分配的控制者,负载均衡器起着至关重要的作用。考虑到在 任何一个网络请求中,都有一个源地址和目标地址(源IP和目标IP)。这样,在负载均衡器中,我们就可以利用这两个IP,通过一种散列算法把请求分配到不 同的服务器上。这种算法就是目标散列调度(利用目标IP)和源地址散列调度(利用源IP)。这两种算法为静态算法。

  下面我们分别简要讲述。

  1)目标地址散列调度(Destination Hashing Scheduling)算法

   目标地址散列调度(Destination Hashing Scheduling)算法的基本原理是:此算法根据请求的目标IP地址,作为散列键 (Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载的,则将请求发送到该服务器,否则返回空。这里我们设定某个服务器 的连接数目大于2倍的权值,则表示此服务器已超载。

  2)目标地址散列算法流程

  假设有一组服务器S = {S0, S1, ..., Sn-1},W(i)表示服务器Si的权值,C(i)表示服务器Si的当前连接数。ServerNode[]是一个Hash表。此表大小就是服务器的数目,也可根据算法模块中的具体条件修改。

  算法的初始化是将所有服务器顺序、循环地放置到ServerNode表中。

      n = ServerNode[hashkey(dest_ip)]; 
  if ( (n is dead) OR (W(n) == 0) OR (C(n) > 2*W(n))) then 
  return NULL; 
  return n; // 如果一切OK 


  上面的算法中,hashkey()为散列函数。在实现时,一般采用素数乘法Hash函数,通过乘以素数使得散列键值尽可能地达到较均匀的分布。

  Hashkey实现如下:

      static inline unsigned hashkey(unsigned int dest_ip) 
  { 
  return (dest_ip* 2654435761UL) & HASH_TAB_MASK; 
  } 
  其中,2654435761UL是2到2^32 (4294967296)间接近于黄金分割的素数, 
  (sqrt(5) - 1) / 2 = 0.618033989 
  2654435761 / 4294967296 = 0.618033987 


  源地址散列调度(Source Hashing Scheduling)算法

   源地址散列调度(Source Hashing Scheduling)算法的基本原理是:此算法根据请求的源IP地址,作为散列键 (Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载的,则将请求发送到该服务器,否则返回空。这里我们设定某个服务器 的连接数目大于2倍的权值,则表示此服务器已超载。、

  可以看出,这种方式和目标地址散列调度方法是类似的,唯一的区别是以源地址作为散列键。

  源地址散列算法流程

  源地址散列算法流程和目标地址散列算法流程类似,采用的散列函数也一样。唯一不同的是,需要将请求的目标IP地址换成请求的源IP地址,所以这里不再赘述。

  总结 :源地址散列调度和目标散列调度属于两种静态的调度算法,在实际应用中,这两种调度算法可以结合使用在防火墙集群中,它们可以保证整个系统的唯一出入口。
  评论这张
 
阅读(314)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017