IM配置服务器概要设计文件.docx
- 文档编号:9242145
- 上传时间:2023-05-17
- 格式:DOCX
- 页数:46
- 大小:300.90KB
IM配置服务器概要设计文件.docx
《IM配置服务器概要设计文件.docx》由会员分享,可在线阅读,更多相关《IM配置服务器概要设计文件.docx(46页珍藏版)》请在冰点文库上搜索。
IM配置服务器概要设计文件
1.引言
1.1编写目的
本文档描述《企业即时通讯系统》的配置服务器(ProfileServer)的概要设计说明书。
1.2背景
产品/项目名称
企业即时通讯系统
项目代号
EICS
项目任务提出者
项目负责人、系统分析员、系统设计员
程序设计员、程序员
本项目开展工作直接有关的人员
1.3范围
本文档涉及配置服务器的总体设计、模块设计、数据结构设计、运行设计、故障处理说明、安全设计及维护设计等。
1.4文档约定
本文档依照以下文件标准进行编写:
1)CX-WI-04概要设计说明书编写WI.Doc
2)概要设计说明书模板(xxxxBRDS.Doc)
1.5参考资料
1)SPMP协议(第2版).sxw
2)即时通讯系统体系构架.doc
3)ACE_Architecture_Overview.doc
2.总体设计
2.1软件描述
配置服务器(ProfileServer)管理企业即时通讯系统中的各种配置数据,这些配置数据均是对系统内的数据库服务器上的配置数据的缓存。
配置服务器管理的内容包括系统内其他服务器所需的配置信息的缓存管理和订阅通知管理,客户端所需的配置信息的缓存管理及部分配置数据的增,删,改等管理。
此外,配置服务器还实现对系统内其他服务器的负载均衡管理。
为使配置服务器为企业即时通讯系统提供可靠的服务,配置服务器支持双机热备技术,即两台配置服务器同时提供服务,并且互相实时备份数据。
因此,配置服务器还负责与对等机的配置数据进行实时同步管理。
配置服务器通过实现SPMP协议来实现上述管理。
2.2设计约束
2.2.1运行环境约束
调度服务器运行于Linux和Windows环境下:
CPU:
双CPU,IntelPIII以上
内存:
1GB以上
硬盘:
10G以上
网络接口卡:
100M以上
操作系统:
Linux(内核版本2.4.18以上)
Windows2000以上
2.2.2性能约束
支持7x24小时可靠运行;
一对双机热备的ProfileServer组应能支持100,000个并发在线用户。
2.2.3功能约束
配置服务器通过ODBC接口访问系统内的数据库服务器。
配置服务器支持SPMP协议。
配置服务器的所有访问都在通过安全认证的前提下进行,并且对请求内容进行合适的存取限制,对某些敏感内容(如用户密码)进行加密传输。
2.2.4界面约束
配置服务器的启动只支持命令行方式的启动。
2.2.4开发工具约束
会议服务器使用标准的C++进行开发,使用g++和/或VisualC++6.0进行编译。
由于系统将基于ACE框架开发,而ACE是基于面向对象技术开发的(使用C++语言)。
所以配置服务器的开发也将采用面向对象技术(并使用C++语言);
2.3设计原则
可靠性:
配置服务器采用Heartbeat技术保证提供7x24小时可靠运行。
安全性:
对配置服务器的所有访问都在通过安全认证的前提下进行,支持摘要认证和IP地址验证。
配置服务器对请求内容进行合适的存取限制,对某些敏感内容(如用户密码)进行加密传输。
可扩展性:
配置服务器支持通过插件的方式扩展新的功能,支持在运行时加载新的功能插件或移去已加载的功能插件。
可移植性:
配置服务器的代码至少支持在Linux平台和Windows2000平台之间的移植。
2.4体系构架
参见ACE体系结构及ASF框架概述(ACE_Architecture_Overview.doc)。
3.模块设计
配置服务器基于ACE/ASF开发,设计中广泛应用了ACE的设计模式和ASF框架。
下面简单介绍在配置服务器设计中所应用到的一些ACE设计模式。
●Reactor[1]:
该模式构造事件驱动应用,特别是服务器;它们并发地接收来自多个客户的请求,但依次对它们进行处理。
●ActiveObject[1]:
该模式使方法执行与方法调用去耦合,以增强并发、并简化对驻留在它们自己的线程控制中的对象的同步访问。
●ServiceConfigurator[1]:
该模式允许应用在运行时链接它的组件实现、或解除其链接,而不必修改、重编译或静态地重链接应用。
它还可以在不关闭和重启运行中的进程的情况下,将组件重新配置进不同进程。
●Acceptor-Connector[1]:
该模式使网络系统中的连接建立及服务初始化与服务处理去耦合。
●Non-blockingBufferedI/O:
该模式使输入机制与输出机制去耦合,以正确而可靠地路由数据,而又不会过度地阻塞应用处理。
上述模式是在配置服务器的设计中起战略性作用,它们显著地影响配置服务器的软件体系结构。
例如,当网关遇到拥塞或失败时,非阻塞缓冲式I/O模式能确保消息处理不会被中断或无限期地延迟。
该模式有助于为使用可靠的面向连接的传输协议(比如TCP/IP或IPX/SPX)的网关维持稳定的服务质量(QoS)。
战略性通信模式确保配置服务器的健壮性、高效和可扩展性。
除此之外,还有一些设计模式也在网关设计中得到有效的应用,它们影响特定模块的实现:
●MonitorObject[1]:
该模式对并发的方法执行进行同步,以确保在某一时刻只有一个方法在对象中运行。
它还允许对象的多个方法相互协作地调度它们的执行序列。
网关使用此模式来同步它的MessageQueue的多线程配置。
●Singleton[2]:
该模式保证一个类仅有一个实例,并提供一个访问它的全局访问点。
●Bridge[2]:
该模式将抽象部分与它的实现部分分离,使它们都可以独立地变化。
●Façade[2]:
该模式为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
●Iterator[2]:
该模式使对容器的连续访问与容器的表示去耦合。
配置服务器由以下模块组成:
配置服务器框架(PlugInFramework)、插件接口(PlugInContract)、插件(PlugIns)、spmpdatamodel和ACE/ASF框架。
图1配置服务器模块设计
配置服务器框架(PlugInFramework)负责维护所有的插件,并在合适的地方调用插件输出的接口方法。
插件接口(PlugInContract)定义框架提供给插件的接口以及插件应该实现的接口。
插件(PlugIns)模块根据配置数据的相关性,将配置数据的维护封装在不同的插件中。
将访问相关数据的SPMP命令实现在同一个插件,不同的插件访问不同的数据。
spmpdatamodel模块实现SPMP消息的编/解码。
ASF框架被构造为框架的框架(frameworkofframeworks)。
整个ASF构架含有以下组件和构架:
并发框架(ConcurrencyFrameworks)、事件框架(EventFrameworks)、I/O事件(I/OEvents)、定时事件(TimingEvents)和协议框架(ProtocolFrameworks)。
各个框架都被构造为一组使用ACE中的组件实现的协作对象。
控制器子系统和混合器子系统都是基于ASF框架进行设计的。
3.1配置服务器框架
配置服务器框架由基本框架(BaseFramework)、数据访问器(DataAccessor)和协议引擎(ProtocolEngine)模块组成。
BaseFramework模块实现提供给所有插件共同访问的一些框架接口,包括配置信息访问接口、订阅管理接口、通知管理接口、License管理接口、协议处理器管理接口和领域对象访问接口等。
BaseFramework必须在其它插件之前被加载。
DataAccessor模块提供数据访问的抽象接口,屏蔽了数据存储在不同数据库时的实现细节。
ProtocolEngine模块负责创建侦听套接口、接收客户端连接、对连接进行身份认证并创建合适的客户对象来处理客户请求、根据并发策略将任务分发到线程等功能。
ProtocolEngine最后被加载。
图2配置服务器框架
3.1.1BaseFramework
3.1.1.1功能结构
BaseFramework应用ServiceConfigurator模式在配置服务器启动时首先被加载。
BaseFramework被加载时,PS_BaseFramework:
:
init()方法被执行。
PS_BaseFramework:
:
init()依次初始化Configuration、LicenseManager、ChangeManager、NotificationManager、HandlerManager和ObjectAccessor等模块。
Configuration模块应用Singleton模式提供配置服务器运行时参数的统一访问接口PS_Configuration。
Configuration模块应用Bridge模式将访问配置服务器运行时参数文件的抽象接口与实现分离。
LicenseManager模块应用Singleton模式提供配置服务器运行时域和服务的License信息的统一访问接口PS_LicenseManager。
LicenseManager摸块依赖与DataAccessor模块从数据库获取本配置服务器所负责客户的License信息,包括:
域列表,及服务列表,服务期限等。
ChangeManager模块应用Singleton模式和Observer模式提供对Web通知、用户信息更改、域信息更改的订阅和通知的统一访问接口PS_ChangeManager。
NotificationManager模块应用Singleton模式提供向SPMP客户端发送SPMP通知消息的统一访问接口PS_NotificationManager。
NotificationManager模块应用ActiveObject模式实现异步地发送SPMP通知,避免当连接被阻塞时引起其它模块被阻塞。
此外,NotificationManager模块Connector和Reactor模式向SPMP客户端发送发起连接请求,然后发送SPMP通知。
对同一个客户端的连接将被复用,所有向同一个客户端发送的SPMP通知消息都缓存在一个FIFO队列中,以FIFO的方式发送给客户端。
HandlerManager模块应用Singleton模式提供统一的协议处理器访问接口PS_HandlerManager。
HandlerManager模块实现SPMP协议命令处理器的添加、删除和查询功能。
ObjectAccessor模块应用Singleton模式提供统一的领域对象接口访问接口PS_ObjectAccessorManager。
插件通过ObjectAccessor模块注册/注销自己实现的领域对象访问接口;也可以通过ObjectAccessor模块检索其它插件实现的领域对象访问接口。
图3BaseFramework功能结构
3.1.1.2性能
无。
3.1.1.3内部接口
3.1.1.3.1PS_Configuration
图4PS_Configuration
(1)staticPS_Configuration*instance(void);
[功能简介]
返回PS_Configuration单件。
[参数说明]
无。
[返回值]
返回PS_Configuration单件。
(2)intparseCommandLine(intargc,ACE_TCHAR*argv[]);
[功能简介]
分析命令行参数,初始化配置服务器运行时参数。
[参数说明]
argc:
命令行参数个数;
argv:
命令行参数指针数组。
[返回值]
成功返回0,失败返回-1。
(3)size_tinitMessageSize()const;
[功能简介]
返回SPMP消息缓冲区初始大小。
[参数说明]
无。
[返回值]
返回SPMP消息缓冲区初始大小。
(4)size_tmaxMessageSize()const;
[功能简介]
返回SPMP消息缓冲区最大大小。
[参数说明]
无。
[返回值]
返回SPMP消息缓冲区最大大小。
(5)size_tmaxQueueSize()const;
[功能简介]
返回通知消息队列中待发送SPMP通知消息的最大字节数。
[参数说明]
无。
[返回值]
返回通知消息队列中待发送SPMP通知消息的最大字节数。
(6)constACE_Time_Value&recvTimeout()const;
[功能简介]
返回接收消息的超时时间。
[参数说明]
无。
[返回值]
返回接收消息的超时时间。
(7)constACE_Time_Value&sendTimeout()const;
[功能简介]
返回发送消息的超时时间。
[参数说明]
无。
[返回值]
返回发送消息的超时时间。
(8)stringmyHost()const;
[功能简介]
返回本机IP地址。
[参数说明]
无。
[返回值]
返回本机IP地址。
(9)intmyPort()const;
[功能简介]
返回本服务器侦听端口。
[参数说明]
无。
[返回值]
返回本服务器侦听端口。
(10)intmaxUser()const;
[功能简介]
返回本服务器服务的最大用户数。
[参数说明]
无。
[返回值]
返回本服务器服务的最大用户数。
(11)constACE_Time_Value&heartbeatTimeout()const;
[功能简介]
返回其它服务器向本服务器发送心跳消息的间隔时间。
[参数说明]
无。
[返回值]
返回其它服务器向本服务器发送心跳消息的间隔时间。
(12)intcachePolicy(conststring&objectType)const;
[功能简介]
返回特定领域对象的缓存策略。
Cache策略控制不同类型数据的Cache方式,包括:
(a)启动预加载,即服务器启动时即加载所有的数据;
(b)按需预加载,当某域的第一个用户请求数据时,加载该域所有用户的相应数据;
(c)无预加载,用户请求数据时才加载特定用户的数据。
[参数说明]
objectType:
领域对象类型。
[返回值]
返回特定领域对象的缓存策略。
3.1.1.3.2PS_LicenseManager
图5PS_LicenseManager
(1)staticPS_LicenseManager*instance(void);
[功能简介]
返回PS_LicenseManager单件。
[参数说明]
无。
[返回值]
返回PS_LicenseManager单件。
(2)voidmyDomains(vector
[功能简介]
返回本配置服务器所负责的域名列表。
[参数说明]
domains:
返回本配置服务器所负责的域名列表;
[返回值]
无。
(3)boolisDomainValid(conststring&domainName)const;
[功能简介]
判断给定的域是否有效(即数据库存在该域的记录,且未过期、未被锁定)。
[参数说明]
domainName:
域名。
[返回值]
有效返回true,否则返回false。
(4)voidmyServers(vector
[功能简介]
返回本配置服务器所负责的服务器(SIP、Conf、Mail或Web服务器)IP地址列表。
[参数说明]
domains:
返回本配置服务器所负责的服务器IP地址列表。
[返回值]
无。
(3)boolisServerValid(conststring&serverIp)const;
[功能简介]
判断给定的IP地址是否是有效的服务器IP地址。
[参数说明]
serverIp:
服务器IP地址。
[返回值]
有效返回true,否则返回false。
3.1.1.3.3PS_ChangeManager
图6PS_ChangeManager
(1)staticPS_ChangeManager*instance(void);
[功能简介]
返回PS_ChangeManager单件。
[参数说明]
无。
[返回值]
返回PS_ChangeManager单件。
(2)intdbAttach(intcode,IDBObserver*observer)const;
[功能简介]
注册数据库通知消息的观察者。
本方法由观察者调用。
[参数说明]
code:
数据库通知代码;
observer:
观察者。
[返回值]
注册成功返回0,失败返回-1。
(3)intdbDetach(intcode,IDBObserver*observer)const;
[功能简介]
注销数据库通知消息的观察者。
本方法由观察者调用。
[参数说明]
code:
数据库通知代码;
observer:
观察者。
[返回值]
无。
(4)voiddbNotify(intcode,constmap
[功能简介]
通知数据库通知消息的观察者。
本方法由数据库通知消息处理器调用。
[参数说明]
code:
数据库通知代码;
params:
通知参数,以kay:
value的方式保存在map中。
[返回值]
无。
(5)intuserAttach(conststring&userid,intsubject,IUserObserver*observer)const;
[功能简介]
注册用户信息的观察者。
本方法由观察者调用。
[参数说明]
userid:
被观察的用户ID;
subject:
被观察的信息(编码同SPMP订阅命令编码);
observer:
观察者。
[返回值]
注册成功返回0,失败返回-1。
(6)intuserDetach(conststring&userid,intsubject,IUserObserver*observer)const;
[功能简介]
注销用户信息的观察者。
本方法由观察者调用。
[参数说明]
userid:
被观察的用户ID;
subject:
被观察的信息(编码同SPMP订阅命令编码);
observer:
观察者。
[返回值]
无。
(7)voiduserNotify(conststring&userid,intsubject,constACE_Message_Block&msg)const;
[功能简介]
通知用户信息的观察者。
本方法由负责更新用户信息的插件调用。
[参数说明]
userid:
被观察的用户ID;
subject:
被观察的信息(编码同SPMP命令编码);
msg:
用户信息的通知消息,可以直接通过网络发送给订阅该信息的客户端。
[返回值]
无。
(8)intdomainAttach(conststring&domainid,intsubject,IDomainObserver*observer)const;
[功能简介]
注册域信息的观察者。
本方法由观察者调用。
[参数说明]
domainid:
被观察的域ID;
subject:
被观察的信息(编码同SPMP订阅命令编码);
observer:
观察者。
[返回值]
注册成功返回0,失败返回-1。
(9)intdomainDetach(conststring&domainid,intsubject,IDomainObserver*observer)const;
[功能简介]
注销域信息的观察者。
本方法由观察者调用。
[参数说明]
userid:
被观察的域ID;
subject:
被观察的信息(编码同SPMP订阅命令编码);
observer:
观察者。
[返回值]
无。
(10)voiddomainNotify(conststring&domainid,intsubject,constACE_Message_Block&msg)const;
[功能简介]
通知域信息的观察者。
本方法由负责更新域信息的插件调用。
[参数说明]
userid:
被观察的域ID;
subject:
被观察的信息(编码同SPMP命令编码);
msg:
域信息的通知消息,可以直接通过网络发送给订阅该信息的客户端。
[返回值]
无。
3.1.1.3.4PS_NotificationManager
图7PS_NotificationManager
(1)staticPS_NotificationManager*instance(void);
[功能简介]
返回PS_NotificationManager单件。
[参数说明]
无。
[返回值]
返回PS_NotificationManager单件。
(2)intnotify(conststring&host,constACE_Message_Block&msg);
[功能简介]
以异步的方式向给定订阅客户发送SPMP通知消息。
PS_NotificationManager为所有的订阅客户维护一个TCP连接和一个通知消息的FIFO队列。
当通知消息的FIFO队列中待发送的消息字节数达到最大值(见PS_Configuration:
:
maxQueueSize方法)以后,本方法失败,返回-1。
否则返回0。
[参数说明]
host:
客户地址,格式为IP:
Port;
msg:
待发送的SPMP通知消息,由于消息是以异步的方式发送,所以PS_NotificationManager需要将消息复制一份(通过msg.duplicate()方法)中。
[返回值]
成功返回0,失败返回-1。
(3)intadd(conststring&host);
[功能简介]
添加订阅客户。
如果该客户已添加,则增加该客户的引用记数后直接返回0。
否则为客户创建相关的通知消息队列,同时打开用于发送通知消息的TCP连接。
[参数说明]
host:
客户地址,格式为IP:
Port。
[返回值]
成功返回0,失败返回-1。
(4)voidremove(conststring&host);
[功能简介]
删除订阅客户。
将客户的引用记数减1,如果引用记数为0,则释放与客户相关的通知消息队列,关闭TCP连接。
[参数说明]
host:
客户地址,格式为IP:
Port。
[返回值]
无。
3.1.1.3.5PS_HandlerManager
PS_HandlerManager提供SPMP命令处理器的注册/注销和查找功能。
图8PS_HandlerManager
(1)staticPS_HandlerManager*instance(void);
[功能简介]
返回PS_HandlerManager单件。
[参数说明]
无。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- IM 配置 服务器 概要 设计 文件
![提示](https://static.bingdoc.com/images/bang_tan.gif)