一種分布式服務(wù)的實(shí)現(xiàn)方法、服務(wù)代理裝置及分布式系統(tǒng)的制作方法
【技術(shù)領(lǐng)域】
[0001]本申請(qǐng)涉及計(jì)算機(jī)技術(shù)領(lǐng)域,具體涉及一種分布式服務(wù)的實(shí)現(xiàn)方法、服務(wù)代理裝置及分布式系統(tǒng)。
【背景技術(shù)】
[0002]隨著計(jì)算機(jī)技術(shù)的發(fā)展,可以將很多計(jì)算機(jī)組合成為一個(gè)分布式系統(tǒng),通過(guò)分布式系統(tǒng)為用戶提供更好的服務(wù)。目前,分布式系統(tǒng)對(duì)外提供的服務(wù)有二類,一類是服務(wù)節(jié)點(diǎn)物理上有狀態(tài)的,即某類服務(wù)請(qǐng)求會(huì)被分配到固定的物理計(jì)算機(jī)進(jìn)行處理,另一類是服務(wù)節(jié)點(diǎn)物理上無(wú)狀態(tài),即某類服務(wù)請(qǐng)求會(huì)被隨機(jī)分配到不同的物理機(jī)器進(jìn)行處理。
[0003]然而,服務(wù)節(jié)點(diǎn)物理上有狀態(tài)這類服務(wù),一旦為某類服務(wù)請(qǐng)求服務(wù)的固定的物理計(jì)算機(jī)出現(xiàn)故障,進(jìn)行物理上的更換或修復(fù)耗時(shí)較長(zhǎng),會(huì)影響某類服務(wù)請(qǐng)求的實(shí)現(xiàn)。服務(wù)節(jié)點(diǎn)物理上無(wú)狀態(tài)這類服務(wù),會(huì)因系統(tǒng)抖動(dòng)等原因?qū)е履愁惙?wù)請(qǐng)求被多臺(tái)計(jì)算機(jī)重復(fù)處理,當(dāng)該某類服務(wù)請(qǐng)求有寫(xiě)數(shù)據(jù)操作時(shí),可能會(huì)造成數(shù)據(jù)不一致或?qū)憠臄?shù)據(jù)。
【發(fā)明內(nèi)容】
[0004]本申請(qǐng)所要解決的技術(shù)問(wèn)題在于提供一種分布式服務(wù)的實(shí)現(xiàn)方法、服務(wù)代理裝置及分布式系統(tǒng),通過(guò)根據(jù)服務(wù)請(qǐng)求信息中攜帶的用戶端標(biāo)識(shí)碼,獲取與該服務(wù)請(qǐng)求信息對(duì)應(yīng)的邏輯服務(wù)節(jié)點(diǎn)的信息,根據(jù)與邏輯服務(wù)節(jié)點(diǎn)對(duì)應(yīng)的物理服務(wù)節(jié)點(diǎn)的物理地址,查詢得到物理服務(wù)節(jié)點(diǎn),通過(guò)邏輯服務(wù)節(jié)點(diǎn)實(shí)現(xiàn)了物理服務(wù)節(jié)點(diǎn)與服務(wù)請(qǐng)求的解耦,使服務(wù)請(qǐng)求與邏輯服務(wù)節(jié)點(diǎn)之間是有狀態(tài)的,服務(wù)請(qǐng)求會(huì)被分發(fā)到固定的邏輯服務(wù)節(jié)點(diǎn),邏輯服務(wù)節(jié)點(diǎn)與物理服務(wù)節(jié)點(diǎn)之間是無(wú)狀態(tài)的,物理服務(wù)節(jié)點(diǎn)可以靈活快速變更,當(dāng)某服務(wù)請(qǐng)求的物理服務(wù)節(jié)點(diǎn)出現(xiàn)故障時(shí),可以靈活快速地變更為其他物理服務(wù)節(jié)點(diǎn),不會(huì)影響某服務(wù)請(qǐng)求的實(shí)現(xiàn);同時(shí)查詢得到的物理服務(wù)節(jié)點(diǎn)在確定其自身的通用唯一識(shí)別碼,以及與邏輯服務(wù)節(jié)點(diǎn)對(duì)應(yīng)的物理服務(wù)節(jié)點(diǎn)的通用唯一識(shí)別碼二者一致后,才執(zhí)行與該服務(wù)請(qǐng)求對(duì)應(yīng)的服務(wù),通過(guò)通用唯一識(shí)別碼有效性的驗(yàn)證,避免某服務(wù)請(qǐng)求被多個(gè)物理服務(wù)節(jié)點(diǎn)重復(fù)處理,保證與的串行化。
[0005]為了解決上述問(wèn)題,本申請(qǐng)公開(kāi)了一種分布式服務(wù)的實(shí)現(xiàn)方法,包括:接收用戶端的服務(wù)請(qǐng)求信息,其中,所述服務(wù)請(qǐng)求信息中攜帶有用戶端標(biāo)識(shí)碼;根據(jù)所述用戶端標(biāo)識(shí)碼獲取與所述服務(wù)請(qǐng)求信息對(duì)應(yīng)的邏輯服務(wù)節(jié)點(diǎn),并進(jìn)一步獲取所述邏輯服務(wù)節(jié)點(diǎn)的信息;其中,所述邏輯服務(wù)節(jié)點(diǎn)的信息包括與所述邏輯服務(wù)節(jié)點(diǎn)對(duì)應(yīng)的物理服務(wù)節(jié)點(diǎn)的物理地址以及與所述邏輯服務(wù)節(jié)點(diǎn)對(duì)應(yīng)的物理服務(wù)節(jié)點(diǎn)的通用唯一識(shí)別碼;根據(jù)所述物理地址查詢得到一物理服務(wù)節(jié)點(diǎn),將所述服務(wù)請(qǐng)求信息以及所述通用唯一識(shí)別碼發(fā)送至查詢得到的物理服務(wù)節(jié)點(diǎn);在確定所述查詢得到的物理服務(wù)節(jié)點(diǎn)自身的通用唯一識(shí)別碼與所述邏輯服務(wù)節(jié)點(diǎn)對(duì)應(yīng)的物理服務(wù)節(jié)點(diǎn)的通用唯一識(shí)別碼二者一致后,執(zhí)行與所述服務(wù)請(qǐng)求信息對(duì)應(yīng)的服務(wù)。
[0006]進(jìn)一步地,接收用戶端的服務(wù)請(qǐng)求信息之前,所述方法還包括:根據(jù)預(yù)設(shè)的總的邏輯服務(wù)節(jié)點(diǎn)的個(gè)數(shù)和預(yù)設(shè)的每個(gè)邏輯服務(wù)節(jié)點(diǎn)的名稱,從總的物理服務(wù)節(jié)點(diǎn)中獲取與每個(gè)邏輯服務(wù)節(jié)點(diǎn)對(duì)應(yīng)的物理服務(wù)節(jié)點(diǎn);其中,總的物理服務(wù)節(jié)點(diǎn)的個(gè)數(shù)大于總的邏輯服務(wù)節(jié)點(diǎn)的個(gè)數(shù);根據(jù)每個(gè)邏輯服務(wù)節(jié)點(diǎn)及其對(duì)應(yīng)的物理服務(wù)節(jié)點(diǎn),建立節(jié)點(diǎn)信息列表,其中,所述節(jié)點(diǎn)信息列表中包括每個(gè)邏輯服務(wù)節(jié)點(diǎn)的信息;將所述節(jié)點(diǎn)信息列表中每個(gè)邏輯服務(wù)節(jié)點(diǎn)的信息,分別發(fā)送至與每個(gè)邏輯服務(wù)節(jié)點(diǎn)對(duì)應(yīng)的物理服務(wù)節(jié)點(diǎn)。
[0007]進(jìn)一步地,建立節(jié)點(diǎn)信息列表之后,所述方法還包括:獲取所述節(jié)點(diǎn)信息列表;根據(jù)所述節(jié)點(diǎn)信息列表中包括的每個(gè)邏輯服務(wù)節(jié)點(diǎn)的信息,建立與每個(gè)邏輯服務(wù)節(jié)點(diǎn)對(duì)應(yīng)的槽;其中,每個(gè)槽的名稱與其對(duì)應(yīng)的邏輯服務(wù)節(jié)點(diǎn)的名稱相同,總的槽的個(gè)數(shù)與總的邏輯服務(wù)節(jié)點(diǎn)的個(gè)數(shù)相同;將每個(gè)邏輯服務(wù)節(jié)點(diǎn)的信息分別存儲(chǔ)到與每個(gè)邏輯服務(wù)節(jié)點(diǎn)對(duì)應(yīng)的槽中。
[0008]進(jìn)一步地,將每個(gè)邏輯服務(wù)節(jié)點(diǎn)的信息分別存儲(chǔ)到與每個(gè)邏輯服務(wù)節(jié)點(diǎn)對(duì)應(yīng)的槽中之后,所述方法還包括:當(dāng)所述節(jié)點(diǎn)信息列表變更后,更新槽和/或槽中存儲(chǔ)的邏輯服務(wù)節(jié)點(diǎn)的信息。
[0009]進(jìn)一步地,當(dāng)邏輯服務(wù)節(jié)點(diǎn)的名稱為順序號(hào),槽的名稱為順序號(hào)時(shí),根據(jù)所述用戶端標(biāo)識(shí)碼獲取與所述服務(wù)請(qǐng)求信息對(duì)應(yīng)的邏輯服務(wù)節(jié)點(diǎn),并進(jìn)一步獲取所述邏輯服務(wù)節(jié)點(diǎn)的信息,包括:利用預(yù)設(shè)的哈希函數(shù)對(duì)所述用戶端標(biāo)識(shí)碼進(jìn)行哈希運(yùn)算,得到哈希值;將所述哈希值對(duì)總的槽的個(gè)數(shù)的取模運(yùn)算結(jié)果,作為槽的順序號(hào),所述槽的順序號(hào)對(duì)應(yīng)的槽中存儲(chǔ)的邏輯服務(wù)節(jié)點(diǎn)的信息為與所述服務(wù)請(qǐng)求信息對(duì)應(yīng)的邏輯服務(wù)節(jié)點(diǎn)的信息;從所述槽的順序號(hào)對(duì)應(yīng)的槽中,讀取得到與所述服務(wù)請(qǐng)求信息對(duì)應(yīng)的邏輯服務(wù)節(jié)點(diǎn)的信息。
[0010]進(jìn)一步地,根據(jù)預(yù)設(shè)的總的邏輯服務(wù)節(jié)點(diǎn)的個(gè)數(shù)和預(yù)設(shè)的每個(gè)邏輯服務(wù)節(jié)點(diǎn)的名稱,從總的物理服務(wù)節(jié)點(diǎn)中獲取與每個(gè)邏輯服務(wù)節(jié)點(diǎn)對(duì)應(yīng)的物理服務(wù)節(jié)點(diǎn),包括:根據(jù)預(yù)設(shè)的總的邏輯服務(wù)節(jié)點(diǎn)的個(gè)數(shù),從總的物理服務(wù)節(jié)點(diǎn)中選取物理服務(wù)節(jié)點(diǎn)進(jìn)行啟動(dòng);其中,選取并啟動(dòng)的物理服務(wù)節(jié)點(diǎn)的個(gè)數(shù)與預(yù)設(shè)的總的邏輯服務(wù)節(jié)點(diǎn)的個(gè)數(shù)相同;將預(yù)設(shè)的每個(gè)邏輯服務(wù)節(jié)點(diǎn)的名稱,一一對(duì)應(yīng)分配給選取并啟動(dòng)的物理服務(wù)節(jié)點(diǎn)中的每個(gè)物理服務(wù)節(jié)點(diǎn),得到與每個(gè)邏輯服務(wù)節(jié)點(diǎn)對(duì)應(yīng)的物理服務(wù)節(jié)點(diǎn);或,根據(jù)預(yù)設(shè)的總的邏輯服務(wù)節(jié)點(diǎn)的個(gè)數(shù)和預(yù)設(shè)的每個(gè)邏輯服務(wù)節(jié)點(diǎn)的名稱,從總的物理服務(wù)節(jié)點(diǎn)中獲取與每個(gè)邏輯服務(wù)節(jié)點(diǎn)對(duì)應(yīng)的物理服務(wù)節(jié)點(diǎn),包括:根據(jù)預(yù)設(shè)的總的邏輯服務(wù)節(jié)點(diǎn)的個(gè)數(shù),從總的物理服務(wù)節(jié)點(diǎn)中選取物理服務(wù)節(jié)點(diǎn)進(jìn)行啟動(dòng),使得選取并啟動(dòng)的物理服務(wù)節(jié)點(diǎn)向本地發(fā)送節(jié)點(diǎn)名稱獲取信息;其中,選取并啟動(dòng)的物理服務(wù)節(jié)點(diǎn)的個(gè)數(shù)與預(yù)設(shè)的總的邏輯服務(wù)節(jié)點(diǎn)的個(gè)數(shù)相同;接收所述節(jié)點(diǎn)名稱獲取信息,并根據(jù)所述節(jié)點(diǎn)名稱獲取信息,將預(yù)設(shè)的每個(gè)邏輯服務(wù)節(jié)點(diǎn)的名稱,一一對(duì)應(yīng)分配給選取并啟動(dòng)的物理服務(wù)節(jié)點(diǎn)中的每個(gè)物理服務(wù)節(jié)點(diǎn),得到與每個(gè)邏輯服務(wù)節(jié)點(diǎn)對(duì)應(yīng)的物理服務(wù)節(jié)點(diǎn)。
[0011]進(jìn)一步地,從總的物理服務(wù)節(jié)點(diǎn)中獲取與每個(gè)邏輯服務(wù)節(jié)點(diǎn)對(duì)應(yīng)的物理服務(wù)節(jié)點(diǎn)之后還包括:監(jiān)測(cè)與每個(gè)邏輯服務(wù)節(jié)點(diǎn)對(duì)應(yīng)的物理服務(wù)節(jié)點(diǎn)的狀態(tài);根據(jù)與某個(gè)邏輯服務(wù)節(jié)點(diǎn)對(duì)應(yīng)的物理服務(wù)節(jié)點(diǎn)的狀態(tài),確定是否更換與所述某個(gè)邏輯服務(wù)節(jié)點(diǎn)對(duì)應(yīng)的物理服務(wù)節(jié)點(diǎn);如果確定更換與所述某個(gè)邏輯服務(wù)節(jié)點(diǎn)對(duì)應(yīng)的物理服務(wù)節(jié)點(diǎn),則從剩余的沒(méi)有對(duì)應(yīng)邏輯服務(wù)節(jié)點(diǎn)的物理服務(wù)節(jié)點(diǎn)中選取一物理服務(wù)節(jié)點(diǎn),用選取的物理服務(wù)節(jié)點(diǎn)替換與所述某個(gè)邏輯服務(wù)節(jié)點(diǎn)對(duì)應(yīng)的物理服務(wù)節(jié)點(diǎn)。
[0012]進(jìn)一步地,從剩余的沒(méi)有對(duì)應(yīng)邏輯服務(wù)節(jié)點(diǎn)的物理服務(wù)節(jié)點(diǎn)中選取一物理服務(wù)節(jié)點(diǎn),用選取的物理服務(wù)節(jié)點(diǎn)替換與所述某個(gè)邏輯服務(wù)節(jié)點(diǎn)對(duì)應(yīng)的物理服務(wù)節(jié)點(diǎn)之后,還包括:對(duì)所述節(jié)點(diǎn)信息列表中所述某個(gè)邏輯服務(wù)節(jié)點(diǎn)的信息進(jìn)行更新。
[0013]進(jìn)一步地,對(duì)所述節(jié)點(diǎn)信息列表中所述某個(gè)邏輯服務(wù)節(jié)點(diǎn)的信息進(jìn)行更新之后,還包括:將更新后的所述某個(gè)邏輯服務(wù)節(jié)點(diǎn)的信息發(fā)送至與所述某個(gè)邏輯服務(wù)節(jié)點(diǎn)對(duì)應(yīng)的物理服務(wù)節(jié)點(diǎn)中。
[0014]為了解決上述問(wèn)題,本申請(qǐng)還公開(kāi)了一種服務(wù)代理裝置,包括:接收單元,用于接收用戶端的服務(wù)請(qǐng)求信息,其中,所述服務(wù)請(qǐng)求信息中攜帶有用戶端標(biāo)識(shí)碼;第一獲取單元,用于根據(jù)所述用戶端標(biāo)識(shí)碼獲取與所述服務(wù)請(qǐng)求信息對(duì)應(yīng)的邏輯服務(wù)節(jié)點(diǎn),并進(jìn)一步獲取所述邏輯服務(wù)節(jié)點(diǎn)的信息;其中,所述邏輯服務(wù)節(jié)點(diǎn)的信息包括與所述邏輯服務(wù)節(jié)點(diǎn)對(duì)應(yīng)的物理服務(wù)節(jié)點(diǎn)的物理地址以及與所述邏輯服務(wù)節(jié)點(diǎn)對(duì)應(yīng)的物理服務(wù)節(jié)點(diǎn)的通用唯一識(shí)別碼;處理單元,用于根據(jù)所述物理地址查詢得到一物理服務(wù)節(jié)點(diǎn),將所述服務(wù)請(qǐng)求信息以及所述通用唯一識(shí)別碼發(fā)送至查詢得到的物理服務(wù)節(jié)點(diǎn),以使所述查詢得到的物理服務(wù)節(jié)點(diǎn)在確定其自身的通用唯一識(shí)別碼與所述邏輯服務(wù)節(jié)點(diǎn)對(duì)應(yīng)的物理服務(wù)節(jié)點(diǎn)的通用唯一識(shí)別碼二者一致后,執(zhí)行與所述服務(wù)請(qǐng)求信息對(duì)應(yīng)的服務(wù)。
[0015]進(jìn)一步地,還包括:第三獲取單元,用于獲取節(jié)點(diǎn)信息列表,所述節(jié)點(diǎn)信息列表根據(jù)每個(gè)邏輯服務(wù)節(jié)點(diǎn)及其對(duì)應(yīng)的物理服務(wù)節(jié)點(diǎn)建立,所述節(jié)點(diǎn)信息列表中包括每個(gè)邏輯服務(wù)節(jié)點(diǎn)的信息;第二建立單元,用于根據(jù)所述節(jié)點(diǎn)信息列表中包括的每個(gè)邏輯服務(wù)節(jié)點(diǎn)的信息,建立與每個(gè)邏輯服務(wù)節(jié)點(diǎn)對(duì)應(yīng)的槽;其中,每個(gè)槽的名稱與其對(duì)應(yīng)的邏輯服務(wù)節(jié)點(diǎn)的名稱相同,總的槽的個(gè)數(shù)與總的邏輯服務(wù)節(jié)點(diǎn)的個(gè)數(shù)相同;存儲(chǔ)單元,用于將每個(gè)邏輯服務(wù)節(jié)點(diǎn)的信息分別存儲(chǔ)到與每個(gè)邏輯服務(wù)節(jié)點(diǎn)對(duì)應(yīng)的槽中。
[0016]進(jìn)一步地,還包括:第一更新單元,用于當(dāng)所述節(jié)點(diǎn)信息列表變更后,更新槽和/或槽中存儲(chǔ)的邏輯服務(wù)節(jié)點(diǎn)的信息。
[0017]進(jìn)一步地,當(dāng)邏輯服務(wù)節(jié)點(diǎn)的名稱為順序號(hào),槽的名稱為順序號(hào)時(shí),所述第一獲取單元包括:哈希運(yùn)算子單元,用于利用預(yù)設(shè)的哈希函數(shù)對(duì)所述用戶端標(biāo)識(shí)碼進(jìn)行哈希運(yùn)算,得到哈希值;順序號(hào)獲取子單元,用于將所述哈希值對(duì)總的槽的個(gè)數(shù)的取模運(yùn)算結(jié)果,作為槽的順序號(hào),所述槽的順序號(hào)對(duì)應(yīng)的槽中存儲(chǔ)的邏輯服務(wù)節(jié)點(diǎn)的信息為與所述服務(wù)請(qǐng)求信息對(duì)應(yīng)的邏輯服務(wù)節(jié)點(diǎn)的信息;讀取子單元,用于從所述槽的順序號(hào)對(duì)應(yīng)的槽中,讀取得到與所述服務(wù)請(qǐng)求信息對(duì)應(yīng)的邏輯服務(wù)節(jié)點(diǎn)的信息。
[0018]為了解決上述問(wèn)題,本申請(qǐng)還公開(kāi)了一種分布式系統(tǒng),包括:服務(wù)代理裝置和物理服務(wù)節(jié)點(diǎn)集群,其中,所述服務(wù)代理裝置包括:如前所述的服務(wù)代理裝置;所述物理服務(wù)節(jié)點(diǎn)集群中包括多個(gè)物理服務(wù)節(jié)點(diǎn),每個(gè)物理服務(wù)節(jié)點(diǎn)中部署有與所述服務(wù)請(qǐng)求信息對(duì)應(yīng)的服務(wù);所述多個(gè)物理服務(wù)節(jié)點(diǎn)中包括:查詢得到的物理服務(wù)節(jié)點(diǎn),用于接收所述處理單元發(fā)送的與所述邏輯服務(wù)節(jié)點(diǎn)對(duì)應(yīng)的物理服務(wù)節(jié)點(diǎn)的通用唯一識(shí)別碼,確定其自身的通用唯一識(shí)別碼與所述邏輯服務(wù)節(jié)點(diǎn)對(duì)應(yīng)的物理服務(wù)節(jié)點(diǎn)的通用唯一識(shí)別碼二者是否一致,當(dāng)確定二者一致后,執(zhí)行與所述服務(wù)請(qǐng)求信息對(duì)應(yīng)的服務(wù)。
[0019]進(jìn)一步地,還包括:集群管理服務(wù)器;所述集群管理服務(wù)器包括:第二獲取單元,用于根據(jù)預(yù)設(shè)的總的邏輯服務(wù)節(jié)點(diǎn)的個(gè)數(shù)和預(yù)設(shè)的每個(gè)邏輯服務(wù)節(jié)點(diǎn)的名稱,從總的物理服務(wù)節(jié)點(diǎn)中獲取與每個(gè)邏輯服務(wù)節(jié)點(diǎn)對(duì)應(yīng)的物理服務(wù)節(jié)點(diǎn);其中,總的物理服務(wù)節(jié)點(diǎn)的個(gè)數(shù)大于總的邏輯服務(wù)節(jié)點(diǎn)的個(gè)數(shù);第一建立單元,用于根據(jù)每個(gè)邏輯服務(wù)節(jié)點(diǎn)及其對(duì)應(yīng)的物理服務(wù)節(jié)點(diǎn),建立節(jié)點(diǎn)信息列表,其中,所述節(jié)點(diǎn)信息列表中包括每個(gè)邏輯服務(wù)節(jié)點(diǎn)的信息;第一發(fā)送單元,用于將所述節(jié)點(diǎn)信息列表中每個(gè)邏輯服務(wù)節(jié)點(diǎn)的信息,分別發(fā)送至與每個(gè)邏輯服務(wù)節(jié)點(diǎn)對(duì)應(yīng)的物理服務(wù)節(jié)點(diǎn)。
[0020]進(jìn)一步地,所述第二獲取單元包括:第一啟動(dòng)子單元,用于根據(jù)預(yù)設(shè)的總的邏輯服務(wù)節(jié)點(diǎn)的個(gè)數(shù),從總的物理服務(wù)節(jié)點(diǎn)中選取物理服務(wù)節(jié)點(diǎn)進(jìn)行啟動(dòng);其中,選取并啟動(dòng)的物理服務(wù)節(jié)點(diǎn)的個(gè)數(shù)與預(yù)設(shè)的