Skip to content

ClusterDesign

李志强 edited this page May 22, 2017 · 5 revisions

概述

  1. NPL集群是一个为每个NPL用户提供云计算的应用。它由许多台计算机组成的集群发挥作用,因此我们需要有一个管理者去管理整个集群的硬件和NPL应用进程,它就是NPL Cluster Manager。
  2. 在一个NPL集群中,往往有许多台计算机,每台计算机都可以承担用户的计算任务,因此每台计算机都可以作为一个计算节点。
  3. 考虑到有许多的任务需要分配到多台计算机上,于是集群控制器就显得十分必要。因此在集群中必须要有一个控制节点,它作为整个集群的调度者,并且是集群初始化的条件。
  4. 基于以上的假设,提出以下网络结构,集群中的每台计算机都是互联的,并且每台计算机都作为计算节点,同时也作为控制节点,每一个控制节点都有控制台,用于查看集群中每台计算机资源的消耗情况和进程的运行情况。
  5. 每个节点有一个节点列表(NodeList),用于节点之间的相互通信。可以通过修改节点列表往集群中增加节点。

节点设置和集群初始化

  1. 每个计算节点都必须安装NPLRuntime

    git clone https://github.com/LiXizhi/NPLRuntime.git
    git submodule init
    git submodule update
    ./build_linux.sh
    
  2. 每个节点同时作为计算节点和控制节点,同时开启一个NodeServer(即NetServer)和一个NodeClient(即NetClient)

  3. NodeServer的作用,当控制节点向自身节点请求资源和日志信息时,用于返回自身节点的计算资源和日志信息;并且返回用户请求执行的指令结果; NodeServer.lua

    HostName = "node1",
    IP = " ",
    NodeList = {},
    CPU = 0,
    Memory = 0,
    Disk = 0,
    Network = 0,
    ProcessList = {},
    LogList = {},
    
    local function activate()
        NPL.StartNetServer("127.0.0.1", "60001");
        local worker = NPL.CreateRuntimeState(rts_name, 0);
        worker:Start();
        if(msg and msg == ... )
            return ...
        end
    end
    NPL.this(activate)
    
  4. NodeClient的作用,作为控制节点向NodeList中所有节点请求其资源和日志信息 NodeClient.lua

    local function activate()
        NPL.StartNetServer("0", "0");
        NPL.AddNPLRuntimeAddress({host="127.0.0.1", port="60001", nid="simpleserver"})
        local res = NPL.activate(string.format("(%s)%s:...", msg.rts_name, msg.nid or msg.tid), {TestCase = "TP", rts_name = msg.rts_name, data=msg.data})
    
    end
    NPL.this(activate)
    
Clone this wiki locally