提纲
关于负载均衡的需求
几种不同的负载均衡方案
关于负载均衡的需求
一个合适的、针对Wowza 服务器的负载均衡器,需要考虑以下这些可能的需求:
- 可以在集群中很方便的加入或删除一台Wowza Streaming Engine 服务器。理想状态下,这个过程应该是自动完成的,这就要求当一台Wowza服务器停止提供流服务时,它能够被很方便的监测到。
-
可以处理持久连接和非持久连接。持久连接是Wowza服务器与其它Wowza服务器的连接或者Wowza服务器和Wowza® GoCoder™之间的连接(通过WOWZ™ 和 RTMP 协议)。
非持久连接更多的是HTTP连接和RTMPT连接。
- 计算出集群中每一台Wowza Streaming Engine当前的负载,以此来进行更精确的负载均衡策略。
- 服务器出现宕机时可以得到快速、高效的响应。
- 流传输服务不能中断或延时。
几种不同的负载均衡方案
一、Wowza自有的负载均衡方案
Wowza 有一个负载均衡模块,叫做Load Balancer ,它可以运行在任何一个Wowza Streaming Engine™ 服务器上。 它由两部分组成。其中一个是Listener,它运行在被设计为负载均衡器的Wowza Streaming Engine服务器上, 它接收来自播放器的初始连接请求,以及集群中其它Wowza服务器的状态更新请求。另一个是Sender,它运行在集群中的其它任何一个Wowza服务器上,同时它会向Listernetr发送当前正在承受的负载信息。
当一个播放器请求流服务时,它会首先连接Listener所在服务器上的一个应用(Application)。这个连接会被自动重定向,这是一个标准的302重定向,指向了这个集群中的一个正确的Wowza服务器。 于是,播放器丢弃了与Listerner上的应用的连接,并与被重定向的那个Wowza服务器上的应用建立连接。为了让这个机制能够正常运转,播放器必须可以处理302重定向。这有可能会限制了你选择播放器的范围。 对于哪些不支持重定向的播放器,Listener还提供了一个HTTP接口,调用它后,可以获得当前的重定向地址。
Wowza自有的Load Balancer不支持对来自编码器的请求进行负载均衡和重定向。因此针对这类需求,必须使用其它负载均衡方案。
由于Wowza自有的Load Balancer是运行在Wowza Streaming Engine 软件之上的。因此你可以用Java Classes来扩展它来进行更好的控制,更好的来处理负载请求。
二、基于Round-robin DNS 和 Geo-based DNS 的负载均衡方案
在某些场景下,可以用支持 round-robin 和 Geo-based的 DNS来进行负载均衡。 他们通常适合用在持久性的连接上,在非持久性连接上它可能会引发一些问题。这是由于对于非持久性连接来说,每一次连接请求都会导致一次新的DNS lookup ,这样客户端就有可能会收到一个新的服务器地址。 基于DNS的负载均衡只能提供一个很简陋的负载均衡机制,因为DNS 没法知道集群中每一台Wowza服务器的负载信息。 同时,DNS内部的缓存机制可能会让有些服务器收到比其它服务器更多的连接请求。 如果其中一台发生宕机,由于DNS中的缓存机制,这个服务器的状态没法得到更新。
三、第三方的负载均衡方案
很多第三方的负载均衡器会将来自客户端的TCP包或UDP包转发至集群中的某个合适的Wowza服务器上。它类似于一个路由器在网络上转发数据包。 所有来自客户端的网络流量都会通过这个负载均衡器。 有些负载均衡器在集群服务器向客户端的返回的流量有不同的选项。大部分时候,这个网络流量会包含很大量的音视频媒体数据包。因此,在选择这些选项时一定要注意不要让负载均衡器引起网络延时。
在这里,我们做一个简单的推荐,你可以根据自己的业务场景来选择合适的方案:
1. Nginx 反向代理,比如nginx_tcp_proxy_module 和 nginx_upstream_check_module模块,你在网上能搜索到很多这些资源。
2. 淘宝团队共享的开源产品:Tengine,这里是它的官网。淘宝 Tengine
因为所有来自客户端的流量都会经过这个负载均衡器,因此这个负载均衡器可以公平而精准地监测集群上每一台服务器的的负载,对集群上一台服务器的宕机信息可以用其它方式来监控。
正常情况下,这个负载均衡是对客户端来说是完全透明的;然而,针对非持久性连接的场景下,你一定要小心确保这些连接都可以被转发到正确的Wowza服务器上。 在大部分情况下,通过配置可以解决这个问题。
注意
- 在一些场景下,将多种负载均衡方案组合起来使用有很大的好处。例如 round-robin DNS 可以被用于将连接指向一对Wowza的负载均衡器或一对第三方的负载均衡器。
- Geo-based DNS 可以被用于将请求指向某一个数据中心的Wowza负载均衡器或第三方负载均衡器。
- 当然基于DNS的负载均衡还可以被用在将来自编码器的请求转发到不同的Wowza源服务器。