对于最多几千人同时在线的通信应用,通常使用单台服务器就可以支撑。但是,当同时在线的用户数达到几万、几十万、甚至百万的时候,我们就需要很多的服务器来分担负载。但是,依据什么规则和结构来组织这些服务器,并使它们能相互协调合作,是最关键的问题。如果你的通信应用是基于ESFramework通信框架构建的,当同时在线的用户人数剧增时,就可以非常容易地迁移到ESPlatform,以解决巨大并发的问题。

ESPlatform 旨在协助快速构建大型的基于ESFramework通信框架的通信应用。ESPlatform也是通过应用服务器群集(Cluster)来解决巨大并发。ESPlatform支持三种群集模型:垂直分割模型、水平分割模型、交叉模型(垂直分割与水平分割相结合)。在介绍这三种模型之前,我们先简单描述一下ESPlatform中的几种服务器角色:

      中心服务器Center Server:基于ESPlatform.Center构建。

(1) 管理所有的应用服务器AS。

(2) 管理所有在线用户列表。

(3) 在AS之间转发消息。

      好友服务器Friend Server:管理全局的好友关系网络。

      群组服务器Group Server:管理所有动态组、静态组。

应用服务器AS: 基于ESFramework通信框架/ESPlus/ESPlatform.Application构建,实现客户需要的业务流程。

1.水平分割群集模型

水平分割群集模型的关键点在于:所有的AS服务器都是对等的,是可以相互替换的,每台AS都提供相同的服务,即每台AS都能处理所有类型的消息,客户端无论登录到哪台AS都可以正常工作。该模型的伸缩性体现在,当用户人数增大时,我们可以动态的添加AS服务器来分担负载。

2.垂直分割群集模型

    
     垂直分割群集模型的关键点在于:各AS服务器不是对等的,AS不能相互替换,每台AS提供服务可能都不相同,即每台AS能处理的消息类型仅仅是所有消息类型的一个子集。 所以,客户端如果需要获得完整的服务,就需要与每个AS都建立一个通信通道。该模型的伸缩性体现在,当用户人数增大时,我们可以继续拆分服务(即消息类型),将新拆分出来的服务交给新增加的AS服务器来处理。请注意,在拆分服务的时候,我们要遵守业务高内聚的原则 -- 将关系松散的业务拆开,而将关系紧密的放在一起。
     还有一种典型的使用垂直分割模型的情况:当客户端与单个AS之间通信的消息频率非常高时,单个通信通道使得消息之间相互等待的状况更加恶劣,这时我们可以将一部分消息类型拆分出来给其它的AS处理。在客户端看来,单的通信通道变成了多个通信通道,以消除高频消息的拥塞状况。

3.交叉群集模型

    

交叉模型要复杂一些,其关键点在于:首先,对提供的服务(即消息类型)进行垂直分割,然后针对垂直分割得到的每一个服务子集,都采用一组对等的AS来处理(即水平分割)。这样就将垂直分割模型与水平分割模型结合起来了,以达到更强的可伸缩性。
     比如上图示范中,我们将所有的服务分为M和N两组,M组有两台AS、N组有三台AS;而M CenterServer用于管理M组的所有AS,N CenterServer用于管理N组的所有AS。

4.进一步增加可伸缩性

在上述的三种群集模型中,水平分割模型是最简单、最直观的,也是最容易部署的。首先,客户端只需要与一个AS连接;其次,扩展时只需要增加提供完整服务的对等服务器,不需要对服务进行拆分;再次,扩展时客户端不用做任何修改,连配置都不用。所以,如果不是特别需要,我们建议尽可能地采用水平分割模型。而且,即使是采用水平分割模型,我们也还可以在具体的应用中进一步地增加可伸缩性,以达到类似垂直分割模型或交叉模型的效果。比如,当AS提供某个服务非常的消耗CPU或内存时,那么AS可以将其转交给功能服务器(FS)处理,如下图所示:

当然,这种利用FS来扩展AS的结构不仅仅可用于水平分割模型,同样也可用于垂直分割模型和交叉模型,以达到更强的伸缩性。

从利用FS来增强AS的层面来看,似乎水平分割模型已经可以完成所有高并发、高性能的任务,其实不然。有些情况下,还是必须要使用垂直分割模型或交叉模型的。比如,水平分割模型中,客户端都是单通道的,当客户端需要与服务器进行非常高频率的通信时,由于单通道的限制会导致出现消息拥塞的状况,这时就必须考虑使用垂直分割模型或交叉模型了。

正如你所想,对于利用FS进行AS增强,ESPlatform并不需要做任何特别的工作来支持,这点完全可以由具体应用根据具体情况自己完成,而且也非常容易。

对于在实际的基于ESFramework通信框架的通信项目中,如何搭建ESPlatform提供的三种群集模型,我们将在后面详细介绍。而ESFramework通信框架、ESPlus中当初有一些不起眼的基础设施和组件,正是为构建ESPlatform应用而存在的;也正是有这些基础设施和组件的存在,才使得将基于ESFramework通信框架的应用服务器迁移到ESPlatform是如此的简单,有些也许只要修改一下配置就可以做到。

