摘要:
http://blog.csdn.net/zhuweisky/article/details/411825这个题目听起来蛮吓人的,毕竟本人的经验值也不高,却大放厥词在这里谈“企业级”。原因有二,一是把这一年以来的开发DataServer服务器的工作做个总结;二是希望能抛砖引玉,希望这方面的研究和交流繁荣起来,毕竟,目前讲这方面实战经验的文章资料太少了。正式开题之前,绝对有必要先简单的介绍相关的背景。在写这篇文章的时候,我在航天量子数码科技有限公司(Aeromatex)产品部工作,全权负责DataServer的设计与实现。DataServer基于GIS/GPS是用于提供各种基于位置服务及其它远程 阅读全文
摘要:
最初之所以要采用插件的形式进行开发,主要是为了解决功能服务的“热插拔”问题,在决定采用“框架+插件”的方式进行设计后,我们就更进一步,打算将一个个可以分割开来的拥有完整功能的组件都做成插件的形式,并且使同类型的插件的接口兼容,这样在以后需要改变时就可以灵活的进行替换。比如,将通信部分做成通信插件、日志记录部分做成日志插件等等。首先,我们要弄清楚,什么是插件?我给出了一个定义,可能有失偏颇。 插件又称为扩展,是一种特殊的组件,用于增强和扩展基本框架的行为能力。插件和框架的通信协议是一组接口,插件的各种特性都可以通过该接口进行访问。插件主要有如下特点:(1)一个插件是一个独立的物理单元。它可以独立 阅读全文
摘要:
设想这样一种场景:我们的服务系统提供一系列的功能服务,而以后会有更多新的功能服务增加进来,也可能出现功能服务需要被更改或移除的情况。对于这样的服务系统,一个常见的基本的要求就是,在添加/移除/更新功能服务的时候不能停止的服务系统的运行。通常,将每一项服务封装成一个插件Dll,可以非常容易地实现“插件热插拔”(关于插件的基础信息,参见这里),但是插件的“热替换”(“动态替换”)却成了一个问题。原因在于,当我们从服务系统中卸载插件Dll的时候,实际上服务系统仍然持有该Dll的底层引用,这时如果你尝试删除或覆盖这个Dll,windows就会给出类似“该Dll正在被使用”的信息。 那么如何解决这个问题 阅读全文
摘要:
在DataServer中,功能插件位于功能服务器上,被框架用于处理所有的功能请求,功能请求的表现形式是数据流,即字节数组。 在描述功能插件的外貌之前,先有必要了解这个被功能插件处理的数据流,这个数据流可能基于某种流协议格式,也可以是被序列化的请求对象。所谓“基于格式的流协议”是这样一种消息协议,它定义了数据流的固定偏移处接下来的几个字节的含义,比如规定数据流从偏移为4的地方是一个整数,该整数表示本消息的长度。如果采用基于协议格式的流,则功能插件必须首先能解析此数据流;如果采用的是序列化的流,则只要反序列化该流即可(序列化一般也可以采用两种方式--二进制序列化或XML序列化)。可以这么认为,序. 阅读全文
摘要:
ESFramework介绍之(6)―― 基于C/S的4层架构概述 ESFramework的4层结构的4层分别是:客户端(Client)、应用服务器(AS)、功能服务器(FS)、数据库服务器。它们之间的联系图示意如下: FS (FunctionServer),功能服务器,处理并且仅处理所有的功能性请求,不参与用户管理、状态保持等,提供最纯粹的功能服务。 AS (ApplicationServer),应用服务器,转发所有的功能请求给FS,并处理所有的非功能请求,并管理终端用户、进行状态保持、日志记录等。 上图中的功能服务器FS的个数可能是0到N(N>0)个。在某种意义上可以认为,每个功能服务 阅读全文