基于C/S的4层架构 —— ESFramework介绍之(6)

    ESFramework的4层结构的4层分别是:客户端(Client)、应用服务器(AS)、功能服务器(FS)、数据库服务器。它们之间的联系图示意如下:

    FS (FunctionServer),功能服务器,处理并且仅处理所有的功能性请求,不参与用户管理、状态保持等,提供最纯粹的功能服务。
    AS (ApplicationServer),应用服务器,转发所有的功能请求给FS,并处理所有的非功能请求,并管理终端用户、进行状态保持、日志记录等。
    上图中的功能服务器FS的个数可能是0到N(N>0)个。在某种意义上可以认为,每个功能服务器FS是可以互换的。

    将服务器拆分为功能服务器和应用服务器有两个显而易见的好处:
(1)功能服务器FS的完全可复用。由于功能服务器采用“框架+插件”的结构,所以整个功能服务器是完全可复用的,从一个具体应用转换到另一个具体应用,只需要替换功能插件即可,FS不需重新编译。
(2)由于FS仅提供最纯粹的功能服务,不需要进行用户管理、状态保持,这种功能服务器在运行时的无状态性,使得功能服务器很容易实现负载均衡集群(后文中会讲到,这种动态负载均衡是如何实现的)。 

    如果ESFramework仅仅做到这一步,就没有必要拿出来和大家分享了,ESFramework不仅对这种4层架构给予了充分完整的支持,ESFramework更进了一步,它可以支持“类似地域分布式”的体系结构。读者可能已经了解到,上面的4层架构已经是一种分布式架构了,那么这里说的“类似地域分布式”又是什么意思?

    可以这么说,4层架构是一种“纵向”的架构,“类似地域分布式”则侧重于“横向”,在“类似地域分布式”体系结构中,每一个具体的“4层架构的实现”只是其中的一个组成元素。我举个例子,现在我们的一个应用需要为全国范围内的所有大城市的手机用户提供某种基于C/S的手机增值服务。我们的经验是,为每个城市配置一个应用服务器AS,由于大量的计算在该AS对应的FS上,所以可能需要多个FS为这个AS服务。而每个城市的AS之间可能需要相互通信(比如处理漫游用户),这就需要将AS也管理起来,管理AS的服务器是IRAS(跨区域服务器)。如此一来,我可以画出下图作为例子:

     图中的FunAddin是功能插件,这再前文已介绍过了。整个体系中,终端请求的服务主要分为两大类,一是向应用服务器AS请求功能服务,另一类是终端与终端之间的非功能通信。所有的功能服务由功能插件(FunAddin)进行处理,所有的非功能通信由应用服务器处理或中转。如果,终端请求的功能服务位于外部系统,则功能插件会自动定位外部系统的地址,然后通过WebService等方式向外部系统提交请求。
    
    好了,读者已经了解了ESFramework中的4层结构和“类似地域分布式”结构是怎么回事了,下面我简单概述一下ESFramework对4层结构和“类似地域分布式”结构提供了哪些强有力的特性支持:            

1.  基于构件
    除了所有的功能插件是构件外,整个ESF平台也是由构件组装而成。其好处是:
(1)快速搭建系统
(2)促进构件复用,如AS/IRAS/FS/IRFS可以使用同一个通信组件来完成通信层工作。
(3) 实现功能插件的“热插拔”,可以在运行时动态的添加/移除功能服务

2.  高度可扩展
    由于ESF服务平台体系需要随时随地的应付各种突如其来的变化,其一定要具备高度的可扩展性:
(1)功能插件的“热插拔”
(2)外部服务的动态接入(通常是通过WebService)
(3)应用服务器AS的动态添加/移除,比如,新开通针对大连城市的服务。
(4)功能服务器FS的动态添加/移除,实现功能服务器的动态负载均衡集群。

3.  高度可伸缩
    随着我们提供的服务日渐深入人心,我们的用户的数量会急剧增加,所以ESF服务平台体系必须具备高度可伸缩性来提高系统的最大负载和吞吐量。
(1)由于功能服务器需要进行大量的功能运算,所以平台的瓶颈通常位于功能服务器,这可以通过功能服务器的动态集群来解决。集群中的各个功能服务器之间的负载均衡由对应的应用服务器AS来调度。
(2)当单个区域的常在线用户数量突破5000~10000时,我们需要添加AS进行区域级的负载均衡,这可以通过具有端口映射功能分硬件来解决。 

4.  高度可复用
    ESF服务平台体系并非只是适用于我们的LBS服务,其实,ESF服务平台体系是一个高度可复用的体系,也就是说ESF服务平台可以作为任何、任意的服务的基本平台,只要其所提供的服务是终端和服务器之间通过Tcp进行基于连接的通信。 

