分布式系统[英] Distributed System

问题描述

我希望在Java中创建一个分布式框架,并需要一些帮助来整理下面我的pseudocode的实现客户/经理/工人情况.

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中).

推荐答案

  • q.我如何区分客户端连接和工人连接?
  • a.使用两个端口,一个端口来收听工人的联系,一个端口.
  • q.如何跟踪当前连接的工人数量?
  • a.每次工人连接/断开连接时,都有一个注册机制(也许在工人名单中)进行注册/进行检查.

其他推荐答案

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

我想您可以定义某些协议,我的意思是消息的格式/语义,MSG类型可能会有所帮助.另外,对于分布式系统,FIFO不能拱顶,我想您应该将某些机制用作序列NUM,逻辑时钟来照顾请求和响应之间的匹配.

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

首先,可以考虑到登录和注销,但是,并非总是可能的,尤其是注销;其次,使用超时连接错误,以在发送后崩溃,可能会有一些阈值或" getResult"消息;第三,关于DS,我认为您最好应用一些选举算法来确保总有工人.

本文地址:https://www.itbaoku.cn/post/978354.html