本發(fā)明涉及通信網絡技術領域,尤其涉及一種標識符生成裝置及方法。
背景技術:
在互聯網應用中,分布式處理應用越來越廣泛,其中經常會涉及到一個問題,就是應用服務器中訪問請求對應的ID(IDentifier,標識符)的生成問題。在集中式處理場景下,需要保證該ID在單節(jié)點上唯一即可。但是在分布式環(huán)境,需要保證該ID在多個節(jié)點上都唯一。所以,需要建立一定的策略來保證每個節(jié)點生成的ID不會重復。
當前技術中,通常采用UUID(Universally Unique Identifier,通用唯一識別碼)來保證每個節(jié)點生成的ID不會重復。UUID是指在一臺機器上生成的數字,它保證對在同一時空中所有機器的UUID都是唯一的。
然而,采用UUID作為唯一標識符的做法會存在以下問題:一、一個UUID由32個16進制數構成,從而導致UUID所形成的標識符長度過長,可讀性較差。二、在生成UUID的過程中要使用強隨機數,性能較差。
技術實現要素:
本發(fā)明的主要目的在于提出一種標識符生成裝置及方法,旨在解決現有的應用服務器中訪問請求對應的標識符長度長,性能差的技術問題。
為實現上述目的,本發(fā)明提供的一種標識符生成裝置,所述標識符生成裝置包括:
獲取模塊,用于當接收到當前訪問應用服務器中應用的訪問請求時,獲取預先存儲的所述應用的啟動時間和所述應用服務器的網際互聯協(xié)議IP地址;
編碼模塊,用于對所述啟動時間和IP地址進行編碼,得到編碼后的所述啟動時間和IP地址;
所述獲取模塊還用于獲取上一訪問請求標識符中的變量,按照預設規(guī)則改變所述變量對應的值,得到新的變量;
拼接模塊,用于將所述新的變量、編碼后的所述啟動時間和IP地址進行拼接,以生成所述訪問請求的標識符。
可選地,所述編碼模塊包括:
第一轉換單元,用于將所述啟動時間和IP地址按照對應的編碼規(guī)則轉換為16進制的數字;
第二轉換單元,用于將所述16進制的數字轉換為64進制的數字,得到編碼后的所述啟動時間和IP地址。
可選地,所述標識符生成裝置還包括:
設置模塊,用于設置所述標識符的分隔符和所述新的變量、編碼后的所述啟動時間和IP地址的拼接順序;
所述拼接模塊還用于根據所述分隔符和所述拼接順序將所述新的變量、編碼后的所述啟動時間和IP地址進行拼接,以生成所述訪問請求的標識符。
可選地,所述獲取模塊還用于獲取所述訪問請求對應的操作指令,確定所述訪問請求對應的操作指令的個數;
所述標識符生成裝置還包括存儲模塊,用于若所述訪問請求至少對應著兩個操作指令,則根據所述訪問請求的標識符,將各個操作指令對應的日志進行串聯存儲。
可選地,所述獲取模塊還用于當偵測到所述應用服務器中應用的啟動操作時,獲取所述應用的啟動時間和所述應用服務器的IP地址,并存儲所述啟動時間和IP地址。
此外,為實現上述目的,本發(fā)明還提出一種標識符生成方法,所述標識符生成方法包括:
當接收到當前訪問應用服務器中應用的訪問請求時,獲取預先存儲的所述應用的啟動時間和所述應用服務器的網際互聯協(xié)議IP地址;
對所述啟動時間和IP地址進行編碼,得到編碼后的所述啟動時間和IP地址;
獲取上一訪問請求標識符中的變量,按照預設規(guī)則改變所述變量對應的值,得到新的變量;
將所述新的變量、編碼后的所述啟動時間和IP地址進行拼接,以生成所述訪問請求的標識符。
可選地,所述對所述啟動時間和IP地址進行編碼,得到編碼后的所述啟動時間和IP地址的步驟包括:
將所述啟動時間和IP地址按照對應的編碼規(guī)則轉換為16進制的數字;
將所述16進制的數字轉換為64進制的數字,得到編碼后的所述啟動時間和IP地址。
可選地,所述獲取上一訪問請求標識符中的變量,按照預設規(guī)則改變所述變量對應的值,得到新的變量的步驟之后,還包括:
設置所述標識符的分隔符和所述新的變量、編碼后的所述啟動時間和IP地址的拼接順序;
所述將所述新的變量、編碼后的所述啟動時間和IP地址進行拼接,以生成所述訪問請求的標識符的步驟包括:
根據所述分隔符和所述拼接順序將所述新的變量、編碼后的所述啟動時間和IP地址進行拼接,以生成所述訪問請求的標識符。
可選地,所述將所述新的變量、編碼后的所述啟動時間和IP地址進行拼接,以生成所述訪問請求的標識符的步驟之后,還包括:
獲取所述訪問請求對應的操作指令,確定所述訪問請求對應的操作指令的個數;
若所述訪問請求至少對應著兩個操作指令,則根據所述訪問請求的標識符,將各個操作指令對應的日志進行串聯存儲。
可選地,所述當接收到當前訪問應用服務器中應用的訪問請求時,獲取預先存儲的所述應用的啟動時間和所述應用服務器的IP地址的步驟之前,還包括:
當偵測到所述應用服務器中應用的啟動操作時,獲取所述應用的啟動時間和所述應用服務器的IP地址,并存儲所述啟動時間和IP地址。
本發(fā)明通過當接收到當前訪問應用服務器中應用的訪問請求時,對預先存儲的所述應用的啟動時間和所述應用服務器的IP地址進行編碼,得到編碼后的所述啟動時間和IP地址,并按照預設規(guī)則改變所獲取的上一訪問請求標識符中的變量對應的值,得到新的變量,將所述新的變量、編碼后的所述啟動時間和IP地址進行拼接,生成所述訪問請求的標識符??s短了所述訪問請求的標識符的長度和所述標識符的生成時間,提高了所述訪問請求的標識符的性能。
附圖說明
圖1為實現本發(fā)明各個實施例一個可選的移動終端的硬件結構示意圖;
圖2為如圖1所示的移動終端的無線通信系統(tǒng)示意圖;
圖3為本發(fā)明標識符生成裝置第一實施例的模塊示意圖;
圖4為本發(fā)明實施例中編碼模塊的一種模塊示意圖;
圖5為本發(fā)明標識符生成裝置第三實施例的模塊示意圖;
圖6為本發(fā)明標識符生成裝置第四實施例的模塊示意圖;
圖7為本發(fā)明標識符生成方法第一實施例的流程示意圖;
圖8為本發(fā)明實施例中對所述啟動時間和IP地址進行編碼,得到編碼后的所述啟動時間和IP地址的一種流程示意圖;
圖9為本發(fā)明標識符生成方法第三實施例的流程示意圖;
圖10為本發(fā)明標識符生成方法第四實施例的流程示意圖;
圖11為本發(fā)明標識符生成方法第五實施例的流程示意圖。
本發(fā)明目的的實現、功能特點及優(yōu)點將結合實施例,參照附圖做說明。
具體實施方式
應當理解,此處所描述的具體實施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
現在將參考附圖描述實現本發(fā)明各個實施例的移動終端。在后續(xù)的描述中,使用用于表示元件的諸如“模塊”、“部件”或“單元”的后綴僅為了有利于本發(fā)明的說明,其本身并沒有特定的意義。因此,"模塊"與"部件"可以混合地使用。
移動終端可以以各種形式來實施。例如,本發(fā)明中描述的終端可以包括諸如移動電話、智能電話、筆記本電腦、數字廣播接收器、PDA(個人數字助理)、PAD(平板電腦)、PMP(便攜式多媒體播放器)、導航裝置等等的移動終端以及諸如數字TV、臺式計算機等等的固定終端。下面,假設終端是移動終端。然而,本領域技術人員將理解的是,除了特別用于移動目的的元件之外,根據本發(fā)明的實施方式的構造也能夠應用于固定類型的終端。
圖1為實現本發(fā)明各個實施例一個可選的移動終端的硬件結構示意圖。
移動終端100可以包括用戶輸入單元130、存儲器160、接口單元170、控制器180和電源單元190等等。圖1示出了具有各種組件的移動終端,但是應理解的是,并不要求實施所有示出的組件。可以替代地實施更多或更少的組件。將在下面詳細描述移動終端的元件。
用戶輸入單元130可以根據用戶輸入的命令生成鍵輸入數據以控制移動終端的各種操作。用戶輸入單元130允許用戶輸入各種類型的信息,并且可以包括鍵盤、鍋仔片、觸摸板(例如,檢測由于被接觸而導致的電阻、壓力、電容等等的變化的觸敏組件)、滾輪、搖桿等等。
接口單元170用作至少一個外部裝置與移動終端100連接可以通過的接口。例如,外部裝置可以包括有線或無線頭戴式耳機端口、外部電源(或電池充電器)端口、有線或無線數據端口、存儲卡端口、用于連接具有識別模塊的裝置的端口、音頻輸入/輸出(I/O)端口、視頻I/O端口、耳機端口等等。識別模塊可以是存儲用于驗證用戶使用移動終端100的各種信息并且可以包括用戶識別模塊(UIM)、客戶識別模塊(SIM)、通用客戶識別模塊(USIM)等等。另外,具有識別模塊的裝置(下面稱為"識別裝置")可以采取智能卡的形式,因此,識別裝置可以經由端口或其它連接裝置與移動終端100連接。接口單元170可以用于接收來自外部裝置的輸入(例如,數據信息、電力等等)并且將接收到的輸入傳輸到移動終端100內的一個或多個元件或者可以用于在移動終端和外部裝置之間傳輸數據。
另外,當移動終端100與外部底座連接時,接口單元170可以用作允許通過其將電力從底座提供到移動終端100的路徑或者可以用作允許從底座輸入的各種命令信號通過其傳輸到移動終端的路徑。從底座輸入的各種命令信號或電力可以用作用于識別移動終端是否準確地安裝在底座上的信號。
存儲器160可以存儲由控制器180執(zhí)行的處理和控制操作的軟件程序等等,或者可以暫時地存儲己經輸出或將要輸出的數據(例如,電話簿、消息、靜態(tài)圖像、視頻等等)。而且,存儲器160可以存儲關于當觸摸施加到觸摸屏時輸出的各種方式的振動和音頻信號的數據。
存儲器160可以包括至少一種類型的存儲介質,所述存儲介質包括閃存、硬盤、多媒體卡、卡型存儲器(例如,SD或DX存儲器等等)、隨機訪問存儲器(RAM)、靜態(tài)隨機訪問存儲器(SRAM)、只讀存儲器(ROM)、電可擦除可編程只讀存儲器(EEPROM)、可編程只讀存儲器(PROM)、磁性存儲器、磁盤、光盤等等。而且,移動終端100可以與通過網絡連接執(zhí)行存儲器160的存儲功能的網絡存儲裝置協(xié)作。
控制器180通??刂埔苿咏K端的總體操作。例如,控制器180執(zhí)行與語音通話、數據通信、視頻通話等等相關的控制和處理。另外,控制器180可以包括用于再現(或回放)多媒體數據的多媒體模塊1810,多媒體模塊1810可以構造在控制器180內,或者可以構造為與控制器180分離??刂破?80可以執(zhí)行模式識別處理,以將在觸摸屏上執(zhí)行的手寫輸入或者圖片繪制輸入識別為字符或圖像。
電源單元190在控制器180的控制下接收外部電力或內部電力并且提供操作各元件和組件所需的適當的電力。
這里描述的各種實施方式可以以使用例如計算機軟件、硬件或其任何組合的計算機可讀介質來實施。對于硬件實施,這里描述的實施方式可以通過使用特定用途集成電路(ASIC)、數字信號處理器(DSP)、數字信號處理裝置(DSPD)、可編程邏輯裝置(PLD)、現場可編程門陣列(FPGA)、處理器、控制器、微控制器、微處理器、被設計為執(zhí)行這里描述的功能的電子單元中的至少一種來實施,在一些情況下,這樣的實施方式可以在控制器180中實施。對于軟件實施,諸如過程或功能的實施方式可以與允許執(zhí)行至少一種功能或操作的單獨的軟件模塊來實施。軟件代碼可以由以任何適當的編程語言編寫的軟件應用程序(或程序)來實施,軟件代碼可以存儲在存儲器160中并且由控制器180執(zhí)行。
至此,己經按照其功能描述了移動終端。下面,為了簡要起見,將描述諸如折疊型、直板型、擺動型、滑動型移動終端等等的各種類型的移動終端中的滑動型移動終端作為示例。因此,本發(fā)明能夠應用于任何類型的移動終端,并且不限于滑動型移動終端。
如圖1中所示的移動終端100可以被構造為利用經由幀或分組發(fā)送數據的諸如有線和無線通信系統(tǒng)以及基于衛(wèi)星的通信系統(tǒng)來操作。
現在將參考圖2描述其中根據本發(fā)明的移動終端能夠操作的通信系統(tǒng)。
這樣的通信系統(tǒng)可以使用不同的空中接口和/或物理層。例如,由通信系統(tǒng)使用的空中接口包括例如頻分多址(FDMA)、時分多址(TDMA)、碼分多址(CDMA)和通用移動通信系統(tǒng)(UMTS)(特別地,長期演進(LTE))、全球移動通信系統(tǒng)(GSM)等等。作為非限制性示例,下面的描述涉及CDMA通信系統(tǒng),但是這樣的教導同樣適用于其它類型的系統(tǒng)。
參考圖2,CDMA無線通信系統(tǒng)可以包括多個移動終端100、多個基站(BS)270、基站控制器(BSC)275和移動交換中心(MSC)280。MSC280被構造為與公共電話交換網絡(PSTN)290形成接口。MSC280還被構造為與可以經由回程線路耦接到基站270的BSC275形成接口。回程線路可以根據若干己知的接口中的任一種來構造,所述接口包括例如E1/T1、ATM,IP、PPP、幀中繼、HDSL、ADSL或xDSL。將理解的是,如圖2中所示的系統(tǒng)可以包括多個BSC2750。
每個BS270可以服務一個或多個分區(qū)(或區(qū)域),由多向天線或指向特定方向的天線覆蓋的每個分區(qū)放射狀地遠離BS270?;蛘?,每個分區(qū)可以由用于分集接收的兩個或更多天線覆蓋。每個BS270可以被構造為支持多個頻率分配,并且每個頻率分配具有特定頻譜(例如,1.25MHz,5MHz等等)。
分區(qū)與頻率分配的交叉可以被稱為CDMA信道。BS270也可以被稱為基站收發(fā)器子系統(tǒng)(BTS)或者其它等效術語。在這樣的情況下,術語"基站"可以用于籠統(tǒng)地表示單個BSC275和至少一個BS270?;疽部梢员环Q為"蜂窩站"?;蛘撸囟˙S270的各分區(qū)可以被稱為多個蜂窩站。
如圖2中所示,廣播發(fā)射器(BT)295將廣播信號發(fā)送給在系統(tǒng)內操作的移動終端100。在圖2中,示出了幾個全球定位系統(tǒng)(GPS)衛(wèi)星300。衛(wèi)星300幫助定位多個移動終端100中的至少一個。
在圖2中,描繪了多個衛(wèi)星300,但是理解的是,可以利用任何數目的衛(wèi)星獲得有用的定位信息。替代GPS跟蹤技術或者在GPS跟蹤技術之外,可以使用可以跟蹤移動終端的位置的其它技術。另外,至少一個GPS衛(wèi)星300可以選擇性地或者額外地處理衛(wèi)星DMB傳輸。
作為無線通信系統(tǒng)的一個典型操作,BS270接收來自各種移動終端100的反向鏈路信號。移動終端100通常參與通話、消息收發(fā)和其它類型的通信。特定基站270接收的每個反向鏈路信號被在特定BS270內進行處理。獲得的數據被轉發(fā)給相關的BSC275。BSC提供通話資源分配和包括BS270之間的軟切換過程的協(xié)調的移動管理功能。BSC275還將接收到的數據路由到MSC280,其提供用于與PSTN290形成接口的額外的路由服務。類似地,PSTN290與MSC280形成接口,MSC與BSC275形成接口,并且BSC275相應地控制BS270以將正向鏈路信號發(fā)送到移動終端100。
基于上述移動終端硬件結構以及通信系統(tǒng),提出本發(fā)明方法各個實施例。
參照圖3,圖3為本發(fā)明標識符生成裝置第一實施例的模塊示意圖。
需要強調的是,對本領域的技術人員來說,圖3所示模塊圖僅僅是一個較佳實施例的示例圖,本領域的技術人員圍繞圖3所示的標識符生成裝置的模塊,可輕易進行新的模塊的補充;各模塊的名稱是自定義名稱,僅用于輔助理解該標識符生成裝置的各個程序功能塊,不用于限定本發(fā)明的技術方案,本發(fā)明技術方案的核心是,各自定義名稱的模塊所要達成的功能。
本實施例提出一種標識符生成裝置,標識符生成裝置包括:
獲取模塊10,用于當接收到當前訪問應用服務器中應用的訪問請求時,獲取預先存儲的應用的啟動時間和應用服務器的網際互聯協(xié)議IP地址;
編碼模塊20,用于對啟動時間和IP地址進行編碼,得到編碼后的啟動時間和IP地址;
當接收到當前訪問應用服務器中應用的訪問請求時,獲取模塊10獲取預先存儲的該應用的啟動時間和該應用服務器的IP(Internet Protocol,網際互聯協(xié)議)地址。其中,該訪問請求為用戶向應用服務器發(fā)送一系列操作請求,如查詢請求、瀏覽請求等。IP地址是IP協(xié)議提供的一種統(tǒng)一的地址格式,它為互聯網上的每一個網絡和每一臺主機分配一個邏輯地址,以此來屏蔽物理地址的差異。需要說明的是,應用服務器中安裝了一個或者多個應用,同一個應用服務器中的各個應用的IP地址是一致的。可以理解的是,在本實施例中,應用服務器可以理解為一個終端,應用服務器中安裝的應用可以理解為終端中安裝的不同應用,如淘寶、網易新聞等。
當獲取模塊10獲取到應用服務器的IP地址和接收到訪問請求的應用的啟動時間時,編碼模塊20對獲取模塊10所獲取的IP地址和啟動時間進行編碼,以縮短該IP地址和啟動時間字符的長度,得到編碼后的啟動時間和IP地址。
獲取模塊10還用于獲取上一訪問請求標識符中的變量,按照預設規(guī)則改變變量對應的值,得到新的變量;
當得到編碼后的IP地址和啟動時間后,獲取模塊10獲取上一訪問請求標識符中的變量,并按照預設規(guī)則改變該變量對應的值,得到新的變量。需要說明的是,該變量可以理解為一個自增的ID。預設規(guī)則為每次接收到訪問請求后,獲取到上一訪問請求標識符中的變量時,該變量所對應的值的變化規(guī)律。如將該變量的值每次增加一,或者增加二,或者減小相應的數值等。在本實施例中,每次獲取到該自增ID,都會將自增ID對應的值加一,以得到新的自增ID。
進一步地,考慮到多線程的環(huán)境,即同時接收到多個用戶的訪問請求時,采用線程安全的長整型來表示該變量,以使每個線程都能得到不同的變量,即使每個訪問請求對應著不同的自增ID。其中,長整型是程序設計中數據類型的一種表現方式,通常用long表示長整型,long表示有符號64位整數,其范圍是-2^63至2^63-1Int64,unsigned long表示無符號64位整數,其范圍是0-2^64至1 UInt64。
如在Java中,使用“private static AtomicLong lastId=new AtomicLong();”進行該變量的聲明。
拼接模塊30,用于將新的變量、編碼后的啟動時間和IP地址進行拼接,以生成訪問請求的標識符。
當得到新的變量之后,拼接模塊30將該新的變量、編碼后的啟動時間和IP地址進行拼接,該拼接所得的結果即為該訪問請求所對應的標識符,該標識符中包含了該應用服務器的IP地址和啟動時間,同時還包括了一個唯一的變量,該標識符可以唯一區(qū)分該訪問請求,即可以通過該標識符,確定該訪問請求所對應的應用服務器,以及確定該訪問請求所對應的應用,同時通過該標識符可以區(qū)分用一應用中的不同訪問請求。且在分布式環(huán)境中,由于該標識符中含有應用服務器的IP地址,因此可以區(qū)分各個訪問請求所屬的應用服務器。當分布式系統(tǒng)中的某個訪問請求出現故障時,可以通過該訪問請求的標識符確定該訪問請求所屬的應用服務器,以便于進行故障排查。同時,在分布式環(huán)境中,通過不同訪問請求所對應的標識符,確定各個應用服務器對應的訪問請求,便于進行數據分析。以解決在使用UUID作為訪問請求的標識符時,在分布式環(huán)境中不能確定各個訪問請求所屬的應用服務器的問題。
進一步地,還可以根據需要在生成標識符的過程,添加應用服務器的主機號等信息。
需要說明的是,在對新的變量、編碼后的啟動時間和IP地址進行拼接過程中,新的變量、編碼后的啟動時間和IP地址三者之間拼接的先后順序可以根據需要而設置,如可以設置為新的變量在前面,編碼后的啟動時間在中間,編碼后的IP地址在后面;或者設置為編碼后的時間在前面,新的變量在中間,編碼后的IP地址在后面。
在本實施例中,并不需要獲取強隨機數生成訪問請求的標識符,提高了生成訪問請求標識符的速率。經過測試可知,生成一千萬次UUID平均需要耗時7秒,而通過新的變量、編碼后的啟動時間和IP地址生成訪問請求的標識符只需要1.2秒。
本實施例通過當接收到當前訪問應用服務器中應用的訪問請求時,對預先存儲的應用的啟動時間和應用服務器的IP地址進行編碼,得到編碼后的啟動時間和IP地址,并按照預設規(guī)則改變所獲取的上一訪問請求標識符中的變量對應的值,得到新的變量,將新的變量、編碼后的啟動時間和IP地址進行拼接,生成訪問請求的標識符??s短了訪問請求的標識符的長度和標識符的生成時間,提高了訪問請求的標識符的性能。
進一步地,提出本發(fā)明標識符生成裝置第二實施例。
標識符生成裝置第二實施例與標識符生成裝置第一實施例的區(qū)別在于,參照圖4,編碼模塊20包括:
第一轉換單元21,用于將啟動時間和IP地址按照對應的編碼規(guī)則轉換為16進制的數字;
第二轉換單元22,用于將16進制的數字轉換為64進制的數字,得到編碼后的啟動時間和IP地址。
需要說明的是,IP地址是一個32位的二進制數,通常被分割為4個“8位二進制數”(也就是4個字節(jié))。IP地址通常用“點分十進制”表示成(a.b.c.d)的形式,其中,a,b,c,d都是0~255之間的十進制整數,如IP地址可表示為255.255.255.255。
當獲取模塊10獲取到應用服務器的IP地址時,按照編碼IP地址的編碼規(guī)則對該IP地址進行編碼的過程為:獲取IP地址中的4個“8位二進制數”,具體地,可以通過小數點區(qū)分IP地址中4個“8位二進制數”,以獲取該IP地址中的4個“8位二進制數”。當得到IP地址中的“8位二進制數”時,第一轉換單元21將各個“8位二進制數”轉換為2位的16進制數,得到與該IP地址對應的16進制數。如當該IP地址為255.255.255.255,對該IP地址進行編碼后,所得與該IP地址對應的16進制數為FFFFFFFF。然后第二轉換單元22將與該IP地址對應的16進制數轉換為64進制數,即得到64進制的IP地址,改64進制的IP地址即為編碼后的IP地址,即用a-z、A-Z和“-”這64個字符來表示IP地址。通過該編碼規(guī)則得到的IP地址的字符長度短于采用Base64編碼方式得到IP地址。
當獲取到應用服務器的啟動時間,按照與啟動時間對應的編碼規(guī)則編碼該啟動時間。需要說明的是,在本實施例中,應用服務器的啟動時間是一個長整型的時間戳,該時間戳包含了應用服務器啟動時間的年、月、日、時、分、秒和毫秒,即所獲取的啟動時間具體到該應用服務器啟動的年、月、日、時、分、秒和毫秒。按照與啟動時間對應的編碼規(guī)則編碼該啟動時間具體過程為:第一轉換單元21將啟動時間的時間戳轉換為16進制的時間戳,然后第二轉換單元22將16進制的時間戳轉換為64進制的時間戳,得到以64進制數表示的啟動時間。
本實施例通過將應用服務器的IP地址和應用服務器中應用的啟動時間轉換成64進制數來表示,縮短了IP地址和啟動時間字符的長度,提高了生成訪問請求的標識符的速率。
進一步地,提出本發(fā)明標識符生成裝置第三實施例。
標識符生成裝置第三實施例與標識符生成裝置第一實施例的區(qū)別在于,參照圖5,標識符生成裝置還包括:
設置模塊40,用于設置標識符的分隔符和新的變量、編碼后的啟動時間和IP地址的拼接順序;
拼接模塊30還用于根據分隔符和拼接順序將新的變量、編碼后的啟動時間和IP地址進行拼接,以生成訪問請求的標識符。
在得到編碼后的IP地址、編碼后的啟動時間和新的變量之后,設置模塊40設置該訪問請求標識符的分隔符,以及該新的變量、編碼后的啟動時間和IP地址的拼接順序。具體地,標識符的分隔符可為小數點或者其它可以區(qū)分不同數據的符號,如頓號等。新的變量、編碼后的啟動時間和IP地址三者之間的拼接順序可以根據需要而設置。
在對新的變量、編碼后的啟動時間和IP地址三者進行拼接以得到訪問請求的標識符時,拼接模塊30根據分隔符和拼接順序將新的變量、編碼后的啟動時間和IP地址進行拼接,以生成該訪問請求的標識符。如當分隔符為“.”,新的變量為A,編碼后的IP地址為B,編碼后的啟動時間為C,拼接順序為BAC時,所得的標識符為“B.A.C”。
本實施例通過根據所設置分隔符和新的變量、編碼后的啟動時間和IP地址的拼接順序生成訪問請求的標識符,提高了所生成的標識符的可讀性,同時也可以快速確定訪問請求所屬應用服務器以及所對應的應用。
進一步地,提出本發(fā)明標識符生成裝置第四實施例。
標識符生成裝置第四實施例與標識符生成裝置第一實施例的區(qū)別在于,參照圖6,獲取模塊10還用于獲取訪問請求對應的操作指令,確定訪問請求對應的操作指令的個數;
標識符生成裝置還包括存儲模塊50,用于若訪問請求至少對應著兩個操作指令,則根據訪問請求的標識符,將各個操作指令對應的日志進行串聯存儲。
當獲取模塊10獲取到訪問應用服務器的訪問請求時,獲取該訪問請求所對應的操作指令,確定該訪問請求對應的操作指令的個數。若該訪問請求只對應著一個操作指令,存儲模塊50則直接存儲該訪問請求對應的操作指令的日志。若該訪問請求至少對應著兩個操作指令,存儲模塊50則根據該訪問請求的標識符,將各個操作指令對應的日志進行串聯存儲。如某用戶通過移動終端向應用服務器發(fā)送了一個訪問請求,該訪問請求中包含了5次查詢操作,則通過唯一標識該訪問請求的標識符,將這5次查詢操作對應的日志進行串聯存儲,即將含有相同標識符的查詢操作進行串聯存儲,以供后續(xù)對該應用服務器中的訪問請求進行日志分析。
本實施例通過根據標識符將訪問請求對應的多個操作指令所對應的日志進行串聯存儲,以供后續(xù)在對訪問請求進行日志分析過程中,可以快速找到不同訪問請求所對應的日志,提高對訪問請求進行日志分析的效率。
進一步地,提出本發(fā)明標識符生成裝置第五實施例。
標識符生成裝置第五實施例與標識符生成裝置第一實施例的區(qū)別在于,參照圖3,獲取模塊10還用于當偵測到應用服務器中應用的啟動操作時,獲取應用的啟動時間和應用服務器的IP地址,并存儲啟動時間和IP地址。
當偵測到應用服務器中應用的啟動操作時,獲取模塊10獲取該應用的啟動時間和該應用所在的應用服務器的IP地址。當獲取到該應用的啟動時間和該應用所在的應用服務器的IP地址后,存儲所獲取的IP地址和啟動時間。其中,在獲取應用服務器的IP地址時,可以根據該應用服務器所使用的編譯語言的不同,采取與該編譯語言對應的方法獲取該應用服務器的IP地址。
如在Java中,可以通過NetworkInterface接口來獲取該應用服務器的IP地址,具體為通過NetworkInterface.getNetworkInterfaces()來獲取NetworkInterface對象集合,然后遍歷該集合中的每個NetworkInterface,通過getInetAddresses方法來獲取InetAddress集合,篩選符合條件的InetAddress對象。在篩選過程中,包括過濾內網InetAddress對象和本地InetAddress對象。通常情況下,只會有一個符合條件的InetAddress對象,然后通過getHostAddress方法可以獲取當前符合條件的InetAddress對象的IP地址。上述InetAddress對象指的是Java對IP地址的封裝,它的實例對象包含以數字形式保存的IP地址,同時還可能包含主機名。InetAddress類提供了將主機名解析為IP地址的方法。NetworkInterface類指的是Java提供的一個類,這個類可以得到應用服務器中所有的物理網絡接口和虛擬機等軟件利用應用服務器的物理網絡接口創(chuàng)建的邏輯網絡接口的信息。而NetworkInterface對象集合指的是該應用服務器所有的物理和邏輯的網絡接口。
在獲取該應用的啟動時間過程中,可以通過靜態(tài)變量在該應用啟動過程中,獲取該應用的啟動時間時,即通過靜態(tài)變量在該應用程序初始化的時候獲取該應用的啟動時間。例如,在Java中,通過采用“private static final Long startTimeStamp=System.currentTimeMillis();”獲取應用的啟動時間。
本實施例通過在應用啟動時獲取其啟動時間,并獲取應用服務器的IP地址,并存儲所獲取的啟動時間和IP地址,使得在后續(xù)生成標識符過程中,不需要再去獲取IP地址和啟動時間,提高了訪問請求標識符的生成速率。
本發(fā)明還提供一種標識符生成方法。
參照圖7,圖7為本發(fā)明標識符生成方法第一實施例的流程示意圖。
本實施例提出一種標識符生成方法,標識符生成方法包括:
步驟S10,當接收到當前訪問應用服務器中應用的訪問請求時,獲取預先存儲的應用的啟動時間和應用服務器的網際互聯協(xié)議IP地址;
步驟S20,對啟動時間和IP地址進行編碼,得到編碼后的啟動時間和IP地址;
當接收到當前訪問應用服務器中應用的訪問請求時,獲取預先存儲的該應用的啟動時間和該應用服務器的IP(Internet Protocol,網際互聯協(xié)議)地址。其中,該訪問請求為用戶向應用服務器發(fā)送一系列操作請求,如查詢請求、瀏覽請求等。IP地址是IP協(xié)議提供的一種統(tǒng)一的地址格式,它為互聯網上的每一個網絡和每一臺主機分配一個邏輯地址,以此來屏蔽物理地址的差異。需要說明的是,應用服務器中安裝了一個或者多個應用,同一個應用服務器中的各個應用的IP地址是一致的。可以理解的是,在本實施例中,應用服務器可以理解為一個終端,應用服務器中安裝的應用可以理解為終端中安裝的不同應用,如淘寶、網易新聞等。
當獲取到應用服務器的IP地址和接收到訪問請求的應用的啟動時間時,對所獲取的IP地址和啟動時間進行編碼,以縮短該IP地址和啟動時間字符的長度,得到編碼后的啟動時間和IP地址。
步驟S30,獲取上一訪問請求標識符中的變量,按照預設規(guī)則改變變量對應的值,得到新的變量;
當得到編碼后的IP地址和啟動時間后,獲取上一訪問請求標識符中的變量,并按照預設規(guī)則改變該變量對應的值,得到新的變量。需要說明的是,該變量可以理解為一個自增的ID。預設規(guī)則為每次接收到訪問請求后,獲取到上一訪問請求標識符中的變量時,該變量所對應的值的變化規(guī)律。如將該變量的值每次增加一,或者增加二,或者減小相應的數值等。在本實施例中,每次獲取到該自增ID,都會將自增ID對應的值加一,以得到新的自增ID。
進一步地,考慮到多線程的環(huán)境,即同時接收到多個用戶的訪問請求時,采用線程安全的長整型來表示該變量,以使每個線程都能得到不同的變量,即使每個訪問請求對應著不同的自增ID。其中,長整型是程序設計中數據類型的一種表現方式,通常用long表示長整型,long表示有符號64位整數,其范圍是-2^63至2^63-1Int64,unsigned long表示無符號64位整數,其范圍是0-2^64至1 UInt64。
如在Java中,使用“private static AtomicLong lastId=new AtomicLong();”進行該變量的聲明。
步驟S40,將新的變量、編碼后的啟動時間和IP地址進行拼接,以生成訪問請求的標識符。
當得到新的變量之后,將該新的變量、編碼后的啟動時間和IP地址進行拼接,該拼接所得的結果即為該訪問請求所對應的標識符,該標識符中包含了該應用服務器的IP地址和啟動時間,同時還包括了一個唯一的變量,該標識符可以唯一區(qū)分該訪問請求,即可以通過該標識符,確定該訪問請求所對應的應用服務器,以及確定該訪問請求所對應的應用,同時通過該標識符可以區(qū)分用一應用中的不同訪問請求。且在分布式環(huán)境中,由于該標識符中含有應用服務器的IP地址,因此可以區(qū)分各個訪問請求所屬的應用服務器。當分布式系統(tǒng)中的某個訪問請求出現故障時,可以通過該訪問請求的標識符確定該訪問請求所屬的應用服務器,以便于進行故障排查。同時,在分布式環(huán)境中,通過不同訪問請求所對應的標識符,確定各個應用服務器對應的訪問請求,便于進行數據分析。以解決在使用UUID作為訪問請求的標識符時,在分布式環(huán)境中不能確定各個訪問請求所屬的應用服務器的問題。
需要說明的是,在對新的變量、編碼后的啟動時間和IP地址進行拼接過程中,新的變量、編碼后的啟動時間和IP地址三者之間拼接的先后順序可以根據需要而設置,如可以設置為新的變量在前面,編碼后的啟動時間在中間,編碼后的IP地址在后面;或者設置為編碼后的時間在前面,新的變量在中間,編碼后的IP地址在后面。
在本實施例中,并不需要獲取強隨機數生成訪問請求的標識符,提高了生成訪問請求標識符的速率。經過測試可知,生成一千萬次UUID平均需要耗時7秒,而通過新的變量、編碼后的啟動時間和IP地址生成訪問請求的標識符只需要1.2秒。
本實施例通過當接收到當前訪問應用服務器中應用的訪問請求時,對預先存儲的應用的啟動時間和應用服務器的IP地址進行編碼,得到編碼后的啟動時間和IP地址,并按照預設規(guī)則改變所獲取的上一訪問請求標識符中的變量對應的值,得到新的變量,將新的變量、編碼后的啟動時間和IP地址進行拼接,生成訪問請求的標識符??s短了訪問請求的標識符的長度和標識符的生成時間,提高了訪問請求的標識符的性能。
進一步地,提出本發(fā)明標識符生成方法第二實施例。
標識符生成方法第二實施例與標識符生成方法第一實施例的區(qū)別在于,參照圖8,步驟S20包括:
步驟S21,將啟動時間和IP地址按照對應的編碼規(guī)則轉換為16進制的數字;
步驟S22,將16進制的數字轉換為64進制的數字,得到編碼后的啟動時間和IP地址。
需要說明的是,IP地址是一個32位的二進制數,通常被分割為4個“8位二進制數”(也就是4個字節(jié))。IP地址通常用“點分十進制”表示成(a.b.c.d)的形式,其中,a,b,c,d都是0~255之間的十進制整數,如IP地址可表示為255.255.255.255。
當獲取到應用服務器的IP地址時,按照編碼IP地址的編碼規(guī)則對該IP地址進行編碼的過程為:獲取IP地址中的4個“8位二進制數”,具體地,可以通過小數點區(qū)分IP地址中4個“8位二進制數”,以獲取該IP地址中的4個“8位二進制數”。當得到IP地址中的“8位二進制數”時,將各個“8位二進制數”轉換為2位的16進制數,得到與該IP地址對應的16進制數。如當該IP地址為255.255.255.255,對該IP地址進行編碼后,所得與該IP地址對應的16進制數為FFFFFFFF。然后將與該IP地址對應的16進制數轉換為64進制數,即得到64進制的IP地址,改64進制的IP地址即為編碼后的IP地址,即用a-z、A-Z和“-”這64個字符來表示IP地址。通過該編碼規(guī)則得到的IP地址的字符長度短于采用Base64編碼方式得到IP地址。
當獲取到應用服務器的啟動時間,按照與啟動時間對應的編碼規(guī)則編碼該啟動時間。需要說明的是,在本實施例中,應用服務器的啟動時間是一個長整型的時間戳,該時間戳包含了應用服務器啟動時間的年、月、日、時、分、秒和毫秒,即所獲取的啟動時間具體到該應用服務器啟動的年、月、日、時、分、秒和毫秒。按照與啟動時間對應的編碼規(guī)則編碼該啟動時間具體過程為:將啟動時間的時間戳轉換為16進制的時間戳,然后將16進制的時間戳轉換為64進制的時間戳,得到以64進制數表示的啟動時間。
本實施例通過將應用服務器的IP地址和應用服務器中應用的啟動時間轉換成64進制數來表示,縮短了IP地址和啟動時間字符的長度,提高了生成訪問請求的標識符的速率。
進一步地,提出本發(fā)明標識符生成方法第三實施例。
標識符生成方法第三實施例與標識符生成方法第一實施例的區(qū)別在于,參照圖9,標識符生成方法還包括:
步驟S50,設置標識符的分隔符和新的變量、編碼后的啟動時間和IP地址的拼接順序;
步驟S40包括步驟S41,根據分隔符和拼接順序將新的變量、編碼后的啟動時間和IP地址進行拼接,以生成訪問請求的標識符。
在得到編碼后的IP地址、編碼后的啟動時間和新的變量之后,設置該訪問請求標識符的分隔符,以及該新的變量、編碼后的啟動時間和IP地址的拼接順序。具體地,標識符的分隔符可為小數點或者其它可以區(qū)分不同數據的符號,如頓號等。新的變量、編碼后的啟動時間和IP地址三者之間的拼接順序可以根據需要而設置。
在對新的變量、編碼后的啟動時間和IP地址三者進行拼接以得到訪問請求的標識符時,根據分隔符和拼接順序將新的變量、編碼后的啟動時間和IP地址進行拼接,以生成該訪問請求的標識符。如當分隔符為“.”,新的變量為A,編碼后的IP地址為B,編碼后的啟動時間為C,拼接順序為BAC時,所得的標識符為“B.A.C”。
本實施例通過根據所設置分隔符和新的變量、編碼后的啟動時間和IP地址的拼接順序生成訪問請求的標識符,提高了所生成的標識符的可讀性,同時也可以快速確定訪問請求所屬應用服務器以及所對應的應用。
進一步地,提出本發(fā)明標識符生成方法第四實施例。
標識符生成方法第四實施例與標識符生成方法第一實施例的區(qū)別在于,參照圖10,標識符生成方法還包括:
步驟S60,獲取訪問請求對應的操作指令,確定訪問請求對應的操作指令的個數;
步驟S70,若訪問請求至少對應著兩個操作指令,則根據訪問請求的標識符,將各個操作指令對應的日志進行串聯存儲。
當獲取到訪問應用服務器的訪問請求時,獲取該訪問請求所對應的操作指令,確定該訪問請求對應的操作指令的個數。若該訪問請求只對應著一個操作指令,則直接存儲該訪問請求對應的操作指令的日志。若該訪問請求至少對應著兩個操作指令,則根據該訪問請求的標識符,將各個操作指令對應的日志進行串聯存儲。如某用戶通過移動終端向應用服務器發(fā)送了一個訪問請求,該訪問請求中包含了5次查詢操作,則通過唯一標識該訪問請求的標識符,將這5次查詢操作對應的日志進行串聯存儲,即將含有相同標識符的查詢操作進行串聯存儲,以供后續(xù)對該應用服務器中的訪問請求進行日志分析。
本實施例通過根據標識符將訪問請求對應的多個操作指令所對應的日志進行串聯存儲,以供后續(xù)在對訪問請求進行日志分析過程中,可以快速找到不同訪問請求所對應的日志,提高對訪問請求進行日志分析的效率。
進一步地,提出本發(fā)明標識符生成方法第五實施例。
標識符生成方法第五實施例與標識符生成方法第一實施例的區(qū)別在于,參照圖11,標識符生成方法還包括:
步驟S80,當偵測到應用服務器中應用的啟動操作時,獲取應用的啟動時間和應用服務器的IP地址,并存儲啟動時間和IP地址。
當偵測到應用服務器中應用的啟動操作時,獲取該應用的啟動時間和該應用所在的應用服務器的IP地址。當獲取到該應用的啟動時間和該應用所在的應用服務器的IP地址后,存儲所獲取的IP地址和啟動時間。其中,在獲取應用服務器的IP地址時,可以根據該應用服務器所使用的編譯語言的不同,采取與該編譯語言對應的方法獲取該應用服務器的IP地址。
如在Java中,可以通過NetworkInterface接口來獲取該應用服務器的IP地址,具體為通過NetworkInterface.getNetworkInterfaces()來獲取NetworkInterface對象集合,然后遍歷該集合中的每個NetworkInterface,通過getInetAddresses方法來獲取InetAddress集合,篩選符合條件的InetAddress對象。在篩選過程中,包括過濾內網InetAddress對象和本地InetAddress對象。通常情況下,只會有一個符合條件的InetAddress對象,然后通過getHostAddress方法可以獲取當前符合條件的InetAddress對象的IP地址。上述InetAddress對象指的是Java對IP地址的封裝,它的實例對象包含以數字形式保存的IP地址,同時還可能包含主機名。InetAddress類提供了將主機名解析為IP地址的方法。NetworkInterface類指的是Java提供的一個類,這個類可以得到應用服務器中所有的物理網絡接口和虛擬機等軟件利用應用服務器的物理網絡接口創(chuàng)建的邏輯網絡接口的信息。而NetworkInterface對象集合指的是該應用服務器所有的物理和邏輯的網絡接口。
在獲取該應用的啟動時間過程中,可以通過靜態(tài)變量在該應用啟動過程中,獲取該應用的啟動時間時,即通過靜態(tài)變量在該應用程序初始化的時候獲取該應用的啟動時間。例如,在Java中,通過采用“private static final Long startTimeStamp=System.currentTimeMillis();”獲取應用的啟動時間。
本實施例通過在應用啟動時獲取其啟動時間,并獲取應用服務器的IP地址,并存儲所獲取的啟動時間和IP地址,使得在后續(xù)生成標識符過程中,不需要再去獲取IP地址和啟動時間,提高了訪問請求標識符的生成速率。
需要說明的是,在本文中,術語“包括”、“包含”或者其任何其它變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過程、方法、物品或者系統(tǒng)不僅包括那些要素,而且還包括沒有明確列出的其它要素,或者是還包括為這種過程、方法、物品或者系統(tǒng)所固有的要素。在沒有更多限制的情況下,由語句“包括一個……”限定的要素,并不排除在包括該要素的過程、方法、物品或者系統(tǒng)中還存在另外的相同要素。
上述本發(fā)明實施例序號僅僅為了描述,不代表實施例的優(yōu)劣。
通過以上的實施方式的描述,本領域的技術人員可以清楚地了解到上述實施例方法可借助軟件加必需的通用硬件平臺的方式來實現,當然也可以通過硬件,但很多情況下前者是更佳的實施方式?;谶@樣的理解,本發(fā)明的技術方案本質上或者說對現有技術做出貢獻的部分可以以軟件產品的形式體現出來,該計算機軟件產品存儲在一個存儲介質(如ROM/RAM、磁碟、光盤)中,包括若干指令用以使得一臺終端設備(可以是手機,計算機,服務器,空調器,或者網絡設備等)執(zhí)行本發(fā)明各個實施例所述的方法。
以上僅為本發(fā)明的優(yōu)選實施例,并非因此限制本發(fā)明的專利范圍,凡是利用本發(fā)明說明書及附圖內容所作的等效結構或等效流程變換,或直接或間接運用在其它相關的技術領域,均同理包括在本發(fā)明的專利保護范圍內。