5.  分布式
    除了外部系统的接入通过分布式服务进行外,各应用服务器之间、功能服务器与应用服务器之间、应用服务器和跨区域的应用服务器之间都是采用分布式通信。跨区域的应用服务器通过类似于remoting的方式在各个应用服务器之间进行调度。

6.  简单部署、自动升级
    由于ESF服务平台体系服务的区域可能非常多,比如各个大城市可能都需要部署应用服务器和功能服务器,所以如果通过人工进行部署和升级是非常低效的,ESF服务平台提供了自动升级、加载、运行的功能。
(1)服务平台安装后,仅仅需要修改配置文件中的几个参数即可正常运行。
(2)当功能插件拥有新版本的时候,可以在不停止服务的情况下,自动升级到新版本。
(3)当各服务器系统(AS/IRAS/FS/IRFS)有新版本时,会在该系统重启的时候自动升级到新版本。为了在升级的时候不终止服务,服务器系统可以使用逐步升级的方式。 

7.  通信保证机制
    当遇到网络突然断开或某服务器重启的情况,在网络恢复或服务器重启完成后,需要一种能自动的立即恢复通信(比如AS和FS的通信,各AS与IRAS之间的通信)的机制,ESF服务平台提供了这种保证,其采用的策略主要基于:
(1)定时论询
(2)Tcp连接池自动重连
(3)连接动态反转

8.  漫游支持、跨区域功能请求支持
    在ESF服务平台体系中,漫游是指某一区域的用户登录到另外一区域的应用服务器AS上,对于此AS来说,该用户是漫游用户。如果用户登录到某AS却请求其它区域的功能服务,则是跨区域的功能请求。ESF服务平台对这两种情况都给予了充分的支持。

9.  终端与终端之间的通信支持
    有时,终端需要和终端(可能是同区域的、也可能是其它区域的)之间进行通信,并且这种通信可以基于连接和基于非连接。基于连接的通信像实时视频聊天、实时监控,基于非连接的像发送一张图片给不在线的用户。所有这些,ESF服务平台都提供了支持。

10.支持二次开发
   在基于ESF服务平台高度可复用和可扩展的基础上,ESF平台可以非常容易的支持二次开发,只要遵循相同的接口和通信协议,就可在ESF平台进行二次开发。

11.客户端框架
   如果应用的客户端也可以使用.NET开发,则ESFramework也提供了完善的支持,在ESFramework的支持下,开发客户端仅仅需要开发业务插件就可以了,而整个网络通信、多线程、升级部署等,都由框架完成了。后面的文章中我会介绍如何在AgileIM中开发自定义的业务插件。

     上面的所有特性将会在“基于C/S4层架构”部分分节介绍,感谢关注! 

     如果你的应用不需要这么复杂的结构,比如仅仅一个简单的3层架构,那么ESFramework仍然可以帮助你快速构建,ESFramework是个轻量级的应用框架,你不会为那些ESFramework提供了的而你不需要的功能/特性付出任何代价。
    (注意,ESFramework不太适合处理遗留系统(就像你很难使用MFC去处理基于VCL构建的UI应用一样),ESFramework虽然与应用无关,但是为了能将更多的任务从应用中抽象到框架中来,必须对应用做一些假设,幸运的是,ESFramework仅仅对应用的通信协议做了最少的假设,这个假设包含在NetMessage中。如果你不是处理遗留系统,而是构建一个全新的C/S应用,那么ESFramework可以为你节省大量的架构设计时间、软件开发时间、调试和维护时间。) 

    (最后做个广告,如果你新接手的项目非常适合采用上面介绍的4层架构或“类似地域分布式”体系结构,希望我们有合作的机会:)通过 agilesoft@163.com 联系我)

 转到  :ESFramework 可复用的通信框架(序) 

 

时间: 2024-07-30 01:54:23

基于C/S的4层架构 —— ESFramework介绍之(6)的相关文章

ESFramework介绍之(10)-- Tcp连接池

    凡是带有"池"的,比如数据库连接池.对象池.缓冲区池(后面可以看到IBuffPool)等等,都是为了避免资源的反复创建/销毁所带来的开销.需要为哪些资源对象建立"池"了?这些资源对象通常符合下面几个特性:(1)在应用中需要反复的被创建/销毁.(2)创建/销毁的开销比较大(3)应用中给定时刻,对该资源对象的数量要求比较大(4)资源对象最好是无状态的(Stateless),这样方便直接复用     AS(回顾)将所有的功能服务请求转发给为该AS提供服务的FS群中

基于.Net Framework的N层分布式应用开发

分布式 主题:建立可维护.可扩展的站点,开发高效率.高伸缩性的应用程序.创建N层分布式应用程序.实现跨平台.跨Internet的应用集成,是摆在无数开发者面前的任务.传统开发方式及技术面临了困难. .Net Framework推出的许多新技术为上述任务的实现提供了相对简单的解决方案.其中,基于SOAP的Web Service在处理分布式应用时具有比传统的DCOM/CORBA明显的优点,结合基于Web的ASP.NET页面开发技术和SQL Server数据存储技术(或Xml文档),在.Net下开发N

