代理作用

  web缓存,提供缓存功能,可以加速响应过程。

  反向代理,可以隐藏后端服务器

  内容路由,可把不同内容类型的请求转发至特定服务器,

  转码器,与客户端通信,由于带宽限制,可将报文转码压缩;与后端服务器通信,一般都同个局域网内,可以不使用压缩传输。

haproxy

  只是http协议的反向代理,不提供缓存功能,但支持对TCP层以及基于TCP通信的应用做负载均衡。

  HTTP反向代理

  TCP代理

   SSL/TLS

  负载均衡调度,工作于 TCP 模式时,可对整个连接进行负载均衡调度;工作于 HTTP 模式时,可对 HTTP 请求进行调度。

URL语法

  scheme://user:password@host:port/path;params?query#frag

取模法

   即取余法,可以很好的将负载分发到各后端服务器,但如果一台后端服务器down,被除数就会减一,大部分请求的余数都会改变,那么分配结果将会大量改动。

一致性哈希

   相对于取模法,此方法还会对后端服务器进行hash计算,将hash值映射到一个0~65535值域上,当请求来到hsah计算后,将分配到第一个小于此hash值的机器上。如果其中一台机器down掉,本来应该分配到这台机器上的请求,就会自动分配至左侧机器。这样只会影响到一小部分请求。

调度算法

  动态:权重可以动态调整

  静态:调整权重不会实时生效

  roundrobin:基于权重轮询,在服务器的处理时间保持均匀分布时,这是最平衡、最公平的算法。由于其权重可以在运行时进行调整,每个后端主机最多支持4128个连接。此算法是动态的。

  static-rr:基于权重轮询,在运行时调整其服务器权重不会生效;不过,其在后端服务器连接数上没有限制;不支持慢启动,在高负荷的情况下,服务器重新上线时会立即被分配大量连接。此算法是静态的。

  leastconn:适用于长连接的会话,新的连接请求被派发至具有最少连接数目的后端服务器;在有着较长时间会话的场景中推荐使用此算法,如LDAP、SQL等,其并不太适用于较短会话的应用层协议,如HTTP;此算法是动态的。

  source:将请求的源地址进行hash计算,然后根据不同hash类型实现不同功能。

    hash-type:map-based取模法,静态;consistent一致性哈希,动态。

  uri:对URI左半部或整个URI进行hash计算,然后可将同一资源的请求发往特定的服务器,如果第一个访问某个资源,那么就根据roundrobin方式分配给一台后端服务器。根据不同hash类型实现不同功能。

  url-param:根据URL中的指定参数的值hash后进行调度,根据不同hash类型实现不同功能。

  hdr (<name>):根据请求报文中指定的header信息进行调度,把指定的header中的值hash计算。然后根据不同hash类型实现不同功能。