1.節(jié)點(diǎn)角色I(xiàn)D
三種節(jié)點(diǎn),Scheduler節(jié)點(diǎn)只有一個堕扶,多個Worker和多個Server可以組成一個Group,因此有WorkerGroup和ServerGroup;還有Worker節(jié)點(diǎn)和Server節(jié)點(diǎn)塞栅。每個節(jié)點(diǎn)以及每一個Group都有唯一確定的ID。Scheduler腔丧、ServerGroup放椰、WorkerGroup節(jié)點(diǎn)ID確定如下:
static const int kScheduler = 1;
static const int kServerGroup = 2;
static const int kWorkerGroup = 4;
1作烟、2、4的二進(jìn)制表示分別為:001砾医、010拿撩、001。這樣可以做Group之間的合并如蚜,例如要和ServerGroup和WorkerGroup發(fā)信息压恒,只需要destination node id設(shè)為2+4=6。
1-7用來表示節(jié)點(diǎn)的組合错邦,用以廣播消息探赫。單個節(jié)點(diǎn)的ID從8開始,用以發(fā)送點(diǎn)對點(diǎn)信息兴猩。
單個Server和單個Worker節(jié)點(diǎn)從自己的rank(0期吓、1早歇、2……)轉(zhuǎn)換到其ID:
static inline int WorkerRankToID(int rank) {
return rank * 2 + 9;
}
static inline int ServerRankToID(int rank) {
return rank * 2 + 8;
}
從ID到其rank轉(zhuǎn)換:
static inline int IDtoRank(int id) {
return std::max((id - 8) / 2, 0);
}
Postoffice中td::unordered_map<int, std::vector<int>> node_ids_保存了Node/NodeGroup與連接節(jié)點(diǎn)集合的對應(yīng)關(guān)系倾芝。
Start方法:
(1)通過init_stage_控制是否需要初始化,如果已經(jīng)初始化則跳過箭跳;
如果未初始化晨另,則調(diào)用InitEnvironment進(jìn)行環(huán)境初始化,創(chuàng)建van_谱姓,獲取num_workers_與num_servers_借尿,并設(shè)置當(dāng)前節(jié)點(diǎn)角色,設(shè)定verbose屉来;根據(jù)num_workers_和num_serverse_信息路翻,填充節(jié)點(diǎn)組( kWorkerGroup, kServerGroup, kScheduler, kWorkerGroup + kServerGroup, kWorkerGroup+kScheduler, kServerGroup+kScheduler, kWorkerGroup + kServerGroup + kScheduler)包含的節(jié)點(diǎn)信息以初始化node_ids_;
(2)調(diào)用van_->Start(customer_id);
從環(huán)境中獲取獲取scheduler的主機(jī)名茄靠、端口茂契、角色、ID慨绳,并根據(jù)postoffice的is_scheduler()判斷當(dāng)前節(jié)點(diǎn)角色是否是scheduler掉冶;如果是則設(shè)置van的my_node_信息為scheduler信息;否則設(shè)置van的my_node_信息為當(dāng)前節(jié)點(diǎn)的IP脐雪、端口厌小、角色,ID設(shè)置為默認(rèn)空待后面scheduler分配后修改战秋,并設(shè)置van的customer_id璧亚;然后綁定本地端口,并連接至scheduler節(jié)點(diǎn)脂信;啟動接收線程癣蟋;下面對于非scheduler節(jié)點(diǎn)拐袜,給scheduler節(jié)點(diǎn)發(fā)送注冊節(jié)點(diǎn)控制消息;等待ready或超時梢薪,然后根據(jù)環(huán)境配置確定是否創(chuàng)建resender_蹬铺,如果不是scheduler節(jié)點(diǎn)則啟動心跳線程;
(3)記錄啟動時間秉撇,設(shè)置Barrier(customer_id, kWorkerGroup + kServerGroup + kScheduler)甜攀;