ESPlatform 支持的三种群集模型 —— ESFramework通信框架 4.0 进阶(09)
对于最多几千人同时在线的通信应用,通常使用单台服务器就可以支撑。但是,当同时在线的用户数达到几万、几十万、甚至百万的时候,我们就需要很多的服务器来分担负载。但是,依据什么规则和结构来组织这些服务器,并使它们能相互协调合作,是最关键的问题。如果你的通信应用是基于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)的更多相关文章
- 文件断点续传原理与实现—— ESFramework 通信框架4.0 进阶(12)
在ESFramework通信框架 4.0 快速上手(13) -- 文件传送,如此简单一文的详细介绍和ESFramework通信框架 4.0 快速上手(14) -- 聊天系统Demo,增加文件传送功能( ...
- 可靠通信的保障 —— 使用ACK机制发送自定义信息——ESFramework 通信框架4.0 快速上手(12)
使用ESPlus.Application.CustomizeInfo.Passive.ICustomizeInfoOutter接口的Send方法,我们已经可以给服务端或其它在线客户端发送自定义信息了, ...
- 成熟的C#网络通信框架介绍——ESFramework通信框架
(转自:http://www.cnblogs.com/zhuweisky/archive/2010/08/12/1798211.html) ESFramework通信框架是一套性能卓越.稳定可靠.强大 ...
- DB2支持的三种表空间SMS、DMS、DMS的自动存储
DB2支持的三种表空间SMS.DMS.DMS的自动存储 DB2中,表空间是数据库与这个数据库中存储的表之间的逻辑层.表空间在数据库中创建,表在表空间中创建.容器是一个物理存储设备.它可以由目录名.设备 ...
- Reactor三种线程模型与Netty线程模型
文中所讲基本都是以非阻塞IO.异步IO为基础.对于阻塞式IO,下面的编程模型几乎都不适用 Reactor三种线程模型 单线程模型 单个线程以非阻塞IO或事件IO处理所有IO事件,包括连接.读.写.异常 ...
- HTTPD三种工作模型
HTTPD三种工作模型 MPM是apache的多道处理模块,用于定义apache对客户端请求的处理方式.在linux中apache常用的三种MPM模型分别是prefork.worker和event. ...
- 谈IO中的阻塞和非阻塞,同步和异步及三种IO模型
什么是同步和异步? 烧水,我们都是通过热水壶来烧水的.在很久之前,科技还没有这么发达的时候,如果我们要烧水,需要把水壶放到火炉上,我们通过观察水壶内的水的沸腾程度来判断水有没有烧开.随着科技的发展,现 ...
- C++二级指针第三种内存模型
#include "stdio.h" #include "stdlib.h" #include "string.h" void main() ...
- 6_1 持久化模型与再次加载_探讨(1)_三种持久化模型加载方式以及import_meta_graph方式加载持久化模型会存在的变量管理命名混淆的问题
笔者提交到gitHub上的问题描述地址是:https://github.com/tensorflow/tensorflow/issues/20140 三种持久化模型加载方式的一个小结论 加载持久化模型 ...
随机推荐
- 解码红外遥控信号——使用遥控器的按键来调节LED的亮度
程序开始时,提示遥控键0~4的代码,然后程序通过设置LED的亮度来对被按下的按钮作出响应,以0关闭LED,1~4提供增加的亮度. 代码如下:(需要使用IRremote库,可在库管理中搜索该库进行下载后 ...
- java静态方法之线程安全问题
静态方法和实例方法的区别是静态方法只能引用静态变量,静态方法通过类名来调用,实例方法通过对象实例来调用 每个线程都有自己的线程栈,栈与线程同时创建,每一个虚拟机线程都有自己的程序计数器PC,在任何时刻 ...
- Android设置窗体Activity背景透明
背景透明 style.xml <item name="android:windowBackground">@color/transparent</item> ...
- IBM Minus One
IBM Minus One Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total ...
- centos6 搭建hdwiki
前期准备:安装好Mysql+apache+PHP,测试apache能够解析index.php文件后就可以. 用户名 xiaohe 密码 123456 #### mysql安装好后: adduser w ...
- git和SVN的区别
1)Git是分布式的,SVN不是: 这 是GIT和其它非分布式的版本控制系统,例如SVN,CVS等,最核心的区别.好处是跟其他同事不会有太多的冲突,自己写的代码放在自己电脑上,一段时间后再提交.合并, ...
- Maven手动增加依赖jar到本地Maven仓库中
Apache Maven是一个项目管理及自动构建工具,有APache软件基金会提供.我们只要配置成功后就可以通过配置pom.xml添加所需依赖的jar包和类库,因为这些类库已经在我们配置的Maven仓 ...
- HDU 1847 Good Luck in CET-4 Everybody! 博弈
题目思路: 写出SG函数(1表示先手胜,0表示先手负) 110110110110-- 发现n%3==0时,Cici胜 #include<stdio.h> #include<strin ...
- css后续属性
- sql 关于dblink和多条update、insert事务回滚写法
在存储过程的编写中难免会遇到调用同库他人的proc和跨库调用proc,还有一个proc中有多条对多表进行写入和修改的语句.那么就会用到tran. 如果我们在不写try的情况下就要对每个insert,u ...