端的時間戳,則向所述指定服務(wù)器發(fā)送確認(rèn)消息,并將所述接收到的資源請求加入所述本端的請求隊列中。
[0061]本公開的實施例提供的技術(shù)方案可以包括以下有益效果:
[0062]通過觸發(fā)了請求指定資源的事件時,向其他指定服務(wù)器發(fā)送資源請求,以使其他指定服務(wù)器根據(jù)資源請求中攜帶的時間戳確認(rèn)其他指定服務(wù)器的時間戳小于資源請求中攜帶的時間戳;接收到其他指定服務(wù)器返回的確認(rèn)消息,并且根據(jù)時間戳排序后資源請求在本端的請求隊列中位于首位時,則執(zhí)行資源請求。實現(xiàn)了分布式系統(tǒng)中多節(jié)點(diǎn)之間的同步以及互斥控制,提高了分布式系統(tǒng)中資源請求的準(zhǔn)確性以及運(yùn)行效率。
[0063]應(yīng)當(dāng)理解的是,以上的一般描述和后文的細(xì)節(jié)描述僅是示例性和解釋性的,并不能限制本公開。
【附圖說明】
[0064]此處的附圖被并入說明書中并構(gòu)成本說明書的一部分,示出了符合本公開的實施例,并與說明書一起用于解釋本公開的原理。
[0065]圖1是根據(jù)一示例性實施例示出的一種請求資源的方法的流程圖;
[0066]圖2是根據(jù)一示例性實施例示出的一種請求資源的方法的流程圖;
[0067]圖3是根據(jù)一示例性實施例示出的一種請求資源的方法中釋放資源的方法的流程圖;
[0068]圖4是根據(jù)一示例性實施例示出的一種請求資源的裝置的框圖;
[0069]圖5是根據(jù)一示例性實施例示出的一種請求資源的裝置的框圖;
[0070]圖6是根據(jù)一示例性實施例示出的一種請求資源的裝置的框圖(服務(wù)器的一般結(jié)構(gòu))。
【具體實施方式】
[0071]為使本公開的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合附圖對本公開實施方式作進(jìn)一步地詳細(xì)描述。
[0072]本公開一示例性實施例提供了一種請求資源的方法,本方法實施例應(yīng)用于服務(wù)器中,參見圖1,方法流程包括:
[0073]在步驟101中,當(dāng)觸發(fā)了請求指定資源的事件時,根據(jù)本端的時間戳生成資源請求;
[0074]在步驟102中,將資源請求加入本端的請求隊列中,并向分布式系統(tǒng)中各指定服務(wù)器發(fā)送資源請求;
[0075]在步驟103中,如果接收到各指定服務(wù)器針對資源請求返回的確認(rèn)消息,并且根據(jù)時間戳排序后資源請求在本端的請求隊列中位于首位時,則執(zhí)行資源請求;確認(rèn)消息用于確認(rèn)各指定服務(wù)器中的時間戳大于本端的時間戳。
[0076]本公開實施例通過觸發(fā)了請求指定資源的事件時,向其他指定服務(wù)器發(fā)送資源請求,以使其他指定服務(wù)器根據(jù)資源請求中攜帶的時間戳確認(rèn)其他指定服務(wù)器的時間戳小于資源請求中攜帶的時間戳;接收到其他指定服務(wù)器返回的確認(rèn)消息,并且根據(jù)時間戳排序后資源請求在本端的請求隊列中位于首位時,則執(zhí)行資源請求。實現(xiàn)了分布式系統(tǒng)中多節(jié)點(diǎn)之間的同步以及互斥控制,提高了分布式系統(tǒng)中資源請求的準(zhǔn)確性以及運(yùn)行效率。
[0077]本公開另一示例性實施例提供了一種請求資源的方法,本方法實施例應(yīng)用于服務(wù)器中,參見圖2。
[0078]需要說明的是,本公開實施例以第一指定服務(wù)器和第二指定服務(wù)器為例,對分布式系統(tǒng)中多節(jié)點(diǎn)請求資源時并發(fā)控制的方式進(jìn)行說明。其中,第二指定服務(wù)器為分布式系統(tǒng)中除第一指定服務(wù)器以外其他各指定服務(wù)器中的任意一臺服務(wù)器。
[0079]其中,該方法流程包括:
[0080]在步驟201中,當(dāng)觸發(fā)了請求指定資源的事件時,根據(jù)本端的時間戳生成資源請求。
[0081]其中,請求指定資源的事件可以包括但不限于以下情況:
[0082]第一種情況:第一指定服務(wù)器接收到終端發(fā)送的請求后向其他指定服務(wù)器請求資源的事件;
[0083]第二種情況:第一指定服務(wù)器接收到分布式系統(tǒng)中其他指定服務(wù)器請求資源的事件。其中,其他指定服務(wù)器為非第二指定服務(wù)器以外的指定服務(wù)器。
[0084]針對第一種情況,例如:分布式系統(tǒng)中包括多個前端代理服務(wù)器,用于接收終端發(fā)送的請求;分布式系統(tǒng)中還包括一個驗證服務(wù)器,用于驗證終端發(fā)送的請求中的驗證碼是否有效;分布式系統(tǒng)中還包括一個日志服務(wù)器,用于記錄各分布式系統(tǒng)中每一個服務(wù)器所進(jìn)行的任何一項操作。某一個前端代理服務(wù)器為第一指定服務(wù)器,該第一指定服務(wù)器接收到終端發(fā)送的買書請求,其中該請求中還攜帶了優(yōu)惠碼;此時第一指定服務(wù)器接收到該請求時,會觸發(fā)請求指定資源的事件,該請求指定資源的事件為向日志服務(wù)器請求記錄本次第一指定服務(wù)器操作的事件;其中,日志服務(wù)器為其他指定服務(wù)器。
[0085]針對第二種情況,例如:第一指定服務(wù)器將終端發(fā)送的買書請求中的優(yōu)惠碼發(fā)送給驗證服務(wù)器用于驗證優(yōu)惠碼之后,驗證服務(wù)器會觸發(fā)請求指定資源的事件,該請求指定資源的事件為向日志服務(wù)器請求記錄本次驗證服務(wù)器進(jìn)行驗證的事件;其中,驗證服務(wù)器為其他指定服務(wù)器。
[0086]時間戳為分布式系統(tǒng)中各指定服務(wù)器維護(hù)的用于記錄自身執(zhí)行任務(wù)數(shù)量的計數(shù)器,各指定服務(wù)器中的時間戳可以設(shè)置O為初始值,在本公開實施例中用Tm來表示時間戳。每當(dāng)執(zhí)行完畢針對請求指定資源的請求時可以對本端的時間戳進(jìn)行累積操作,即進(jìn)行加一操作。另外,如果接收到其他指定服務(wù)器中任意一個服務(wù)器發(fā)送的消息時,根據(jù)消息中攜帶的對方服務(wù)器的時間戳與本端的時間戳進(jìn)行對比,選取最大的一個時間戳進(jìn)行累積操作來更新本端的時間戳。
[0087]其中,需要根據(jù)第一指定服務(wù)器中處理請求指定資源的進(jìn)程的進(jìn)程標(biāo)識(Pi)以及第一指定服務(wù)器當(dāng)前的時間戳共同生成第一請求,相應(yīng)的,第一請求中攜帶有(Tm1, Pi)。
[0088]可選的,還可以通過第一指定服務(wù)器的服務(wù)器標(biāo)識替代進(jìn)程標(biāo)識生成第一請求,即Pi可以為第一指定服務(wù)器的服務(wù)器標(biāo)識。
[0089]在步驟202中,將資源請求加入本端的請求隊列中,并向分布式系統(tǒng)中各指定服務(wù)器發(fā)送資源請求。
[0090]其中,分布式系統(tǒng)中各指定服務(wù)器維護(hù)自身用于請求指定資源的一個請求隊列。各指定服務(wù)器會將請求加入該請求隊列中,并根據(jù)每個請求中的時間戳進(jìn)行排序,根據(jù)從小到大的排列順序來執(zhí)行請求隊列中各個請求。
[0091]相應(yīng)的,時間戳越小的請求在請求隊列中的排序越靠前,因此時間戳越小的請求也會被越早的執(zhí)行。
[0092]各指定服務(wù)器以步驟201中的例子為例進(jìn)行說明,其中各指定服務(wù)器可以包括分布式系統(tǒng)中各個前端代理服務(wù)器和驗證服務(wù)器。
[0093]在步驟203中,第二指定服務(wù)器接收分布式系統(tǒng)中的第一指定服務(wù)器發(fā)送的資源請求。
[0094]其中,第二指定服務(wù)器中處理請求指定資源的進(jìn)程的進(jìn)程標(biāo)識(Pj)。
[0095]在步驟204中,第二指定服務(wù)器確定本端的請求隊列中是否存在本端觸發(fā)的資源請求。
[0096]其中,本端觸發(fā)的請求中,需要攜帶有(Tm2,Pj)。如果存在則執(zhí)行步驟205,如果不存在則執(zhí)行步驟207。
[0097]在步驟205中,如果第二指定服務(wù)器的請求隊列中存在本端觸發(fā)的資源請求,則確定接收到的資源請求中攜帶的時間戳是否小于第二指定服務(wù)器的時間戳。
[0098]即確定!^是否小于Tm 2。
[0099]在步驟206中,如果接收到的資源請求中攜帶的時間戳小于第二指定服務(wù)器的時間戳,則向第一指定服務(wù)器發(fā)送確認(rèn)消息,并將接收到的資源請求加入第二指定服務(wù)器