一般而言,为了保证服务器的高可用性,会采用集群的方式来处理客户端的请求。那么在集群中某台服务器不可用时,客户端通过什么方式重新连接到其他的服务器呢? 下面我就将分享几种常见的模式。
1. 配置多IP模式
描述:
客户端配置所有的服务器IP,在一个连接不可用时,尝试其他服务器。应用:
适合于服务器IP固定且对负载均衡要求不高的场景。在具体设计上,为了保证尽可能均衡负载,客户端一般会采用随机算法选择一个服务器,而服务器也会在过载时将一部分请求转发到其他服务器处理。缺点:
- 服务器必须固定IP,配置复杂,不够灵活
- 负载均衡耦合于客户端跟服务器,不利于负载均衡策略调优
2. 虚拟IP代理模式
描述:
增加独立的服务器,实现路由与负载均衡的策略。配置虚拟IP,减少客户端对IP的依赖。应用:
通用模式,不依赖于客户端与服务器,可以实现灵活的负载均衡算法。在具体设计上,为了保证代理服务器的高可用性,代理服务器一般会配置为另外的一个集群,集群内具有主备的关系。备用服务器监控主服务器,在主服务器不可用时,接管主服务器上的虚拟IP。缺点:
- 需要增加服务器
- 代理服务器管理比较复杂
3. 移动IP模式
描述:
增加守护服务器,监控服务器的状态,并更新本地可用服务器列表。客户端在连接服务器前,首先与守护服务器通信,拿到实际可用的服务器列表。应用:
针对负载均衡,在具体设计上,有两种方案,第一种是守护服务器根据监控到的状态信息,选择一台机器返回给客户端,这主要适合于客户端不重用连接的情形。第二种是守护服务器直接返回所有可用的IP,由客户端与服务器再进一步做负载均衡,这跟配置多IP模式比较相近。缺点:
- 需要保证守护服务器的高可用性
- 增加了客户端对系统架构的粘性
4. 动态DNS模式
描述:
增加DNS服务器,在DNS服务器中配置服务器IP,并实现IP选择策略。应用:
通用模式,不依赖于客户端与服务器。由于DNS服务器选择IP的策略一般都比较简单,因此这种方案仅适合于对负载均衡要求不高的情形。缺点:
- 需要保证DNS服务器的高可用性
- 负载均衡策略较简单,依赖于DNS服务器