第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

沒(méi)有端口轉(zhuǎn)發(fā)的調(diào)度程序-工作集群

沒(méi)有端口轉(zhuǎn)發(fā)的調(diào)度程序-工作集群

Go
開(kāi)滿(mǎn)天機(jī) 2023-03-07 16:54:11
TLDR 我想重新創(chuàng)建https://github.com/KorayGocmen/scheduler-worker-grpc而無(wú)需對(duì)工作人員進(jìn)行端口轉(zhuǎn)發(fā)。我正在嘗試建立一個(gè)有競(jìng)爭(zhēng)力的編程評(píng)判服務(wù)器來(lái)評(píng)估提交的內(nèi)容,作為我學(xué)校的一個(gè)項(xiàng)目,我在那里教孩子們編程。因?yàn)樵u(píng)估的計(jì)算量很大,所以我希望有多個(gè)工作節(jié)點(diǎn)。調(diào)度程序?qū)⒔邮仗峤徊⑺鼈兎职l(fā)給工作節(jié)點(diǎn)。為了便于工人部署(因?yàn)樗鼤?huì)經(jīng)常變化),我希望工人能夠訂閱調(diào)度程序,從而成為一名工人并接受工作。worker 可能與調(diào)度程序不在同一個(gè)網(wǎng)絡(luò)上 + worker 駐留在 VM 中(也許稍后會(huì)移植到 docker 但目前存在問(wèn)題)。調(diào)度器應(yīng)該能夠知道 worker 的資源使用情況,向 worker 發(fā)送不同類(lèi)型的作業(yè)并接收結(jié)果流。我目前正在考慮使用 grpc 來(lái)解決我對(duì)工作人員和調(diào)度程序之間通信的要求。我可以創(chuàng)建多個(gè)調(diào)度程序服務(wù)方法,例如:注冊(cè)工人,接收工作流流作業(yè)結(jié)果,什么也收不到定期流工作狀態(tài),什么也沒(méi)有收到但是我更喜歡以下但idk是否可能:調(diào)度器 GRPC api:注冊(cè)一個(gè)工作人員(使工作人員 GRPC api 可用于調(diào)度程序)工人 GRPC api:開(kāi)始工作(返回工作狀態(tài)流)取消工作???獲取資源使用情況如果連接丟失,worker 應(yīng)該自動(dòng)注銷(xiāo)。所以我的問(wèn)題是...是否可以創(chuàng)建一個(gè) grpc worker api,如果該 worker 在沒(méi)有端口轉(zhuǎn)發(fā)的情況下位于 NAT 后面,則可以將其注冊(cè)到調(diào)度程序以供以后使用?其他可能不必要的信息:更糟糕的是,我有多種完全不同類(lèi)型的工作(流式傳輸交互式控制臺(tái),針對(duì)準(zhǔn)備好的測(cè)試用例執(zhí)行代碼)。我可能只是為不同的工作創(chuàng)建不同的工人。有時(shí)作業(yè)涉及在本地文件系統(tǒng)(最多 500 MB)上有大文件,這些文件通常保存在調(diào)度程序附近,因此我想將作業(yè)發(fā)送給已經(jīng)從調(diào)度程序下載特定文件的工作人員。否則將大文件下載到其中一名工人身上。在工作人員上同時(shí)擁有所有文件將占用超過(guò) 20 GB,因此我想避免它。一個(gè) worker 可以同時(shí)運(yùn)行多個(gè)作業(yè)(最多 16 個(gè))。我正在寫(xiě)系統(tǒng)。
查看完整描述

1 回答

?
MMMHUHU

TA貢獻(xiàn)1834條經(jīng)驗(yàn) 獲得超8個(gè)贊

只要只有工作人員發(fā)起連接,您就不必?fù)?dān)心 NAT。gRPC 支持任一方向(或兩者)的流式傳輸。這意味著您的所有需求都可以?xún)H使用調(diào)度程序上的一臺(tái)服務(wù)器來(lái)實(shí)現(xiàn);調(diào)度程序不需要連接回工作人員。


根據(jù)您的描述,您的服務(wù)可能如下所示:


syntax = "proto3";


import "google/protobuf/empty.proto";


service Scheduler {

    rpc GetJobs(GetJobsRequest) returns (stream GetJobsResponse) {}

    rpc ReportWorkerStatus(stream ReportWorkerStatusRequest) returns (google.protobuf.Empty) {}

    rpc ReportJobStatus(stream JobStatus) returns (stream JobAction) {}

}


enum JobType {

    JOB_TYPE_UNSPECIFIED = 0;

    JOB_TYPE_CONSOLE = 1;

    JOB_TYPE_EXEC = 2;

}


message GetJobsRequest {

    // List of job types this worker is willing to accept.

    repeated JobType types = 1;

}


message GetJobsResponse {

    string jobId = 0;

    JobType type = 1;


    string fileName = 2;

    bytes fileContent = 3;

    // etc.

}


message ReportWorkerStatusRequest {

    float cpuLoad = 0;

    uint64 availableDiskSpace = 1;

    uint64 availableMemory = 2;

    // etc.


    // List of filenames or file hashes, or whatever else you need to precisely

    // report the presence of files.

    repeated string haveFiles = 2;

}


其中大部分是偏好問(wèn)題(oneof例如,您可以使用而不是枚舉),但希望從客戶(hù)端到服務(wù)器的單個(gè)連接足以滿(mǎn)足您的要求。


維護(hù)一組可用的工作人員非常簡(jiǎn)單:


func (s *Server) GetJobs(req *pb.GetJobRequest, stream pb.Scheduler_GetJobsServer) error {

    ctx := stream.Context()


    s.scheduler.AddWorker(req)

    defer s.scheduler.RemoveWorker(req)


    for {

        job, err := s.scheduler.GetJob(ctx, req)

        switch {

        case ctx.Err() != nil: // client disconnected

            return nil

        case err != nil:

            return err

        }


        if err := stream.Send(job); err != nil {

            return err

        }

    }

}

基礎(chǔ)教程包括所有類(lèi)型流的示例,包括 Go 中的服務(wù)器和客戶(hù)端實(shí)現(xiàn)。


至于注冊(cè),這通常只是意味著創(chuàng)建某種憑證,供工作人員在與服務(wù)器通信時(shí)使用。這可能是一個(gè)隨機(jī)生成的令牌(服務(wù)器可以使用它來(lái)加載關(guān)聯(lián)的元數(shù)據(jù)),或者用戶(hù)名/密碼組合,或者 TLS 客戶(hù)端證書(shū),或類(lèi)似的。詳細(xì)信息將取決于您的基礎(chǔ)設(shè)施和設(shè)置工作人員時(shí)所需的工作流程。


查看完整回答
反對(duì) 回復(fù) 2023-03-07
  • 1 回答
  • 0 關(guān)注
  • 99 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)