zoukankan      html  css  js  c++  java
  • 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 可复用的通信框架(序) 

     

     


     

     

  • 相关阅读:
    C#数组
    找不到命名空间命名空间:System.Windows.Forms
    WebService 的创建,部署和使用
    动态调用webservice时 ServiceDescriptionImporter类在vs2010无法引用的解决方法
    SQL语句新建表,同时添加主键、索引、约束
    SQLServer Ansi_Padding的用法
    浅析jQuery删除节点的三个方法
    C# JSON 序列化和反序列化——JavaScriptSerializer实现
    命令行启动tomcat,怎么配置
    ojective-c convert to pascal pattern
  • 原文地址:https://www.cnblogs.com/zhuweisky/p/357393.html
Copyright © 2011-2022 走看看