对于最多几千人同时在线的通信应用,通常使用单台服务器就可以支撑。但是,当同时在线的用户数达到几万、几十万、甚至百万的时候,我们就需要很多的服务器来分担负载。但是,依据什么规则和结构来组织这些服务器,并使它们能相互协调合作,是最关键的问题。如果你的通信应用是基于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. 使用SLT 工具从SAP导入数据到SAP HANA的监控

    使用SLT工具从SAP导入数据到SAP HANA主要有两种方式监控, 一是在SAP SLT服务器上使用以下T-Code: IUUC_SYNC_MON MWBMON 二是在SAP HANA Studio ...

  2. Ubuntu下Git的使用之创建版本库

    创建版本库 什么是版本库呢?版本库又名仓库,英文名repository,你可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改.删除,Git都能跟踪,以便任何时刻都可以 ...

  3. zabbix 布署实践【2 agent安装】

    客户端的安装相对较为简单,主要是更新它的repo源   以CentOS7为例 rpm -ivh http://repo.zabbix.com/zabbix/3.0/rhel/7/x86_64/zabb ...

  4. NASPhoto Station不只是储存的强大照片管理功能

    减少漫长的讨论时间,进而让你的艺术作品更符合客户需求.Photo Station 让你集中存储照片.随处分享及存取相簿并轻松收集朋友和客户反馈. 串流照片到大屏幕电视 DS photo 支援 Appl ...

  5. git add -f

    git add -f 添加已被 .gitignore 忽略的文件/文件夹

  6. myeclipse里如何添加mysql数据库

    首先声明,这只是我本人的一些经验,不代表任何集体和个人的利益,请勿没事就当喷子来喷我.我希望对一些对这方面学习的朋友有帮助,当然,我自己也是菜鸟级别啦!!!!!!!!!!!! 首先是电脑必要安装了my ...

  7. Java NIO 内存映射文件

    Java NIO 内存映射文件 @author ixenos 文件操作的四大方法 前提:内存的访问速度比磁盘高几个数量级,但是基本的IO操作是直接调用native方法获得驱动和磁盘交互的,IO速度限制 ...

  8. Form提交时隐藏Token验证

    前端声称一个Token @Html.AntiForgeryToken() 后台对Token进行验证 AntiForgery.Validate();

  9. Redis--Latest Windows Version

    Redis Windows Ver https://github.com/MSOpenTech/redis/releases service-install.batredis-server.exe - ...

  10. Windows Azure Storage

    之前都是在博客园看别人的文章,今天开始就开启自己的博客咯,欢迎阅读,共同探讨! 简单点说Widows Azure Storage就是一个大的网盘,可以让用户存储任何想存储的数据,数据一旦存储到“云”中 ...