OpenRTMFP/Cumulus Primer(3)图解CumulusEdge原理
OpenRTMFP/Cumulus Primer(3)图解CumulusEdge原理
- 作者:柳大·Poechant
- 博客:Blog.CSDN.net/Poechant
- 邮箱:zhongchao.ustc@gmail.com
- 日期:April 9th, 2012
- 声明:
- 本文的图片来自OpenRTMFP/Cumlus开源项目主页
- 转载请注明来自柳大的CSDN博客 Blog.CSDN.net/Poechant
1 CumulusEdge 为 CumulusServer 提供可扩展性
CumulusEdge 为 CumulusServer 分担负载(俗称“扛连接”)。分担什么负载?一台服务的 CPU 资源、内存资源都是有限的,即是配置再高的服务器,对于高并发的应用来说,一台服务器的性能总是不够的。还有,端口号也是有限的(65536个)。
如果使用了 CumulusEdge,CumulusServer 可以将新来的 Clients 根据 CumulusEdge 列表和这些 CumulusEdge 资源的当前状况来分配。
如何选择哪个 CumulusEdge?你可以先理解为一种非常自然简单的方式:ping
。比谁ping
的快。当有很多 Clients 连接的时候,用 CumulusEdge 显然会快得多。
上图来自 OpenRTMFP/Cumulus 项目主页。
CumulusServer 是 OpenRTMFP/Cumulus 的中心,它有如下特点:
- 可以得到整个 OpenRTMFP/Cumulus 系统中所有 CumulusEdge 的信息;
- 是 Clients 的网关(Gateway);
CumulusServer 直接与 CumuluEdge 通过文本数据格式传输 Request 和 Response。CumulusEdge 由 CumulusServer 分配 Clients 后,Clients 接下来就只与 CumulusEdge 直接通信了,并完成 ExchangeKey 的解密(Decrypt)、编码(Encode),以及负责完成一些高资源开销的操作,和具有高开销加密操作的握手动作。
简而言之,CumulusEdge 可以帮助 CumulusServer 扩展 Clients 连接数。
2 部署原则
CumulusServer 和 CumulusEdge 对每一个 Client 都必须有一个 public 的端口。形象一些说,可以看下图。下图中的内部结点与外环(虚线)直接的连接,表示与 Clients 之间的连接,这样的连接的端口必须都是 public。而 CumulusServer 与 CumulusEdge 之间的连接,是 private 端口。
如果将 CumulusServer 和 CumulusEdge 部署在一个局域网络内,那么对于 Cumulus 整体的性能很有好处。
3 重定向算法
当 CumulusServer 收到一个新的 Client 的请求时,会检查 CumulusEdge List,如果这个 List 为空,则接下来由 CumulusServer 来“招待”这个 Client。
如果 CumulusEdge List 不为空,这个列表将是按照每个 CumulusEdge 所连接的 Clients 数量来排序的(降序),当一个新的 Client 连接到 CumulusServer 时,CumulusServer 将 CumulusEdge List 中排在前 6 位的取出给这个 Client。为什么可以一次给这个 Client 这么多 CumulusEdge 呢?因为 Flash Player 支持并发连接。当一个 Flash Client 去尝试多个连接时(即开始并发连接时),第一个给这个 Client 响应的 CumulusEdge 会与其建立连接,并一直保持,而 Flash Client 会关闭其他连接。
当然,如果 CumulusServer 将新来的 Client 丢给 CumulusEdge,但并没有在 Client 与 CumulusEdge 之间成功地建立起连接,那么 CumuluServer 就得来“招待”这个 Client 了。
-
转载请注明来自柳大的CSDN博客 Blog.CSDN.net/Poechant
-