分布式系统

时间:2011-11-25 17:56:42

标签: java frameworks distributed

我希望用Java创建一个分布式框架,需要一些帮助来整理客户端/经理/工作人员情况的实现,如下面我的伪代码所述。

Manager
BEGIN
    WHILE(true)     
        RECEIVE message FROM client
            IF (worker_connections > 0) THEN            
            FOR (i=0;i<worker_connections;i++) 
                SEND message TO worker[i]
            FOR (i=0;i<worker_connections;i++) 
                RECIEVE result[i] FROM worker[i]             
            SEND merge(result[]) TO client
            ELSE            
            SEND "No workers available" TO client
            END IF
    END WHILE
END

Client
BEGIN
    RECEIVE message FROM user
    SEND message TO manager
    RECEIVE message FROM manager
END

Worker
BEGIN
    WHILE(true)
        RECEIVE message FROM manager
         result = doSomething(message)
         SEND result TO manager
    END WHILE
END

到目前为止,我已经实现了伪代码中描述的客户端,但我遇到了经理/工作人员部分的问题,所以目前客户端只收到没有工人可用的消息。管理器可以接受多个连接,每个连接都作为线程运行但是如何区分客户端连接和工作者连接?如何跟踪当前连接的工作人员数量?

客户端,经理和工作人员是不同机器的代表,但我只在一台机器上开发(用Java)。

2 个答案:

答案 0 :(得分:2)

  • Q值。如何区分客户端连接和工作者连接?
  • 甲。使用两个端口,一个用于监听来自工作人员的连接,另一个来自客户端。
  • Q值。如何跟踪当前连接的工作人员数量?
  • 甲。每次工作人员连接/断开连接时,都要有注册机制(可能在工作人员列表中)注册/取消注册。

答案 1 :(得分:1)

问:管理员可以接受多个连接,每个连接都作为线程运行但是如何区分客户端连接和工作者连接?

我想你可以定义一些协议,我的意思是消息的格式/语义,msg类型可能会有所帮助。另外,对于分布式系统,FIFO不能是拱形的,我猜你应该使用一些机制作为序列号,逻辑时钟来处理请求和响应之间的匹配。

问:如何跟踪当前连接的工作人员数量?

首先,可以考虑登录和注销,但并非总是可行,尤其是注销;第二,使用超时连接错误,发送后崩溃,可能有一些阈值,或者&#34; getResult&#34;信息;第三,对于DS,我认为你最好应用一些选举算法来确保总有工人。