对于最多几千人同时在线的通信应用,通常使用单台服务器就可以支撑。但是,当同时在线的用户数达到几万、几十万、甚至百万的时候,我们就需要很多的服务器来分担负载。但是,依据什么规则和结构来组织这些服务器,并使它们能相互协调合作,是最关键的问题。如果你的通信应用是基于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. 中兴电信光纤猫F450获取管理员密码方法

    初衷:为了完成端口映射,一开始以为电信光猫不支持自定义路由,因为通过useradmin登录进去后没有找到对应的选项.一番了解之后,原来光猫有超级密码,电信装机时是不会告诉你的,电信客服一般也不会告诉你 ...

  2. nohup及/dev/null使用

    1.nohup    ----后台执行,执行记录默认输出到当前目录下的nohup.out文件         nohup find /etc -name passwd 2./dev/null介绍 把/ ...

  3. [Android]Android SDk Manager中创建模拟器无法选择CPU问题解析

    方法一.正常下载所需sdk包 启动 Android SDK Manager ,打开主界面,依次选择「Tools」.「Options...」,弹出『Android SDK Manager - Setti ...

  4. mimi

    <!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"& ...

  5. 前端知识点一HTML相关知识点

    1.浏览器页面有哪三层构成,分别是什么,作用是什么? 构成:结构层.表示层.行为层 分别是:HTML.CSS.JavaScript 作用:HTML实现页面结构,CSS完成页面的表现与风格,JavaSc ...

  6. Metrics-Java版的指标度量工具

    介绍 Metrics是一个给JAVA服务的各项指标提供度量工具的包,在JAVA代码中嵌入Metrics代码,可以方便的对业务代码的各个指标进行监控,同时,Metrics能够很好的跟Ganlia.Gra ...

  7. mysql随记

    .frm是描述了表的结构,.MYD保存了表的数据记录,*.MYI则是表的索引 ibd是MySQL数据文件.索引文件,无法直接读取. ibdata是innodb引擎使用的 如果是使用myisam引擎 则 ...

  8. XCODE 控件连接(关联)不上变量 怎么解决

    一个很低级的错误,原因就在于控件所属的UIViewController没有设置对应的CLASS, 即变量所属的class, 设置好即可解决. 解决办法: alt + command + 3进入身份检查 ...

  9. 提取出图像中感兴趣的部分,cvSetImageRoi,Rect

    在做人脸检测的时候,需要从摄像头拍摄视频中把检测到的人脸区域提取出来,网上找了很多博客,发现多数都是在用cvSetImageRoi函数,该函数声明如下:void cvSetImageROI(IplIm ...

  10. 移动端audio自动播放问题

    中秋临近,心血来潮想做个手机端贺卡,以前接触的移动端较少,虽然是个简单的贺卡,其实也蛮多坑的,简略说一下在制作贺卡的过程遇到的坑: 一:移动端的屏幕大小不能算作body的大小,因为手机浏览器头部都有网 ...