本公開涉及分布式緩存同步領域,具體地,涉及一種分布式緩存同步方法、裝置、節點和系統。
背景技術:
目前,進行分布式緩存同步的方法通常包括以下三種:
1、存在數據更新的節點只向其他節點廣播更新通知。
2、存在數據更新的節點只向其他節點廣播更新數據。
3、存在數據更新的節點只向其他節點廣播更新操作。
然而,這三種方法都屬于靜態分布式緩存同步方法,其沒有考慮節點的自身性能,因此會導致更新效率低下。
技術實現要素:
本公開實施例的目的是提供一種分布式緩存同步方法、裝置、節點和系統,其能夠提高分布式緩存同步的更新效率。
根據本公開實施例的第一方面,提供一種分布式緩存同步方法,該方法包括:分析日志文件數據;基于分析結果確定同步更新方式;以及基于所確定的同步更新方式來通知更新。
可選地,所述日志文件數據包括緩存中存儲的數據對象的標識、操作方法名、參數序列大小、操作類型、操作執行的開始時間、操作執行的結束時間和操作返回值大小。
可選地,所述基于分析結果確定同步更新方式包括:
在所述分析結果為緩存中存儲的數據對象的歷史查詢次數與歷史更新次數的比率小于第一閾值而且所述緩存中存儲的數據對象的更新操作所消耗的時間小于第二閾值時,確定所述同步更新方式為只傳播更新的數據;
在所述分析結果為所述緩存中存儲的數據對象的歷史查詢次數與歷史更新次數的比率大于等于所述第一閾值而且所述緩存中存儲的數據對象的更新操作所消耗的時間大于等于所述第二閾值時,確定所述同步更新方式為只傳播更新通知;以及
在所述分析結果為所述緩存中存儲的數據對象的歷史查詢次數與歷史更新次數的比率小于所述第一閾值而且所述緩存中存儲的數據對象的更新操作所消耗的時間大于等于所述第二閾值或者所述緩存中存儲的數據對象的歷史查詢次數與歷史更新次數的比率大于等于所述第一閾值而且所述緩存中存儲的數據對象的更新操作所消耗的時間小于所述第二閾值時,確定所述同步更新方式為只傳播更新操作的方法名和參數序列。
根據本公開實施例的第二方面,提供一種分布式緩存同步裝置,該裝置包括:分析模塊,用于分析日志文件數據;確定模塊,用于基于分析結果確定同步更新方式;以及通知模塊,用于基于所確定的同步更新方式來通知更新。
可選地,所述日志文件數據包括緩存中存儲的數據對象標識、操作方法名、參數序列大小、操作類型、操作執行的開始時間、操作執行的結束時間和操作返回值大小。
可選地,所述確定模塊基于分析結果確定同步更新方式包括:
在所述分析結果為緩存中存儲的數據對象的歷史查詢次數與歷史更新次數的比率小于第一閾值而且所述緩存中存儲的數據對象的更新操作所消耗的時間小于第二閾值時,所述確定模塊確定所述同步更新方式為只傳播更新的數據;
在所述分析結果為所述緩存中存儲的數據對象的歷史查詢次數與歷史更新次數的比率大于等于所述第一閾值而且所述緩存中存儲的數據對象的更新操作所消耗的時間大于等于所述第二閾值時,所述確定模塊確定所述同步更新方式為只傳播更新通知;以及
在所述分析結果為所述緩存中存儲的數據對象的歷史查詢次數與歷史更新次數的比率小于所述第一閾值而且所述緩存中存儲的數據對象的更新操作所消耗的時間大于等于所述第二閾值或者所述緩存中存儲的數據對象的歷史查詢次數與歷史更新次數的比率大于等于所述第一閾值而且所述緩存中存儲的數據對象的更新操作所消耗的時間小于所述第二閾值時,所述確定模塊確定所述同步更新方式為只傳播更新操作的方法名和參數序列。
根據本公開實施例的第三方面,提供一種分布式緩存同步節點,該節點包括上面描述的裝置。
根據本公開實施例的第四方面,提供一種分布式緩存同步系統,該系統包括:N個如上所述的節點;以及數據庫,用于備份N個所述節點上的數據。
可選地,每個所述節點還包括更新模塊,用于在其他所述節點中的所述通知模塊通知更新時,基于所述同步更新方式來進行更新。
可選地,所述更新模塊基于所述同步更新方式來進行更新包括:
在所述同步更新方式為只傳播更新的數據時,所述更新模塊用于接收更新數據并更新本地緩存;
在所述同步更新方式為只傳播更新通知時,所述更新模塊用于接收更新通知,并然后向所述數據庫發送數據查詢請求以更新本地緩存;以及
在所述同步更新方式為只傳播更新操作的方法名和參數序列時,所述更新模塊用于接收更新操作的方法名和參數序列,并從本地查找和調用相匹配的操作方法來更新本地緩存。
通過上述技術方案,由于本公開實施例首先分析日志文件數據,然后基于分析結果確定同步更新方式,然后基于所確定的同步更新方式來通知更新,因此其能夠根據諸如服務器、節點等的當前性能特征來選擇合適的同步更新方式,也即是一種動態的同步更新方式,因此其能夠有效地提高分布式緩存同步更新的效率。
本公開實施例的其他特征和優點將在隨后的具體實施方式部分予以詳細說明。
附圖說明
附圖是用來提供對本公開實施例的進一步理解,并且構成說明書的一部分,與下面的具體實施方式一起用于解釋本公開實施例,但并不構成對本公開實施例的限制。在附圖中:
圖1是根據本公開一種實施例的分布式緩存同步方法的流程圖;
圖2是根據本公開一種實施例的分布式緩存同步系統的示意框圖;
圖3是根據本公開一種實施例的分布式緩存同步節點的示意框圖;
圖4是根據本公開一種實施例的分布式緩存同步系統的示意框圖;以及
圖5是根據本公開又一實施例的分布式緩存同步系統的示意框圖。
具體實施方式
以下結合附圖對本公開實施例的具體實施方式進行詳細說明。應當理解的是,此處所描述的具體實施方式僅用于說明和解釋本公開實施例,并不用于限制本公開實施例。
本公開實施例所涉及的應用場景包括由多個服務器、節點等組成的分布式緩存系統,由多個對等節點組成的對等網絡,等等。
根據本公開實施例的第一方面,提供一種分布式緩存同步方法,如圖1所示,該方法可以包括步驟S101至步驟S103。
在步驟S101中,分析日志文件數據。
當用戶執行緩存操作時,就會在本地生成日志文件,用以記錄與緩存操作的執行有關的各種數據。例如,所述日志文件數據可以包括緩存中存儲的數據對象的標識、操作方法名、參數序列大小、操作類型、操作執行的開始時間、操作執行的結束時間和操作返回值大小等等。本領域技術人員應當理解,上述日志文件數據所包括的數據項僅是舉例,而非窮舉。
其中,緩存中存儲的數據對象的標識用于標識緩存中存儲的數據對象。
操作方法名指的是操作方法的簽名,或者簡稱為方法名或函數名。
以以下程序為例進行說明。addObject1就是操作方法名,表示向數據庫中新增數據。Parmeter1、parmeter2表示操作方法中涉及的參數。List<Object>表示返回值,也即返回List<Object>類型的數據。Public表示操作方法的訪問權限,也即公有權限。
public List<Object>
addObject1(String parmeter1,List<Object>parmeter2,….){
//方法體
}
操作類型表示操作方法的類型,例如增加、刪除、修改、查詢等等。
通過對本地日志文件中的數據進行分析,就能夠提取到與本地緩存有關的有用信息,例如緩存中存儲的數據對象的歷史查詢次數,緩存中存儲的數據對象的歷史更新次數,緩存中存儲的數據對象的更新操作所消耗的時間(例如,對緩存中存儲的數據對象進行增加所消耗的時間、對緩存中存儲的數據對象進行刪除所消耗的時間,對緩存中存儲的數據對象進行修改所消耗的時間,等等),操作方法的參數序列大小(例如,增加用戶名操作所涉及的參數序列大小、更改用戶名操作所涉及的參數序列大小,等等),操作方法所屬的操作類型(例如,增加用戶名操作屬于增加操作類型,更改用戶名操作屬于更改操作類型,等等)。
在提取到這些與本地緩存有關的有用信息之后,就能夠獲得本地緩存的業務操作特征,例如本地緩存的讀取頻率很高、本地緩存的更新頻率很高、本地緩存更新的數據量很大、本地緩存更新的數據量很小等等。如果基于這些業務操作特征來動態地選擇相應的同步更新方式,則能夠有效地提高分布式緩存同步更新的效率。
然后,在步驟S102中,基于分析結果確定同步更新方式。
例如,在所述分析結果為緩存中存儲的數據對象的歷史查詢次數與歷史更新次數的比率小于第一閾值而且所述緩存中存儲的數據對象的更新操作所消耗的時間小于第二閾值時,這說明緩存中存儲的數據對象的更新頻率較大并且更新的數據量較小,因此可以確定所述同步更新方式為只傳播更新的數據。
以下結合圖2所示的分布式緩存同步系統來示例性描述一下只傳播更新的數據的同步更新方式。圖2所示的分布式緩存同步系統包括數據庫100和N個服務器。
當用戶對服務器1上的緩存中存儲的數據對象X進行更改時,如果在步驟S102中確定同步更新方式為只傳播更新的數據,則服務器1會通過廣播的方式將針對緩存中存儲的數據對象X的更新數據發送給所有訂閱此緩存同步通知消息的其他服務器,也即服務器2至服務器N,然后服務器2至服務器N接收針對緩存中存儲的數據對象X的更新數據,并更新自己的本地緩存。
另外,服務器1還會將針對緩存中存儲的數據對象X的更新數據發送給數據庫100,以便于數據庫100進行備份。
再例如,在所述分析結果為所述緩存中存儲的數據對象的歷史查詢次數與歷史更新次數的比率大于等于所述第一閾值而且所述緩存中存儲的數據對象的更新操作所消耗的時間大于等于所述第二閾值時,這說明緩存中存儲的數據對象的更新頻率較小并且更新的數據量較大,因此可以確定所述同步更新方式為只傳播更新通知。
仍然結合圖2所示的分布式緩存同步系統來示例性描述一下只傳播更新通知的同步更新方式。
當用戶對服務器1上的緩存中存儲的數據對象X進行更改時,如果在步驟S102中確定同步更新方式為只傳播更新通知,則服務器1會向所有訂閱此緩存同步通知消息的其他服務器,也即服務器2至服務器N,發送關于緩存中存儲的數據對象X的失效通知的廣播消息,當服務器2至服務器N接收到緩存失效通知后,向數據庫100發送數據查詢請求,以便從數據庫100中獲取針對緩存中存儲的數據對象X的更新數據來更新自己的本地緩存。
再例如,在所述分析結果為所述緩存中存儲的數據對象的歷史查詢次數與歷史更新次數的比率小于所述第一閾值而且所述緩存中存儲的數據對象的更新操作所消耗的時間大于等于所述第二閾值或者所述緩存中存儲的數據對象的歷史查詢次數與歷史更新次數的比率大于等于所述第一閾值而且所述緩存中存儲的數據對象的更新操作所消耗的時間小于所述第二閾值時,這說明更新頻率較大且更新的數據量較大或者更新頻率較小且更新的數據量較小,因此可以確定所述同步更新方式為只傳播更新操作的方法名和參數序列。
仍然結合圖2所示的分布式緩存同步系統來示例性描述一下只傳播更新操作的方法名和參數序列的同步更新方式。
當用戶對服務器1上的緩存中存儲的數據對象X進行更改時,如果在步驟S102中確定同步更新方式為只傳播更新操作的方法名和參數序列,則服務器1會將更新緩存中存儲的數據對象X的方法名及有序的參數列表打包并附載在消息體上通過廣播消息通知所有訂閱此消息的其它服務器,也即服務器2至服務器N,當服務器2至服務器N接收到更新操作的方法名和參數序列時,會根據接收到的更新操作方法名和參數序列,從本地查找并調用相匹配的操作方法來執行針對緩存中存儲的數據對象X的本地緩存更新。由于每個服務器上都有相同的操作方法的副本,因此直接調用本地的操作方法,就可以實現本地緩存的更新操作。
這樣,通過步驟S102,就在確定同步更新方式時,充分考慮了業務操作特征,從而無論是更新頻率較大還是被更新的數據量或參數較大,都能夠有效地提高分布式緩存同步更新的效率,并能夠避免網絡阻塞,減輕服務器2至N執行本地更新操作的負載。
另外,第一閾值和第二閾值是常量,其可以根據本地緩存的業務操作特征進行設置。
然后,在步驟S103中,基于所確定的同步更新方式來通知更新。
仍然以圖2所示的分布式緩存同步系統為例進行說明,在服務器1確定了同步更新方式之后,其會向服務器2至N通知是采用只傳播更新的數據、還是只傳播更新通知、還是只傳播更新操作的方法名和參數序列的同步更新方式來更新服務器2至N的本地緩存。
因此通過采用步驟S101至步驟S103,能夠非常有效地提高分布式緩存同步更新的效率。
根據本公開實施例的第二方面,提供一種分布式緩存同步裝置,如圖3所示,該裝置可以包括分析模塊301、確定模塊302和通知模塊303。以下對這些模塊進行詳細描述。
分析模塊301,用于分析日志文件數據。
當用戶執行緩存操作時,就會在本地生成日志文件,用以記錄與緩存操作的執行有關的各種數據。例如,所述日志文件數據可以包括緩存中存儲的數據對象的標識、操作方法名、參數序列大小、操作類型、操作執行的開始時間、操作執行的結束時間和操作返回值大小等等。本領域技術人員應當理解,上述日志文件數據所包括的數據項僅是舉例,而非窮舉。
其中,緩存中存儲的數據對象的標識用于標識緩存中存儲的數據對象。
操作方法名指的是操作方法的簽名,或者簡稱為方法名或函數名。
以以下程序為例進行說明。addObject1就是操作方法名,表示向數據庫中新增數據。Parmeter1、parmeter2表示操作方法中涉及的參數。List<Object>表示返回值,也即返回List<Object>類型的數據。Public表示操作方法的訪問權限,也即公有權限。
public List<Object>
addObject1(String parmeter1,List<Object>parmeter2,….){
//方法體
}
操作類型表示操作方法的類型,例如增加、刪除、修改、查詢等等。
通過分析模塊301對本地日志文件中的數據進行分析,就能夠提取到與本地緩存有關的有用信息,例如緩存中存儲的數據對象的歷史查詢次數,緩存中存儲的數據對象的歷史更新次數,緩存中存儲的數據對象的更新操作所消耗的時間(例如,對緩存中存儲的數據對象進行增加所消耗的時間、對緩存中存儲的數據對象進行刪除所消耗的時間,對緩存中存儲的數據對象進行修改所消耗的時間,等等),操作方法的參數序列大小(例如,增加用戶名操作所涉及的參數序列大小、更改用戶名操作所涉及的參數序列大小,等等),操作方法所屬的操作類型(例如,增加用戶名操作屬于增加操作類型,更改用戶名操作屬于更改操作類型,等等)。
在提取到這些與本地緩存有關的有用信息之后,就能夠獲得本地緩存的業務操作特征,例如本地緩存的讀取頻率很高、本地緩存的更新頻率很高、本地緩存更新的數據量很大、本地緩存更新的數據量很小等等。如果確定模塊302基于這些業務操作特征來動態地確定相應的同步更新方式,則能夠有效地提高分布式緩存同步更新的效率。
確定模塊302,用于基于分析結果確定同步更新方式。
例如,在分析模塊301的分析結果為緩存中存儲的數據對象的歷史查詢次數與歷史更新次數的比率小于第一閾值而且所述緩存中存儲的數據對象的更新操作所消耗的時間小于第二閾值時,所述確定模塊302可以確定所述同步更新方式為只傳播更新的數據;
在分析模塊301的分析結果為所述緩存中存儲的數據對象的歷史查詢次數與歷史更新次數的比率大于等于所述第一閾值而且所述緩存中存儲的數據對象的更新操作所消耗的時間大于等于所述第二閾值時,所述確定模塊302可以確定所述同步更新方式為只傳播更新通知;以及
在分析模塊301的分析結果為所述緩存中存儲的數據對象的歷史查詢次數與歷史更新次數的比率小于所述第一閾值而且所述緩存中存儲的數據對象的更新操作所消耗的時間大于等于所述第二閾值或者所述緩存中存儲的數據對象的歷史查詢次數與歷史更新次數的比率大于等于所述第一閾值而且所述緩存中存儲的數據對象的更新操作所消耗的時間小于所述第二閾值時,所述確定模塊302可以確定所述同步更新方式為只傳播更新操作的方法名和參數序列。
確定模塊302所執行的操作的具體方式已經結合圖2在根據本公開實施例的分布式緩存同步方法中進行了詳細描述,此處不再贅述。
通知模塊303,用于基于所確定的同步更新方式來通知更新。通知模塊303所執行的操作的具體方式已經結合圖2在根據本公開實施例的分布式緩存同步方法中進行了詳細描述,此處不再贅述。
這樣,通過采用根據本公開實施例的分布式緩存同步裝置,由于分析模塊301首先分析日志文件數據,然后確定模塊302基于分析結果確定同步更新方式,然后通知模塊303基于所確定的同步更新方式來通知更新,因此其能夠根據諸如服務器、節點等的當前性能特征來選擇合適的同步更新方式,也即這是一種動態的同步更新方式,因此其能夠有效地提高分布式緩存同步更新的效率。
根據本公開實施例的第三方面,還提供一種分布式緩存同步節點,該節點可以包括如上描述的根據本公開實施例的分布式緩存同步裝置。
根據本公開實施例的第四方面,還提供一種分布式緩存同步系統,如圖4所示,該系統可以包括:N個如上描述的根據本公開實施例的分布式緩存同步節點;以及數據庫100,用于備份N個所述分布式緩存同步節點上的數據。
可選地,根據本公開實施例的分布式緩存同步系統的又一方面,如圖5所示,每個分布式緩存同步節點還可以包括更新模塊304,用于在其他分布式緩存同步節點中的所述通知模塊303通知更新時,基于所述同步更新方式來進行更新。以下以分布式緩存同步節點1中的緩存中存儲的數據對象被更新為例進行說明。
例如,假設分布式緩存同步節點1的通知模塊303向其他分布式緩存同步節點通知所述同步更新方式為只傳播更新的數據,則分布式緩存同步節點2至N中的更新模塊304用于接收更新數據并更新本地緩存;假設分布式緩存同步節點1的通知模塊303向其他分布式緩存同步節點通知所述同步更新方式為只傳播更新通知,則分布式緩存同步節點2至N中的更新模塊304用于接收更新通知,并然后向所述數據庫100發送數據查詢請求以更新本地緩存;以及假設分布式緩存同步節點1的通知模塊303向其他分布式緩存同步節點通知所述同步更新方式為只傳播更新操作的方法名和參數序列,則分布式緩存同步節點2至N中的更新模塊304用于接收更新操作的方法名和參數序列,并從本地查找和調用相匹配的操作方法來更新本地緩存。
由于更新模塊304所執行的操作已經結合圖2在根據本公開實施例的分布式緩存同步方法中進行了詳細描述,所以此處不再贅述。
以上結合附圖詳細描述了本公開的優選實施方式,但是,本公開并不限于上述實施方式中的具體細節,在本公開的技術構思范圍內,可以對本公開的技術方案進行多種簡單變型,這些簡單變型均屬于本公開的保護范圍。
另外需要說明的是,在上述具體實施方式中所描述的各個具體技術特征,在不矛盾的情況下,可以通過任何合適的方式進行組合。為了避免不必要的重復,本公開對各種可能的組合方式不再另行說明。
此外,本公開的各種不同的實施方式之間也可以進行任意組合,只要其不違背本公開的思想,其同樣應當視為本公開所公開的內容。