最后要说明一点的是,ESPlatform的目的是解决大型应用中与通信相关的问题,当然也包括消息处理(这就和具体项目的业务衔接起来了),但是,在大型应用中,还有很多其它的问题可能需要专门领域的框架才能解决。比如,像类似文件服务器这样的应用,需要处理巨大数量的文件存储,就需要用到分布式的文件存储系统DFS,等等,这些就是ESFramework通信框架/ESPlatform之外的技术了。

ESPlatform 支持的三种群集模型 —— ESFramework通信框架 4.0 进阶(09)的更多相关文章

  1. 文件断点续传原理与实现—— ESFramework 通信框架4.0 进阶(12)

    在ESFramework通信框架 4.0 快速上手(13) -- 文件传送,如此简单一文的详细介绍和ESFramework通信框架 4.0 快速上手(14) -- 聊天系统Demo,增加文件传送功能( ...

  2. 可靠通信的保障 —— 使用ACK机制发送自定义信息——ESFramework 通信框架4.0 快速上手(12)

    使用ESPlus.Application.CustomizeInfo.Passive.ICustomizeInfoOutter接口的Send方法,我们已经可以给服务端或其它在线客户端发送自定义信息了, ...

  3. 成熟的C#网络通信框架介绍——ESFramework通信框架

    (转自:http://www.cnblogs.com/zhuweisky/archive/2010/08/12/1798211.html) ESFramework通信框架是一套性能卓越.稳定可靠.强大 ...

  4. DB2支持的三种表空间SMS、DMS、DMS的自动存储

    DB2支持的三种表空间SMS.DMS.DMS的自动存储 DB2中,表空间是数据库与这个数据库中存储的表之间的逻辑层.表空间在数据库中创建,表在表空间中创建.容器是一个物理存储设备.它可以由目录名.设备 ...

  5. Reactor三种线程模型与Netty线程模型

    文中所讲基本都是以非阻塞IO.异步IO为基础.对于阻塞式IO,下面的编程模型几乎都不适用 Reactor三种线程模型 单线程模型 单个线程以非阻塞IO或事件IO处理所有IO事件,包括连接.读.写.异常 ...

  6. HTTPD三种工作模型

    HTTPD三种工作模型 MPM是apache的多道处理模块,用于定义apache对客户端请求的处理方式.在linux中apache常用的三种MPM模型分别是prefork.worker和event. ...

  7. 谈IO中的阻塞和非阻塞,同步和异步及三种IO模型

    什么是同步和异步? 烧水,我们都是通过热水壶来烧水的.在很久之前,科技还没有这么发达的时候,如果我们要烧水,需要把水壶放到火炉上,我们通过观察水壶内的水的沸腾程度来判断水有没有烧开.随着科技的发展,现 ...

  8. C++二级指针第三种内存模型

    #include "stdio.h" #include "stdlib.h" #include "string.h" void main() ...

  9. 6_1 持久化模型与再次加载_探讨(1)_三种持久化模型加载方式以及import_meta_graph方式加载持久化模型会存在的变量管理命名混淆的问题

    笔者提交到gitHub上的问题描述地址是:https://github.com/tensorflow/tensorflow/issues/20140 三种持久化模型加载方式的一个小结论 加载持久化模型 ...

随机推荐

  1. Reprint: Serialization

    Having just recently ran into some major serialization issues I’m going to list some of the errors a ...

  2. openstack私有云布署实践【11.2 计算nova - compute节点配置(办公网环境)】

    这里我只使用compute1节点配置为示例,其它节点的配置基本是一样的,只是声明的管理IP不同而已   计算节点 # yum install openstack-nova-compute sysfsu ...

  3. PIE 阻断回溯——Cut

    PIE(Prolog Inference Engine)通常是搜索所有的解.举个例子, 当然dialog窗口中一开始调用 run. 只会显示一个解(虽然事实上会得到两个解),在前面加上 X=1,就可以 ...

  4. HDU 1013 Digital Roots(字符串)

    Digital Roots Problem Description The digital root of a positive integer is found by summing the dig ...

  5. 【卷二】网络三—UDP服务器与客户端

    这是另一个类型的服务器/客户端,无连接的 UDP: (User Datagram Protocol) 用户数据报协议 参考: P58~P60 UDP 时间戳服务器 [时间戳 就是ctime()显示的内 ...

  6. 5、sha1加密的一个坑

    OC语言写的sha1加密算法,在网上随手可以搜索到(如下便是),但是我不得不说有一些人不责任,没有提醒大家导入必要的系统头文件,从而导致错误 + (NSString *) sha1:(NSString ...

  7. Hive 常用函数

    参考地址:https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF 1. parse_url(url, partToExt ...

  8. Linux 网络性能tuning向导

    本文的目的不完全在于提供调优信息,而是在于告诉读者了解Linux kernel如何处理数据包,从而能够在 自己的实践中发挥Linux 内核协议栈最大的性能 The NIC ring buffer 接收 ...

  9. js中style的属性

    下面这些属性都是通过js的style来设置css.只是整理了一部分,详细的可以参考相应的学习网站,不好的地方欢迎大家拍砖. alignContent :"" 属性在弹性容器内的各项 ...

  10. crontab 的例子

    0 5 * * * python /home/iscas/xiujinnews/wangyi.py >>/home/iscas/xiujinnews/l og/wangyi.log 2&g ...