連續(xù)序號生成系統(tǒng)和方法
【專利摘要】本發(fā)明提出一種連續(xù)序號生成系統(tǒng)和方法,其中該系統(tǒng)包括:N個服務器,N個服務器之間相互連接,每個服務器包括序號保持文件和接收緩存文件,其中,N為正整數(shù),序號保持文件用于存儲當前最大序號,接收緩存文件用于接收其他服務器發(fā)送的同步信號,同步信號中包括其他服務器的當前最大序號,當?shù)贛個服務器接收到序號分配請求之后,其中,M大于0小于等于N,第M個服務器用于:獲取第M個服務器中的當前最大序號;根據(jù)當前最大序號生成新序號并通過序號分配響應反饋;以及第M個服務器向其他服務器發(fā)送同步信號,同步信號具有新序號。本發(fā)明實施例的系統(tǒng),實現(xiàn)了分布式環(huán)境中高效可靠地產生連續(xù)序號,提高了可用性。
【專利說明】連續(xù)序號生成系統(tǒng)和方法
【技術領域】
[0001]本發(fā)明涉及網(wǎng)絡【技術領域】,尤其涉及一種連續(xù)序號生成系統(tǒng)和方法。
【背景技術】
[0002]隨著互聯(lián)網(wǎng)的快速發(fā)展,越來越多的應用場景中使用序號生成器生成連續(xù)序號,例如,支付產品的訂單號、物流的運單號、注冊用戶的賬號id(Identity,身份標識號碼)等。目前,連續(xù)序號生成的主要方法為使用單臺服務器生成連續(xù)序號,例如,當客戶端向服務器發(fā)送新序號申請請求時,首先,服務器打開本地文件中保存的上次產生的序號,再將其值自增,之后,將新序號存回文件中并響應至客戶端,以實現(xiàn)連續(xù)序號的產生。
[0003]目前存在的問題是,如果本臺服務器一旦發(fā)生故障,整個服務無法使用,例如,月艮務器宕機、磁盤永久損壞等,嚴重影響服務的正常運行,可用性差。
【發(fā)明內容】
[0004]本發(fā)明旨在至少解決上述技術問題之一。
[0005]為此,本發(fā)明的第一個目的在于提出一種連續(xù)序號生成系統(tǒng)。該系統(tǒng)實現(xiàn)了分布式環(huán)境中高效可靠地產生連續(xù)序號,此外,當部分服務崩潰無法啟動或宕機時,可切換至其他服務器以繼續(xù)提供服務,無需人工干預,提高了可用性。
[0006]本發(fā)明的第二個目的在于提出一種連續(xù)序號生成方法。
[0007]為了實現(xiàn)上述目的,本發(fā)明第一方面實施例的連續(xù)序號生成系統(tǒng),包括:N個服務器,所述N個服務器之間相互連接,每個所述服務器包括序號保持文件和接收緩存文件,其中,所述N為正整數(shù),所述序號保持文件用于存儲當前最大序號,所述接收緩存文件用于接收其他服務器發(fā)送的同步信號,所述同步信號中包括其他服務器的當前最大序號,當?shù)贛個服務器接收到序號分配請求之后,其中,所述M大于O小于等于N,所述第M個服務器用于:獲取所述第M個服務器中的當前最大序號;根據(jù)所述當前最大序號生成新序號并通過序號分配響應反饋;以及所述第M個服務器向其他服務器發(fā)送同步信號,所述同步信號具有所述新序號。
[0008]本發(fā)明實施例的連續(xù)序號生成系統(tǒng),可通過獲取第M個服務器中的序號保持文件中的當前最大序號,并根據(jù)當前最大序號生成新序號并通過序號分配響應反饋,第M個服務器向其他服務器發(fā)送具有新序號的同步信號,以使得其他服務器更新自身存儲的當前最大序號,至少具有以下優(yōu)點:(1)實現(xiàn)了分布式環(huán)境中高效可靠地產生連續(xù)序號,具有高并發(fā)、高可用性、高度容災性;(2)當一臺服務崩潰無法啟動或巖機時,可通過keepalived自動切換至其他服務器,由其他服務器繼續(xù)提供服務,無需人工干預;(3)在任何時刻、任何一臺服務器出現(xiàn)問題,都不影響整個服務,不會產生重復序列;(4)產生輕度網(wǎng)絡分割時,也不會影響服務;(5)生成的序列嚴格遞增,不會浪費。
[0009]為了實現(xiàn)上述目的,本發(fā)明第二方面實施例的連續(xù)序號生成方法包括:服務器為N個,所述N個服務器之間相互連接,每個所述服務器包括序號保持文件和接收緩存文件,其中,所述N為正整數(shù),所述序號保持文件用于存儲當前最大序號,所述接收緩存文件用于接收其他服務器發(fā)送的同步信號,所述同步信號中包括其他服務器的當前最大序號,當?shù)贛個服務器接收到序號分配請求之后,其中,所述M大于O小于等于N,所述方法包括以下步驟:所述第M個服務器獲取所述第M個服務器中的當前最大序號;所述第M個服務器根據(jù)所述當前最大序號生成新序號并通過序號分配響應反饋;以及所述第M個服務器向其他服務器發(fā)送同步信號,所述同步信號具有所述新序號。
[0010]本發(fā)明實施例的連續(xù)序號生成方法,可通過獲取第M個服務器中的序號保持文件中的當前最大序號,并根據(jù)當前最大序號生成新序號并通過序號分配響應反饋,第M個服務器向其他服務器發(fā)送具有新序號的同步信號,以使得其他服務器更新自身存儲的當前最大序號,至少具有以下優(yōu)點:(1)實現(xiàn)了分布式環(huán)境中高效可靠地產生連續(xù)序號,具有高并發(fā)、高可用性、高度容災性;(2)當一臺服務崩潰無法啟動或巖機時,可通過keepalived自動切換至其他服務器,由其他服務器繼續(xù)提供服務,無需人工干預;(3)在任何時刻、任何一臺服務器出現(xiàn)問題,都不影響整個服務,不會產生重復序列;(4)產生輕度網(wǎng)絡分割時,也不會影響服務;(5)生成的序列嚴格遞增,不會浪費。
[0011]本發(fā)明附加的方面和優(yōu)點將在下面的描述中部分給出,部分將從下面的描述中變得明顯,或通過本發(fā)明的實踐了解到。
【專利附圖】
【附圖說明】
[0012]本發(fā)明上述的和/或附加的方面和優(yōu)點從下面結合附圖對實施例的描述中將變得明顯和容易理解,其中,
[0013]圖1是根據(jù)本發(fā)明一個實施例的連續(xù)序號生成系統(tǒng)的結構示意圖;
[0014]圖2是根據(jù)本發(fā)明一個實施例的連續(xù)序號生成方法的流程圖;
[0015]圖3是根據(jù)本發(fā)明一個具體實施例的連續(xù)序號生成方法的流程圖。
【具體實施方式】
[0016]下面詳細描述本發(fā)明的實施例,所述實施例的示例在附圖中示出,其中自始至終相同或類似的標號表示相同或類似的元件或具有相同或類似功能的元件。下面通過參考附圖描述的實施例是示例性的,僅用于解釋本發(fā)明,而不能理解為對本發(fā)明的限制。相反,本發(fā)明的實施例包括落入所附加權利要求書的精神和內涵范圍內的所有變化、修改和等同物。
[0017]在本發(fā)明的描述中,需要理解的是,術語“第一”、“第二”等僅用于描述目的,而不能理解為指示或暗示相對重要性。在本發(fā)明的描述中,需要說明的是,除非另有明確的規(guī)定和限定,術語“相連”、“連接”應做廣義理解,例如,可以是固定連接,也可以是可拆卸連接,或一體地連接;可以是機械連接,也可以是電連接;可以是直接相連,也可以通過中間媒介間接相連。對于本領域的普通技術人員而言,可以具體情況理解上述術語在本發(fā)明中的具體含義。此外,在本發(fā)明的描述中,除非另有說明,“多個”的含義是兩個或兩個以上。
[0018]流程圖中或在此以其他方式描述的任何過程或方法描述可以被理解為,表示包括一個或更多個用于實現(xiàn)特定邏輯功能或過程的步驟的可執(zhí)行指令的代碼的模塊、片段或部分,并且本發(fā)明的優(yōu)選實施方式的范圍包括另外的實現(xiàn),其中可以不按所示出或討論的順序,包括根據(jù)所涉及的功能按基本同時的方式或按相反的順序,來執(zhí)行功能,這應被本發(fā)明的實施例所屬【技術領域】的技術人員所理解。
[0019]為了解決目前只有一臺服務器生成連續(xù)序號時,一旦該服務器發(fā)生故障時,影響整個服務的正常運行,可用性差的問題,本發(fā)明提出了一種連續(xù)序號生成系統(tǒng)和方法,下面參考附圖描述根據(jù)本發(fā)明實施例的連續(xù)序號生成系統(tǒng)和方法。
[0020]一種連續(xù)序號生成系統(tǒng),包括:N個服務器,N個服務器之間相互連接,每個服務器包括序號保持文件和接收緩存文件,其中,N為正整數(shù),序號保持文件用于存儲當前最大序號,接收緩存文件用于接收其他服務器發(fā)送的同步信號,同步信號中包括其他服務器的當前最大序號,當?shù)贛個服務器接收到序號分配請求之后,其中,M大于O小于等于N,第M個服務器用于:獲取第M個服務器中的當前最大序號;根據(jù)當前最大序號生成新序號并通過序號分配響應反饋;以及第M個服務器向其他服務器發(fā)送同步信號,同步信號具有新序號。 [0021]圖1是根據(jù)本發(fā)明一個實施例的連續(xù)序號生成系統(tǒng)的結構示意圖。
[0022]如圖1所示,連續(xù)序號生成系統(tǒng)包括:服務器1、服務器2、…、服務器M、…、服務器N,其中,N、M均為正整數(shù),M大于O且小于等于N。
[0023]具體地,N個服務器之間相互連接,每個服務器包括序號保持文件和接收緩存文件,序號保持文件用于存儲當前最大序號,該當前最大序號可為整個系統(tǒng)(即N個服務器)中的當前最大序號,接收緩存文件用于接收其他服務器發(fā)送的同步信號,同步信號中包括其他服務器的當前最大序號,應當理解,同步信號中包含的當前最大序號可以小于或等于序號保持文件中的當前最大序號,也可以大于序號保持文件中的當前最大序號,例如,如果第M個服務器正在提供服務,則第M個服務器的接收緩存文件中的同步信號包含的當前最大序號小于第M個服務器中的序號保持文件中的當前最大序號,如果第M個服務器不再提供服務,其他服務器提供服務,則第M個服務器中的接收緩存文件中的同步信號包含的當前最大序號大于第M個服務器中的序號保持文件中的當前最大序號,當?shù)贛個服務器提供服務之后,根據(jù)服務自己產生的當前最大序號更新序號保持文件中的當前最大序號,或者當其他服務器提供服務之后,根據(jù)接收到的同步信號更新序號保持文件中的當前最大序號。
[0024]當?shù)贛個服務器接收到序號分配請求之后,第M個服務器具體執(zhí)行以下步驟:
[0025]S101’獲取第M個服務器中的當前最大序號。
[0026]更具體地,在第M個服務器接收到序號分配請求之后,第M個服務器可先將第M個服務器中的接收緩存文件的同步信號中的其他服務器的當前最大序號進行對比,以獲取接收緩存文件中的當前最大序號,之后第M個服務器將第M個服務器中的接收緩存文件中的當前最大序號和序號保持文件中的當前最大序號進行對比,從而獲取到第M個服務器的當iu最大序號。
[0027]S102’根據(jù)當前最大序號生成新序號并通過序號分配響應反饋。
[0028]更具體地,在獲取第M個服務器中的當前最大序號之后,可將該序號遞增加I以生成新序號,例如,當接收緩存文件中的當前最大序號大于序號保持文件中的當前最大序號時,可先將該當前最大序號更新至序號保持文件中,之后將該當前最大序號遞增加I以生成新序號,又如,當序號保持文件中的當前最大序號大于接收緩存文件中的當前最大序號時,可將該當前最大序號遞增加I以生成新序號,之后第M個服務器將該新序號更新至序號保持文件中,并通過序號分配響應將該新序號反饋至客戶端。[0029]S103’第M個服務器向其他服務器發(fā)送同步信號,同步信號具有新序號。
[0030]在本發(fā)明的一個實施例中,N個服務器之間相互連接。例如,第M個服務器可通過網(wǎng)絡連接的方式向其他服務器發(fā)送建立網(wǎng)絡連接請求,其他服務器接收該請求,并建立與第M個服務器之間的連接,同時,其他服務器也可向第M個服務器發(fā)送建立網(wǎng)絡連接請求,第M個服務器接收該請求并建立與其他服務器之間的連接,以實現(xiàn)服務器之間相互接收并發(fā)送同步信號。
[0031 ] 在本發(fā)明的一個實施例中,其他服務器可根據(jù)同步信號更新自身的序號保持文件中存儲的當前最大序號。更具體地,第M個服務器向其他服務器發(fā)送同步信號,同步信號具有新序號,其他服務器接收到該同步信號之后,可將該同步信號中的新序號更新至自身的序號保持文件中,以使該新序號成為其他服務器自身存儲的當前最大序號。
[0032]在本發(fā)明的一個實施例中,第M個服務器獲取其他服務器反饋的成功響應消息,當反饋成功響應消息的服務器的數(shù)量大于預設數(shù)量時,第M個服務器將序號保持文件中存儲的當前最大序號更新為新序號。其中,預設數(shù)量可由系統(tǒng)默認設定,例如,可設定為所有服務器的總數(shù)量的一半或多于一半的數(shù)量,預設數(shù)量設定為所有服務器的總數(shù)量的一半及其以上,主要根據(jù)鴿籠原理,超過一半的服務器返回成功響應消息,才能保證整個系統(tǒng)的可靠。
[0033]更具體地,第M個服務器通過與其他服務器建立的連接向其他服務器并發(fā)發(fā)送同步信號,其中,該同步信號具有新生成的序號,其他服務器可通過接收緩存文件接收并存儲該同步信號,根據(jù)同步信號以更新自身的序號保持文件中存儲的當前最大序號,之后,其他服務器向第M個服務器反饋成功響應消息,當反饋成功響應消息的服務器的數(shù)量大于預設數(shù)量時,第M個服務器可將序號保持文件中存儲的當前最大序號更新為新序號,例如,N為4,M為4,預設數(shù)量為2,服務器4向服務器1、服務器2、服務器3發(fā)送同步信號,如果只有服務器I響應成功,服務器2、服務器3響應失敗,當服務器I和服務器4先后宕機時,服務器2、服務器3中的當前最大序號就不是最新的序號,這時,服務器2或服務器3也不能正常提供服務,如果超過2個服務器響應成功,則可以保證在少于一半的服務器宕機時會有至少一臺服務器中存儲的當前最大序號是最新的。由此,可以防止剛響應成功就宕機的情形的發(fā)生。
[0034]在本發(fā)明的一個實施例中,N個服務器通過虛擬路由器冗余協(xié)議VRRP (VirtualRouter Redundancy Protocol)進行健康檢測和管理。在本發(fā)明的另一個實施例中,每個服務器被配置為BACKUP模式。其中,BACKUP模式是keepalived (—個類似于交換機制的應用程序)的一種配置模式,ke印alived還具有另一種MASTER模式,BACKUP模式與MASTER模式相對應,在BACKUP模式下,所有服務器都配置成BACKUP,不會主動搶占成為MASTER,從而可避免網(wǎng)絡分割引起的“腦裂”現(xiàn)象,例如,當發(fā)生網(wǎng)絡故障造成割裂時,兩臺服務器都搶著成為MASTER,最終產生兩個MASTER同時服務。
[0035]下面對上述兩個實施例進行更加詳細的描述。更具體地,首先,每個服務器上可安裝并配置keepalived,之后,可為每個服務器上的keepalived的VRRP分配唯一權重,例如,如果服務器的個數(shù)為10,則分別分配1-10之間的唯一權重,并可通過ke印alived配置檢測腳本vrrp-script以進行健康檢測和管理。例如,當服務端口不存在時,vrrp-script試圖重啟本地服務,如果vrrp-scr iPt執(zhí)行成功,本臺服務器的權重加100,則該權重值為所有服務器中的最大值,該服務器被激活,成為MASTER (正在提供服務的服務器),如果vrrp-script執(zhí)行失敗,本臺服務器的權重減100,該服務器的權重值明顯會〈O,成為BACKUP 模式。由此,可通過 keepalived 管理 VIP (Virtual IP Address,虛擬 IP 地址),實現(xiàn)了在發(fā)生故障時服務器的IP漂移。
[0036]本發(fā)明實施例的連續(xù)序號生成系統(tǒng),可通過獲取第M個服務器中的序號保持文件中的當前最大序號,并根據(jù)當前最大序號生成新序號并通過序號分配響應反饋,第M個服務器向其他服務器發(fā)送具有新序號的同步信號,以使得其他服務器更新自身存儲的當前最大序號,至少具有以下優(yōu)點:(1)實現(xiàn)了分布式環(huán)境中高效可靠地產生連續(xù)序號,具有高并發(fā)、高可用性、高度容災性;(2)當一臺服務崩潰無法啟動或巖機時,可通過keepalived自動切換至其他服務器,由其他服務器繼續(xù)提供服務,無需人工干預;(3)在任何時刻、任何一臺服務器出現(xiàn)問題,都不影響整個服務,不會產生重復序列;(4)產生輕度網(wǎng)絡分割時,也不會影響服務;(5)生成的序列嚴格遞增,不會浪費。
[0037]在本發(fā)明的一個實施例中,N個服務器具有日志文件,并根據(jù)序號保持文件和/或接收緩存文件更新日志文件,以根據(jù)日志文件進行災難恢復。其中,每當生成新序號時,可將該新序號更新至日志文件中。例如,當整個服務都無法正常運行時,第M個服務器可根據(jù)自身的日志文件進行災難恢復,使得在服務正常運行時可獲得當前最大的序號,以保證序號的連續(xù)性。本領域的技術人員可以理解,每個服務器自身都具有一個日志文件。
[0038]在本發(fā)明的一個實施例中,當?shù)贛個服務器接收到序號查詢請求之后,第M個服務器從序號保持文件獲取當前最大序號并反饋。例如,當客戶端向第M個服務器發(fā)送序號查詢請求時,第M個服務器可將序號保持文件中的當前最大序號和接收緩存文件中的當前最大序號進行對比,以獲取這兩個文件中當前最大的序號,如果當前最大序號存在于序號保持文件中,則可將該當前最大序號直接反饋至客戶端,如果當前最大序號存在于接收緩存文件中,則可先將該當前最大序號更新至序號保持文件中,之后再將該當前最大序號反饋至客戶端。
[0039]為了實現(xiàn)上述實施例,本發(fā)明又提出一種連續(xù)序號生成方法。
[0040]一種連續(xù)序號生成方法,包括:服務器為N個,N個服務器之間相互連接,每個服務器包括序號保持文件和接收緩存文件,其中,N為正整數(shù),序號保持文件用于存儲當前最大序號,接收緩存文件用于接收其他服務器發(fā)送的同步信號,同步信號中包括其他服務器的當前最大序號,當?shù)贛個服務器接收到序號分配請求之后,其中,M大于O小于等于N,方法包括以下步驟:第M個服務器獲取第M個服務器中的當前最大序號;第1個服務器根據(jù)當前最大序號生成新序號并通過序號分配響應反饋;以及第M個服務器向其他服務器發(fā)送同步信號,同步信號具有新序號。
[0041]圖2是根據(jù)本發(fā)明一個實施例的連續(xù)序號生成方法的流程圖。
[0042]N個服務器之間相互連接,每個服務器包括序號保持文件和接收緩存文件,序號保持文件用于存儲當前最大序號,該當前最大序號可為整個系統(tǒng)(即N個服務器)中的當前最大序號,接收緩存文件用于接收其他服務器發(fā)送的同步信號,同步信號中包括其他服務器的當前最大序號。當?shù)贛個服務器接收到序號分配請求之后,N、M均為正整數(shù),M大于O且小于等于N,具體地,如圖2所示,連續(xù)序號生成方法包括以下步驟:
[0043]S101,第M個服務器獲取第M個服務器中的當前最大序號。[0044]其中,同步信號中包含的當前最大序號可以小于或等于序號保持文件中的當前最大序號,也可以大于序號保持文件中的當前最大序號,例如,如果第M個服務器正在提供服務,則第M個服務器的接收緩存文件中的同步信號包含的當前最大序號小于第M個服務器中的序號保持文件中的當前最大序號,如果第M個服務器不再提供服務,其他服務器提供服務,則第M個服務器中的接收緩存文件中的同步信號包含的當前最大序號大于第M個服務器中的序號保持文件中的當前最大序號,當?shù)贛個服務器提供服務之后,根據(jù)服務自己產生的當前最大序號更新序號保持文件中的當前最大序號,或者當其他服務器提供服務之后,根據(jù)接收到的同步信號更新序號保持文件中的當前最大序號。
[0045]具體地,在第M個服務器接收到序號分配請求之后,第M個服務器可先將第M個服務器中的接收緩存文件的同步信號中的其他服務器的當前最大序號進行對比,以獲取接收緩存文件中的當前最大序號,之后第M個服務器將第M個服務器中的接收緩存文件中的當前最大序號和序號保持文件中的當前最大序號進行對比,從而獲取到第M個服務器的當前最大序號。
[0046]S102,第M個服務器根據(jù)當前最大序號生成新序號并通過序號分配響應反饋。
[0047]具體地,在獲取第M個服務器中的當前最大序號之后,可將該序號遞增加I以生成新序號,例如,當接收緩存文件中的當前最大序號大于序號保持文件中的當前最大序號時,可先將該當前最大序號更新至序號保持文件中,之后將該當前最大序號遞增加I以生成新序號,又如,當序號保持文件中的當前最大序號大于接收緩存文件中的當前最大序號時,可將該當前最大序號遞增加I以生成新序號,之后第M個服務器將該新序號更新至序號保持文件中,并通過序號分配響應將該新序號反饋至客戶端。
[0048]S103,第M個服務器向其他服務器發(fā)送同步信號,同步信號具有新序號。
[0049]在本發(fā)明的一個實施例中,N個服務器之間相互連接。例如,第M個服務器可通過網(wǎng)絡連接的方式向其他服務器發(fā)送建立網(wǎng)絡連接請求,其他服務器接收該請求,并建立與第M個服務器之間的連接,同時,其他服務器也可向第M個服務器發(fā)送建立網(wǎng)絡連接請求,第M個服務器接收該請求并建立與其他服務器之間的連接,以實現(xiàn)服務器之間相互發(fā)送并接收同步信號。
[0050]在本發(fā)明的一個實施例中,其他服務器可根據(jù)同步信號更新自身的序號保持文件中存儲的當前最大序號。
[0051]具體地,第M個服務器向其他服務器發(fā)送同步信號,同步信號具有新序號,其他服務器接收到該同步信號之后,可將該同步信號中的新序號更新至自身的序號保持文件中,以使該新序號成為其他服務器自身存儲的當前最大序號。
[0052]在本發(fā)明的一個實施例中,N個服務器通過虛擬路由器冗余協(xié)議VRRP (VirtualRouter Redundancy Protocol)進行健康檢測和管理。在本發(fā)明的另一個實施例中,每個服務器被配置為BACKUP模式。其中,BACKUP模式是keepalived (—個類似于交換機制的應用程序)的一種配置模式,ke印alived還具有另一種MASTER模式,BACKUP模式與MASTER模式相對應,在BACKUP模式下,所有服務器都配置成BACKUP,不會主動搶占成為MASTER,從而可避免網(wǎng)絡分割引起的“腦裂”現(xiàn)象,例如,當發(fā)生網(wǎng)絡故障造成割裂時,兩臺服務器都搶著成為MASTER,最終產生兩個MASTER同時服務。
[0053]具體地,首先,每個服務器上可安裝并配置ke印alived,之后,可為每個服務器上的keepalived的VRRP分配唯一權重,例如,如果服務器的個數(shù)為10,則分別分配1_10之間的唯一權重,并可通過keepalived配置檢測腳本vrrp-script以進行健康檢測和管理。例如,當服務端口不存在時,vrrp-script試圖重啟本地服務,如果vrrp-script執(zhí)行成功,本臺服務器的權重加100,則該權重值為所有服務器中的最大值,該服務器被激活,成為MASTER(正在提供服務的服務器),如果vrrp-script執(zhí)行失敗,本臺服務器的權重減100,該服務器的權重值明顯會〈0,成為BACKUP模式。由此,可通過ke印alived管理VIP(VirtualIP Address,虛擬IP地址),實現(xiàn)了在發(fā)生故障時服務器的IP漂移。
[0054]本發(fā)明實施例的連續(xù)序號生成方法,可通過獲取第M個服務器中的序號保持文件中的當前最大序號,并根據(jù)當前最大序號生成新序號并通過序號分配響應反饋,第M個服務器向其他服務器發(fā)送具有新序號的同步信號,以使得其他服務器更新自身存儲的當前最大序號,至少具有以下優(yōu)點:(1)實現(xiàn)了分布式環(huán)境中高效可靠地產生連續(xù)序號,具有高并發(fā)、高可用性、高度容災性;(2)當一臺服務崩潰無法啟動或巖機時,可通過keepalived自動切換至其他服務器,由其他服務器繼續(xù)提供服務,無需人工干預;(3)在任何時刻、任何一臺服務器出現(xiàn)問題,都不影響整個服務,不會產生重復序列;(4)產生輕度網(wǎng)絡分割時,也不會影響服務;(5)生成的序列嚴格遞增,不會浪費。
[0055]圖3是根據(jù)本發(fā)明一個具體實施例的連續(xù)序號生成方法的流程圖。
[0056]為了保證當前的序號為最新、最大的序號,進一步提高可用性,當反饋成功響應消息的服務器的數(shù)量大于預設數(shù)量時,第M個服務器將序號保持文件中存儲的當前最大序號更新為新序號。具體地,如圖3所示,連續(xù)序號生成方法包括以下步驟:
[0057]S201,第M個服務器獲取第M個服務器中的當前最大序號。
[0058]具體地,在第M個服務器接收到序號分配請求之后,第M個服務器可先將第M個服務器中的接收緩存文件的同步信號中的其他服務器的當前最大序號進行對比,以獲取接收緩存文件中的當前最大序號,之后第M個服務器將第M個服務器中的接收緩存文件中的當前最大序號和序號保持文件中的當前最大序號進行對比,從而獲取到第M個服務器的當前最大序號。
[0059]S202,第M個服務器根據(jù)當前最大序號生成新序號并通過序號分配響應反饋。
[0060]具體地,在獲取第M個服務器中的當前最大序號之后,可將該序號遞增加I以生成新序號,例如,當接收緩存文件中的當前最大序號大于序號保持文件中的當前最大序號時,可先將該當前最大序號更新至序號保持文件中,之后將該當前最大序號遞增加I以生成新序號,又如,當序號保持文件中的當前最大序號大于接收緩存文件中的當前最大序號時,可將該當前最大序號遞增加I以生成新序號,之后第M個服務器將該新序號更新至序號保持文件中,并通過序號分配響應將該新序號反饋至客戶端。
[0061]S203,第M個服務器向其他服務器發(fā)送同步信號,同步信號具有新序號。
[0062]在本發(fā)明的一個實施例中,N個服務器之間相互連接。例如,第M個服務器可通過網(wǎng)絡連接的方式向其他服務器發(fā)送建立網(wǎng)絡連接請求,其他服務器接收該請求,并建立與第M個服務器之間的連接,同時,其他服務器也可向第M個服務器發(fā)送建立網(wǎng)絡連接請求,第M個服務器接收該請求并建立與其他服務器之間的連接,以實現(xiàn)服務器之間相互發(fā)送并接收同步信號。
[0063]在本發(fā)明的一個實施例中,其他服務器可根據(jù)同步信號更新自身的序號保持文件中存儲的當前最大序號。
[0064]具體地,第M個服務器向其他服務器發(fā)送同步信號,同步信號具有新序號,其他服務器接收到該同步信號之后,可將該同步信號中的新序號更新至自身的序號保持文件中,以使該新序號成為其他服務器自身存儲的當前最大序號。
[0065]S204,第M個服務器獲取其他服務器反饋的成功響應消息。
[0066]具體地,第M個服務器向其他服務器發(fā)送同步信號之后,其他服務器向第M個服務器反饋成功響應消息,從而使得第M個服務器根據(jù)反饋成功響應消息的服務器的數(shù)量判斷序號保持文件中存儲的當前最大序號是否為當前最大的序號。
[0067]S205,當反饋成功響應消息的服務器的數(shù)量大于預設數(shù)量時,第M個服務器將序號保持文件中存儲的當前最大序號更新為新序號。
[0068]其中,預設數(shù)量可由系統(tǒng)默認設定,例如,可設定為所有服務器的總數(shù)量的一半或多于一半的數(shù)量,預設數(shù)量設定為所有服務器的總數(shù)量的一半及其以上,主要根據(jù)鴿籠原理,超過一半的服務器返回成功響應消息,才能保證整個系統(tǒng)的可靠。
[0069]例如,N為4,M為4,預設數(shù)量為2,服務器4向服務器1、服務器2、服務器3發(fā)送同步信號,如果只有服務器I響應成功,服務器2、服務器3響應失敗,當服務器I和服務器4先后宕機時,服務器2、服務器3中的當前最大序號就不是最新的序號,這時,服務器2或服務器3也不能正常提供服務,如果超過2個服務器響應成功,則可以保證在少于一半的服務器宕機時會有至少一臺服務器中存儲的當前最大序號是最新的。由此,可以防止剛響應成功就宕機的情形的發(fā)生。
[0070]在本發(fā)明的一個實施例中,N個服務器通過虛擬路由器冗余協(xié)議VRRP (VirtualRouter Redundancy Protocol)進行健康檢測和管理。在本發(fā)明的另一個實施例中,每個服務器被配置為BACKUP模式。其中,BACKUP模式是keepalived (—個提供負載均衡、故障轉移的應用程序)的一種配置模式,keepalived還具有另一種MASTER模式,BACKUP模式與MASTER模式相對應,在BACKUP模式下,所有服務器都配置成BACKUP,不會主動搶占成為MASTER,從而可避免網(wǎng)絡分割引起的腦裂現(xiàn)象,例如,當發(fā)生網(wǎng)絡故障造成割裂時,兩臺服務器都搶著成為MASTER,最終產生兩個MASTER同時服務。
[0071]下面對上述兩個實施例進行更加詳細的描述。具體地,首先,每個服務器上可安裝并配置keepal ived,之后,可為每個服務器上的keepal ived的VRRP分配唯一權重,例如,如果服務器的個數(shù)為10,則分別分配1-10之間的唯一權重,并可通過ke印alived配置檢測腳本vrrp-script以進行健康檢測和管理。例如,當服務端口不存在時,vrrp-script試圖重啟本地服務,如果vrrp-script執(zhí)行成功,本臺服務器的權重加100,則該權重值為所有服務器中的最大值,該服務器被激活,成為MASTER,如果vrrp-script執(zhí)行失敗,本臺服務器的權重減100,該服務器的權重值明顯會〈0,成為BACKUP模式。由此,可通過ke印alived管理VIP,實現(xiàn)了在發(fā)生故障時服務器的IP漂移。
[0072]本發(fā)明實施例的連續(xù)序號生成方法,可通過第M個服務器獲取其他服務器反饋的成功響應消息,當反饋成功響應消息的服務器的數(shù)量大于預設數(shù)量時,第M個服務器將序號保持文件中存儲的當前最大序號更新為新序號,保證了當前的序號為最新、最大的序號,進一步提聞了可用性。
[0073]在本發(fā)明的一個實施例中,N個服務器具有日志文件,并根據(jù)序號保持文件和/或接收緩存文件更新日志文件,以根據(jù)日志文件進行災難恢復。其中,每當生成新序號時,可將該新序號更新至日志文件中。例如,當整個服務都無法正常運行時,第M個服務器可根據(jù)自身的日志文件進行災難恢復,使得在服務正常運行時可獲得當前最大的序號,以保證序號的連續(xù)性。本領域的技術人員可以理解,每個服務器自身都具有一個日志文件。
[0074]在本發(fā)明的一個實施例中,當?shù)贛個服務器接收到序號查詢請求之后,第M個服務器從序號保持文件獲取當前最大序號并反饋。例如,當客戶端向第M個服務器發(fā)送序號查詢請求時,第M個服務器可將序號保持文件中的當前最大序號和接收緩存文件中的當前最大序號進行對比,以獲取這兩個文件中當前最大的序號,如果當前最大序號存在于序號保持文件中,則可將該當前最大序號直接反饋至客戶端,如果當前最大序號存在于接收緩存文件中,則可先將該當前最大序號更新至序號保持文件中,之后再將該當前最大序號反饋至客戶端。
[0075]應當理解,本發(fā)明可以應用于支付產品的訂單號生成,也可以應用于注冊用戶的賬號id生成,還可以應用于其他與連續(xù)的數(shù)字序號相關的場景中,例如,分布式一致性協(xié)議paxos協(xié)議的序列號等。
[0076]應當理解,本發(fā)明的各部分可以用硬件、軟件、固件或它們的組合來實現(xiàn)。在上述實施方式中,多個步驟或方法可以用存儲在存儲器中且由合適的指令執(zhí)行系統(tǒng)執(zhí)行的軟件或固件來實現(xiàn)。例如,如果用硬件來實現(xiàn),和在另一實施方式中一樣,可用本領域公知的下列技術中的任一項或他們的組合來實現(xiàn):具有用于對數(shù)據(jù)信號實現(xiàn)邏輯功能的邏輯門電路的離散邏輯電路,具有合適的組合邏輯門電路的專用集成電路,可編程門陣列(PGA),現(xiàn)場可編程門陣列(FPGA)等。
[0077]在本說明書的描述中,參考術語“一個實施例”、“一些實施例”、“示例”、“具體示例”、或“一些示例”等的描述意指結合該實施例或示例描述的具體特征、結構、材料或者特點包含于本發(fā)明的至少一個實施例或示例中。在本說明書中,對上述術語的示意性表述不一定指的是相同的實施例或示例。而且,描述的具體特征、結構、材料或者特點可以在任何的一個或多個實施例或示例中以合適的方式結合。
[0078]盡管已經示出和描述了本發(fā)明的實施例,本領域的普通技術人員可以理解:在不脫離本發(fā)明的原理和宗旨的情況下可以對這些實施例進行多種變化、修改、替換和變型,本發(fā)明的范圍由權利要求及其等同物限定。
【權利要求】
1.一種連續(xù)序號生成系統(tǒng),其特征在于,包括: N個服務器,所述N個服務器之間相互連接,每個所述服務器包括序號保持文件和接收緩存文件,其中,所述N為正整數(shù),所述序號保持文件用于存儲當前最大序號,所述接收緩存文件用于接收其他服務器發(fā)送的同步信號,所述同步信號中包括其他服務器的當前最大序號, 當?shù)贛個服務器接收到序號分配請求之后,其中,所述M大于O小于等于N,所述第M個服務器用于: 獲取所述第M個服務器的當前最大序號; 根據(jù)所述當前最大序號生成新序號并通過序號分配響應反饋;以及 所述第M個服務器向其他服務器發(fā)送同步信號,所述同步信號具有所述新序 號。
2.如權利要求1所述的連續(xù)序號生成系統(tǒng),其特征在于,所述第M個服務器獲取其他服務器反饋的成功響應消息,當反饋所述成功響應消息的服務器的數(shù)量大于預設數(shù)量時,所述第M個服務器將所述序號保持文件中存儲的當前最大序號更新為所述新序號。
3.如權利要求2所述的連續(xù)序號生成系統(tǒng),其特征在于,所述其他服務器根據(jù)所述同步信號更新自身的所 述序號保持文件中存儲的當前最大序號。
4.如權利要求1-3任一項所述的連續(xù)序號生成系統(tǒng),其特征在于,所述N個服務器具有日志文件,并根據(jù)所述序號保持文件和/或接收緩存文件更新所述日志文件,以根據(jù)所述日志文件進行災難恢復。
5.如權利要求1-3任一項所述的連續(xù)序號生成系統(tǒng),其特征在于,當所述第M個服務器接收到序號查詢請求之后,所述第M個服務器從所述序號保持文件獲取所述當前最大序號并反饋。
6.如權利要求1-5任一項所述的連續(xù)序號生成系統(tǒng),其特征在于,所述N個服務器通過虛擬路由器冗余協(xié)議VRRP進行健康檢測和管理。
7.如權利要求6所述的連續(xù)序號生成系統(tǒng),其特征在于,每個所述服務器被配置為BACKUP 模式。
8.—種連續(xù)序號生成方法,其特征在于,服務器為N個,所述N個服務器之間相互連接,每個所述服務器包括序號保持文件和接收緩存文件,其中,所述N為正整數(shù),所述序號保持文件用于存儲當前最大序號,所述接收緩存文件用于接收其他服務器發(fā)送的同步信號,所述同步信號中包括其他服務器的當前最大序號, 當?shù)贛個服務器接收到序號分配請求之后,其中,所述M大于O小于等于N,所述方法包括以下步驟: 所述第M個服務器獲取所述第M個服務器中的當前最大序號; 所述第M個服務器根據(jù)所述當前最大序號生成新序號并通過序號分配響應反饋;以及 所述第M個服務器向其他服務器發(fā)送同步信號,所述同步信號具有所述新序號。
9.如權利要求8所述的連續(xù)序號生成方法,其特征在于,還包括: 所述第M個服務器獲取其他服務器反饋的成功響應消息; 當反饋所述成功響應消息的服務器的數(shù)量大于預設數(shù)量時,所述第M個服務器將所述序號保持文件中存儲的當前最大序號更新為所述新序號。
10.如權利要求9所述的連續(xù)序號生成方法,其特征在于,所述其他服務器根據(jù)所述同步信號更新自身的所述序號保持文件中存儲的當前最大序號。
11.如權利要求8-10任一項所述的連續(xù)序號生成方法,其特征在于,所述N個服務器具有日志文件,并根據(jù)所述序號保持文件和/或接收緩存文件更新所述日志文件,以根據(jù)所述日志文件進行災難恢復。
12.如權利要求8-10任一項所述的連續(xù)序號生成方法,其特征在于,還包括: 當所述第M個服務器接收到序號查詢請求之后,所述第M個服務器從所述序號保持文件獲取所述當前最大序號并反饋。
13.如權利要求8-12任一項所述的連續(xù)序號生成方法,其特征在于,所述N個服務器通過虛擬路由器冗余協(xié)議VRRP進行健康檢測和管理。
14.如權利要求13所述的連續(xù)序號生成方法,其特征在于,每個所述服務器被配置為BACKUP 模 式。
【文檔編號】H04L29/08GK103647833SQ201310688165
【公開日】2014年3月19日 申請日期:2013年12月16日 優(yōu)先權日:2013年12月16日
【發(fā)明者】陳不驕 申請人:百度在線網(wǎng)絡技術(北京)有限公司