基于LINQ TO SQL的多层架构中,如何将实体附加至不同的DataContext

注意: 1.本文中所提到的"实体"均为由LINQ TO SQL生成的(即.dbml) 2.你需要了解LINQ TO SQL对表关联的实现方式,EntitySet 和 EntityRef 也许你看到标题后,会觉得问题比较抽象,那么我举个实例来具体说明一下问题. 在基于LINQ TO SQL的N层架构中,假如我们需要对一个实体进行更新,那么流程应是这样: 流程 BLL.GetModel(p=>p.id==1) --> 修改相应属性(字段)值 --> BLL.Update(

一个高可扩展的基于非阻塞IO的服务器架构

原文链接   译者:mailto:ahahage@163.com 目录 线程体系结构 反应堆模式 组件架构 接收器 分配器 分配器级别事件处理器 应用程序级别事件处理器 总结 参考资料 如果你被要求去写一个高可扩展性的基于JAVA的服务器,你很快就会决定使用JAVA NIO包.为了让服务器跑起来,你可能会花很多时间阅读博客和教程来了解线程同步需要NIO SELECTOR类以及处理一些常见的陷阱.本文描述了一个面向连接基于NIO的服务器的基本架构.本文会先看一下一个首选的线程模型然后讨论服务器的一

建立基于SDN/NFV的固网架构需要哪些技术支撑

截至2016年10月底,中国移动有线宽带业务用户数为7551万,中国联通有线宽带业务用户数为7547.2万,中国移动固网宽带用户数首次超过中国联通.而中国电信仍以超过1.2亿的固网宽带用户数位居三大运营商首位.从用户数据便可看出国内固网市场竞争越来越激烈. 中移动网络架构存在三大挑战 中国移动发展有线宽带的时间并不长,缘何能在这么短的时间内取得如此骄人的成绩?中国移动研究院网络技术研究所项目经理李振强表示,这得益于中国移动发展"高起点"有线宽带业务--以50M为主.100M体现优势,并

业务层架构模式

一:业务层架构模式概述 在三层架构中,业务层负责所有业务相关的工作,包括根据输入数据或已有数据进行计算,对从表示层输入的数据进行验证,以及根据从表示层接收的命令来确定应该调用哪些数据访问逻辑.对于应用系统来说,业务层主要维护业务逻辑,是系统的核心部分.因此,在应用系统开发时,业务层的开发是最为关键的. 业务层的架构模式有多种,最著名的就是以下两种 : 事务脚本模型(面向过程的设计) 领域模型(面向对象的设计)   二:事务脚本模型 事务脚本(Transaction Script)架构模型是按照传

一步一步教你使用AgileEAS.NET基础类库进行应用开发-基础篇-基于接口驱动的数据层

系列回顾          在前面的文章中,我用了大量的篇幅对UDA及ORM的使用进行了讲解和演示,我们已经知道并熟悉的使用UDA和ORM构建简单的应用,AgileEAS.NET在应用的纵向结构上建议使用分层结构,提出独立数据层,数据层构成以ORM技术为基础.UDA技术做为辅助,共同完成这一系列功能.   基于接口开发         关于基于接口驱动的开发请参考DoNET企业架构应用-基于接口开发介绍以及应用场景和案例一文,在此不做具体介绍. 接口驱动的数据层         基于DoNET企

在c#中实现3层架构

架构 介绍 这篇文章讨论如何在c#中实现3层架构,使用MS Access数据库存储数据.在此,我在3层架构中实现一个小型的可复用的组件保存客户数据.并提供添加,更新,查找客户数据的功能. 背景 首先,我介绍一些3层架构的理论知识.简单说明:什么是3层架构?3层架构的优点是什么? 什么是3层架构? 3层架构是一种"客户端-服务器"架构,在此架构中用户接口,商业逻辑,数据保存以及数据访问被设计为独立的模块.主要有3个层面,第一层(表现层,GUI层),第二层(商业对象,商业逻辑层),第三层(

三层架构 ent-求一个简单3层架构,.ent

问题描述 求一个简单3层架构,.ent 想学3层架构,求一个简单3层架构模版,能对一张表进行修改! 247056534@qq.com 解决方案 你用微软的Mvc框架就行了 解决方案二: 上网搜找一个自己下载 解决方案三: 是.net吗?是的话就如楼上所说的直接使用微软的MVC框架,结合EF,连连接数据库的类都可以省掉不写了. 你也可以自己添加三个基础类库 Model DAL BLL Model的作用数据访问层,实体类什么的可以放在这一层. DAL层为数据访问层,用于存放链接数据库的类或者做增删改