负载均衡基础理论
应用场景
我这里大致分为两种:单工,双工。单工即是有明确的服务器和客户端,客户端主动请求,服务端侦听应答,大部分Web即是如此。双工即是没有明确的客户端服务端,双方可以互相主动通讯,比如聊天室,比如在线游戏。双工对同学提出了更多要求比如参照这篇关于Pomelo分析所提到的:
游戏服务器的分布式架构与Web服务器是不同的, 以下是web服务器与游戏服务器架构的区别:
>长连接与短连接。web应用使用基于http的短连接以达到最大的可扩展性,游戏应用采用基于socket(websocket)的长连接,以达到最大的实时性。
>分区策略不同。web应用的分区可以根据负载均衡自由决定, 而游戏则是基于场景(area)的分区模式, 这使同场景的玩家跑在一个进程内, 以达到最少的跨进程调用。
>有状态和无状态。web应用是无状态的, 可以达到无限的扩展。 而游戏应用则是有状态的, 由于基于场景的分区策略,它的请求必须路由到指定的服务器, 这也使游戏达不到web应用同样的可扩展性。
>广播模式和request/response模式。web应用采用了基于request/response的请求响应模式。而游戏应用则更频繁地使用广播, 由于玩家在游戏里的行动要实时地通知场景中的其它玩家, 必须通过广播的模式实时发送。这也使游戏在网络通信上的要求高于web应用。
均衡策略
有两种策略,一种是静态均衡,一种动态均衡,分别如下:
静态负均衡:客户端一旦和服务端建立链接,则在服务端不出错的的情况下一直链接该服务。且以后的通讯不再通过均衡服务,而是客户端和服务端直接通讯。如果客户端检测到无法链接当前的服务,则再次请求路由服务器分发新的服务地址。这种策略比较适合双工环境,特别是有回调的场景。这种均衡策略可以通过在客户端配置服务,也可以通过均衡服务路由客户端到服务端来实现。
动态均衡:每次请求,可能都是不同的服务端来处理。请求先到均衡服务,均衡服务转发请求给某个服务,服务处理完成后再转发给均衡服务,最后均衡服务把结果返回给客户端。
两种策略主要有如下区别:
l 静态均衡性能更好,因为最后是客户端和服务端直接对话。如果客户端太多,有时候网关的压力很会很大,导致网关也要一个负载均衡。
l 静态均衡可以更好的支持回调,在技术实现双工更简单。
l 可用性动态均衡更好。一旦服务出现问题,静态均衡需要重链。
l 扩展性动态均衡更好,对外根本不知道到底有多少有多少服务。不过静态均衡通过均衡服务分配服务也可以做到一点。
l 动态均衡更安全,均衡服务还起到网关的作用。
参考:
http://visualbasic.freetutes.com/learn-vb6-advanced/lesson1/p9.html