ESFramework介绍之(15)-- IRAS

    每个城市都对应着自己的AS,每个AS都有一组FS为之服务,而所有的AS都由一个IRAS联系/管理起来(回顾)。前面我们已经提到,所有的FS都可以是动态添加/移除的,并且FS的地址也是自由可变的。同样,所有AS也都是可以动态添加/移除的,并且AS的地址也是可变的(这里AS与IRAS的机制同上文介绍的FS与AS之间的机制一样)。但是,唯一不能随便变化的是IRAS的地址。这是因为,所有终端连的第一个服务器就是IRAS,然后从IRAS获取目的AS的地址,这样才去连接目的AS请求服务。所以,如果IRAS的地址一改变,意味着所有终端的配置文件中的IRAS地址信息都得修改,这个工作是很麻烦的。所以,最好请保证IRAS的地址不变。

    IRAS的主要职责有三点:
(1) 管理所有在线的AS
    每个AS启动时,都通过IRAS发布的远程接口把自己的地址等信息注册到IRAS,当AS退出时,也同样通知IRAS。并且,AS也需要定时发“Check消息”给IRAS表明自己在线。这样,IRAS上就记录了所有在线AS的地址。
    我们看一下这种情况:当某个终端连上武汉AS,但是它却发送了一个请求上海的数据的请求,武汉AS无法处理这个请求,于是,武汉AS向IRAS询问上海AS的地址,当获取上海AS地址后,武汉AS会将该请求转发给上海AS处理。AS与IRAS之间,AS与AS之间的通信全部通过远程调用的方式进行。下面给出IRAS发布的远程服务接口:

 1     public interface IIrasRemotingService_4As
 2     {
 3         //AS注册、注销
 4         void RegisterAppServer(ServerInformation asInfo) ;
 5         void ReviseServiceList(int serverID ,ArrayList serviceList) ;
 6         void UnRegisterAppServer(int serverID);
 7         void CheckMySelf(ServerInformation asInfo); //传递冗余信息,用以保证稳定通信        
 8     
 9         string GetAppServerIp(int cityCode) ;        
10         ServerInformation GetAppServerDataByCityCode(int cityCode) ;
11     }

 
(2) 为终端提供跨区域的功能服务
    比如,有些请求不是某个特定的AS能处理的,而是需要将某几个AS协调起来共同才能完成,这样的请求通常是跨区域请求,比如跨区域的路径规划服务,可能会跨越广州市、深圳市等。这个时候,IRAS充当的角色就是这样的协调者,首先IRAS将跨区域的请求分解成几个单区域的请求分别交给对应的AS处理,然后把所有的处理结果组合起来。当然,这之外可能还有更多的工作要做。

(3) 为终端提供非区域基本请求
    比如终端连上IRAS后,请求某个AS的地址信息等。

    注意,IRAS为终端提供服务仍然是通过Udp/Tcp进行的,仍然可以复用AS/FS使用的网络组件。
    从前面的介绍我们已经想到,IRAS的运行必须非常稳定,它是ESF平台上的核心节点。

    最后说一下当网络出现故障后恢复或服务器(AS或IRAS)重启后,IRAS中保存的AS的动态信息如何重建?分为三种情况:
(1)某个AS重启:该AS向IRAS发送“我启动了”的消息,该消息中必须包含该AS的详细信息。
(2)IRAS重启:通过AS传递给IRAS的定时Check消息,Check消息中必须包含AS的详细信息。
(3)网络断开后恢复:同(2)。

    通过前面一系列的文章的介绍,我们已经将ESF平台上的三种服务器FS、AS、IRAS的主要功能、职责等概念了解的一些了。后面的文章我们会继续深入这些细节定义,并使之“标准化”,以融入到ESFramework框架内,使其高度可复用。感谢继续关注!

上一篇文章:ESFramework介绍之(14)-- AS与FS通信方案

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

 

 


 

 

posted @ 2006-03-24 09:51  zhuweisky  阅读(2393)  评论(0编辑  收藏  举报