>>分享数据结构和算法相关的知识和技术 书籍支持  卫琴直播  品书摘要  在线测试  资源下载  联系我们
发表一个新主题 开启一个新投票 回复文章 您是本文章第 19763 个阅读者 刷新本主题
 * 贴子主题:  haproxy调度算法 回复文章 点赞(0)  收藏  
作者:sunshine    发表时间:2020-03-15 22:15:26     消息  查看  搜索  好友  邮件  复制  引用

   在使用haproxy时在backend段会用到balance以指明用何种方式实现后端服务器的调度。

   balance:指明调度算法

   动态算法:权重可以动态调整

   静态算法:调整权重不会实时生效,只能重启才能生效

   balance的算法有:roundrobin,static-rr,leastconn,source,uri,uri_param,hdr等

   roundrobin算法:

   轮询,基于权重进行轮询,此算法是动态的,每个后端服务器仅能最多接受4128个连接;

   要求后端不能有状态及会话方面的等,只能是静态的页面

   当后端有会话等动态信息时,结合cookie使用,效果最佳

   static-rr算法:

   静态的roundrobin,不支持动态调整;静态算法,每个后端主机支持的数量无上限;

   leastconn算法:

   根据后端主机的负载数量进行调度,新的连接请求被派发至具有最少连接数目的后端服务器;

   在长连接会话的场景中推荐使用此法,不适用http,动态算法

   source算法:

   将请求的源地址进行hash运算;由后端服务器的权重总数相除后派发至某匹配的服务器,此方法可以让   同一个IP的请求发往同一个服务器;不过,当服务器权重总数发生变化时,如某服务器宕机或添加了   新的服务器,许多客户端的请求可能会被派发至与此前请求不同的服务器;常用于负载均衡无cookie   功能的基于TCP的协议;其默认为静态,不过也可以使用hash-type修改此特性;

   hash-type:

     map-based:取模法(除模取余法);(静态的,默认的)

     consistent:一致性哈希法;(动态的,使后时需要指定:hash-type consistent)

   uri算法:

   对URI的左半部分(“问号”标记之前的部分)或整个URI进行hash运算,并由服务器的总权重相除后派 发至某匹配的服务器;这可以使得对同一个URI的请求总是被派发至某特定的服务器,除非服务器的权重总数发生了变化;此算法常用于代理缓存或反病毒代理以提高缓存的命中率

   例: http://www.baidu.com/abc/query?item=123  #红色标记的部分是uri部分

   hash-type:

     map-based:取模法(除模取余法);(静态的,默认的)

     consistent:一致性哈希法;(动态的,使后时需要指定:hash-type consistent)

   注:用到uri时,当访问过后端某个页面后,后面所有此页面的请求都发至此服务器

   当未访问过后端某个页面时,采用roundrobin算法,随机挑选一个响应,并且随后所有的此页面的请求都发至此主机,这种算法,当后端缓存时非常有效果!!!!  

   roundrobin算法结合cookie的用法:

   cookie的作用是基本浏览器实现session sticky;

       cookie的使用方法:cookie <name> [rewrite|insert|prefix] [indirect] [nocache]  

   [rewrite|insert|prefix]:添加cookie的方式

     rewrite:把原有的cookie替换

     insert:在原有的cookie后中插入 #此种方式最为常用

     prefix:在原有的cookie前插入

   cookie常使用的方式:

     cookie SERVERID insert indirect nocache

     注:

     a.SERVERID,是自己随便指定的,在下面的例子中就是SERVERID=websrv1,SERVERID=websrv2;insert:表示插入原有cookie后边

     b.不根据源IP进行绑定,根据不同客户端的进行绑定,这种方式我感觉比source要好,因为source是把同一IP的发往同一后端服务器;根据不同客户端绑定,可以实现同一个公网IP的用户,请求发送到不同的后端

     c.roundrobin算法,结合cookie这种方式可以进行尝试;这种方式弥补了roundrobin不保持会话的缺点

   用法实例:    

     balance roundrobin

     cookie SERVERID insert indirect

     server web1 192.168.0.100 check weight 1 cookie websrv1

     server web2 192.168.0.101 check weight 3 cookie websrv2

     注:websrv1:是web1专有的cookie标识符,在客户端浏览器的cookie中可以看到

         websrv2:是web2专有的cookie标识符,在客户端浏览器的cookie中可以看到

   最常用的算法为:

   roundrobin

   source

   uri



----------------------------
原文链接:https://blog.51cto.com/liuzhengwei521/1927975

程序猿的技术大观园:www.javathinker.net



[这个贴子最后由 flybird 在 2020-03-15 22:15:26 重新编辑]
  Java面向对象编程-->接口
  JavaWeb开发-->Servlet技术详解(Ⅱ)
  JSP与Hibernate开发-->Java应用分层架构及软件模型
  Java网络编程-->用Axis发布Web服务
  精通Spring-->Vue简介
  Vue3开发-->计算属性和数据监听
  64匹马,8个赛道,找出跑得最快的4匹马
  无向图的最短路径求解算法之——Dijkstra算法
  深度学习之图片压缩算法
  银行家算法范例
  分布式一致Hash算法-存储之道
  用Java写算法:快速排序
  对称算法非对称算法哈希算法区别
  ipvsadm及lvs的调度算法
  Binary Search二分查找算法
  微软面试题:买卖股票的最佳时机
  LinkedList,LinkedHashMap,LruCache源码解析
  RSA 非对称加密原理(小白也能看懂哦~)
  比较迭代和递归:人理解迭代 ,神理解递归
  分析递归和迭代的区别、优缺点及实例对比
  技术和算法的抉择
  更多...
 IPIP: 已设置保密
楼主      
1页 1条记录 当前第1
发表一个新主题 开启一个新投票 回复文章


中文版权所有: JavaThinker技术网站 Copyright 2016-2026 沪ICP备16029593号-2
荟萃Java程序员智慧的结晶,分享交流Java前沿技术。  联系我们
如有技术文章涉及侵权,请与本站管理员联系。