本發(fā)明實(shí)施例涉及一種通信技術(shù)領(lǐng)域,特別是一種計(jì)算機(jī)應(yīng)用、數(shù)據(jù)存儲方法、微服務(wù)和微數(shù)據(jù)庫。
背景技術(shù):
微服務(wù)是一些協(xié)同工作的小而自治的服務(wù),一個(gè)微服務(wù)就是一個(gè)獨(dú)立的實(shí)體。它可以獨(dú)立的部署在paas(platformasaservice,平臺即服務(wù))上,也可以作為一個(gè)操作系統(tǒng)進(jìn)程存在。
微服務(wù)之間通過網(wǎng)絡(luò)調(diào)用進(jìn)行通信,從而加強(qiáng)了服務(wù)之間的隔離性,避免緊耦合,它們可以彼此之間獨(dú)立進(jìn)行修改,并且某一個(gè)服務(wù)的部署不會引起該服務(wù)的消費(fèi)方的變動(dòng)。
在一個(gè)計(jì)算機(jī)應(yīng)用中,如果其中一部分需要做性能提升,可以使用性能更好的技術(shù)棧來重構(gòu)和部署這一部分,而不會對其他部分產(chǎn)生影響。微服務(wù)可以幫助更快地采用新技術(shù)來提高系統(tǒng)的性能。
隨著領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)、持續(xù)交付、按需虛擬化、基礎(chǔ)設(shè)施自動(dòng)化、大型集群系統(tǒng)這些技術(shù)的流行,微服務(wù)應(yīng)運(yùn)而生。從前在一個(gè)單塊服務(wù)內(nèi),隨著新功能的增加,代碼庫會越變越大,以至于選擇在什么地方做修改都很困難,而且龐大的單塊服務(wù)只能作為一個(gè)整體進(jìn)行擴(kuò)展。即使服務(wù)中只有一小部分存在性能問題,也需要對整個(gè)單塊服務(wù)進(jìn)行修改擴(kuò)展。而且在有相當(dāng)數(shù)量行代碼的單塊服務(wù)中,即使只修改了一行代碼,也需要重新部署整個(gè)應(yīng)用程序才能夠發(fā)布該變更,導(dǎo)致這種部署的影響很大、風(fēng)險(xiǎn)很高。
在這種背景下,微服務(wù)技術(shù)體現(xiàn)了它對比以往龐大單塊服務(wù)的巨大優(yōu)勢。
采用微服務(wù)技術(shù)來構(gòu)建部署系統(tǒng)具有上述的優(yōu)點(diǎn),但是采用微服務(wù)技術(shù)也存在以下的缺點(diǎn):
采用微服務(wù)技術(shù)來構(gòu)建部署系統(tǒng),需要訪問數(shù)據(jù)庫數(shù)據(jù)和數(shù)據(jù)持久化的微服務(wù)需要通過接口讀寫數(shù)據(jù)庫。
對數(shù)據(jù)庫的部署存在兩種情況:1.部署一個(gè)共享的數(shù)據(jù)庫,所有微服務(wù)均訪問讀寫這個(gè)共享的數(shù)據(jù)庫來實(shí)現(xiàn)數(shù)據(jù)持久化;2.每個(gè)需要數(shù)據(jù)持久化的微服務(wù)維護(hù)一個(gè)自己的數(shù)據(jù)庫,該數(shù)據(jù)庫中存儲整個(gè)系統(tǒng)的數(shù)據(jù)庫的一個(gè)副本。
圖1為現(xiàn)有技術(shù)中計(jì)算機(jī)應(yīng)用的共享數(shù)據(jù)庫示意圖。
如圖1所示,在情況1中,由于所有微服務(wù)共享一個(gè)數(shù)據(jù)庫,該數(shù)據(jù)庫的內(nèi)部實(shí)現(xiàn)細(xì)節(jié)是可見的,如果其中某個(gè)微服務(wù)為了更好的表示數(shù)據(jù)或者增加可維護(hù)性而修改表結(jié)構(gòu)的話,就可能導(dǎo)致其他微服務(wù)無法正常訪問數(shù)據(jù)庫中的數(shù)據(jù),這通常需要做大量的回歸測試來保證功能的正確性。其次,所有微服務(wù)都和特定類型的數(shù)據(jù)庫綁定,無法實(shí)現(xiàn)松耦合。
在情況2中,雖然克服了情況1中所出現(xiàn)的耦合問題,但是卻導(dǎo)致了每個(gè)微服務(wù)維護(hù)了一個(gè)相當(dāng)龐大的數(shù)據(jù)庫,整個(gè)系統(tǒng)的數(shù)據(jù)冗余程度過高。而且,同步所有數(shù)據(jù)庫也會產(chǎn)生相當(dāng)大的資源占用問題。
因此,現(xiàn)有技術(shù)中微服務(wù)的數(shù)據(jù)庫通常需要做大量的回歸測試,造成維護(hù)困難的問題,或者各微服務(wù)的數(shù)據(jù)庫數(shù)據(jù)冗余程度過高,同步所有數(shù)據(jù)庫造成的資源浪費(fèi)的問題。
目前,現(xiàn)有技術(shù)還沒有相應(yīng)的方法來實(shí)現(xiàn)易于維護(hù)且高效利用資源的數(shù)據(jù)存儲方案。
技術(shù)實(shí)現(xiàn)要素:
針對現(xiàn)有技術(shù)的缺陷,本發(fā)明實(shí)施例提供一種計(jì)算機(jī)應(yīng)用、數(shù)據(jù)存儲方法、微服務(wù)和微數(shù)據(jù)庫。
一方面,本發(fā)明實(shí)施例提供一種計(jì)算機(jī)應(yīng)用,所述計(jì)算機(jī)應(yīng)用由若干個(gè)微服務(wù)實(shí)現(xiàn),每個(gè)微服務(wù)包括專屬的微數(shù)據(jù)庫,每個(gè)微數(shù)據(jù)庫只存儲對應(yīng)微服務(wù)功能的數(shù)據(jù),不同的微數(shù)據(jù)庫中的數(shù)據(jù)至少包括一個(gè)相同的屬性,每個(gè)屬性僅存在一個(gè)主節(jié)點(diǎn),所述主節(jié)點(diǎn)為具有所述屬性的更新權(quán)限的微服務(wù),且存在至少一個(gè)從節(jié)點(diǎn),所述從節(jié)點(diǎn)為不具有所述屬性的更新權(quán)限的微服務(wù),其中,所述主節(jié)點(diǎn)對該屬性進(jìn)行讀數(shù)據(jù)或更新數(shù)據(jù)的操作,所述從節(jié)點(diǎn)對該屬性進(jìn)行讀數(shù)據(jù)操作。
另一方面,本發(fā)明實(shí)施例提供一種數(shù)據(jù)存儲方法,所述方法適用于上述的計(jì)算機(jī)應(yīng)用,包括:
主節(jié)點(diǎn)對主節(jié)點(diǎn)的微數(shù)據(jù)庫中屬性的記錄進(jìn)行更新操作;
主節(jié)點(diǎn)向至少一個(gè)從節(jié)點(diǎn)發(fā)送事件,所述事件包括所述主節(jié)點(diǎn)對所述屬性的記錄進(jìn)行更新操作,使得所述從節(jié)點(diǎn)接收所述事件,根據(jù)所述事件,對從節(jié)點(diǎn)的微數(shù)據(jù)庫進(jìn)行同步更新。
另一方面,本發(fā)明實(shí)施例還提供一種微服務(wù),包括存儲器、處理器、總線以及存儲在存儲器上并可在處理器上運(yùn)行的計(jì)算機(jī)程序,所述處理器執(zhí)行所述程序時(shí)實(shí)現(xiàn)以上方法。
另一方面,本發(fā)明實(shí)施例還提供一種計(jì)算機(jī)可讀存儲介質(zhì),其上存儲有計(jì)算機(jī)程序,所述程序被處理器執(zhí)行時(shí)實(shí)現(xiàn)如上方法。
另一方面,本發(fā)明實(shí)施例還提供一種微數(shù)據(jù)庫,所述微數(shù)據(jù)庫是微服務(wù)的專屬的微數(shù)據(jù)庫,每個(gè)微數(shù)據(jù)庫只存儲對應(yīng)微服務(wù)功能的數(shù)據(jù),不同的微數(shù)據(jù)庫中的數(shù)據(jù)至少包括一個(gè)相同的屬性,每個(gè)屬性僅存在一個(gè)主節(jié)點(diǎn),所述主節(jié)點(diǎn)為具有所述屬性的更新權(quán)限的微服務(wù),且存在至少一個(gè)從節(jié)點(diǎn),所述從節(jié)點(diǎn)為不具有所述屬性的更新權(quán)限的微服務(wù),其中,所述主節(jié)點(diǎn)對該屬性進(jìn)行讀數(shù)據(jù)或更新數(shù)據(jù)的操作,所述從節(jié)點(diǎn)對該屬性進(jìn)行讀數(shù)據(jù)操作。
另一方面,本發(fā)明實(shí)施例還提供一種微服務(wù),包括上述微數(shù)據(jù)庫。
由上述技術(shù)方案可知,本發(fā)明實(shí)施例提供的計(jì)算機(jī)應(yīng)用、數(shù)據(jù)存儲方法、微服務(wù)和微數(shù)據(jù)庫,所述方法通過計(jì)算機(jī)應(yīng)用中各微服務(wù)擁有屬于自己的一個(gè)微數(shù)據(jù)庫,且將一個(gè)屬性的更新權(quán)限僅賦予主節(jié)點(diǎn),使得從節(jié)點(diǎn)根據(jù)更新的事件進(jìn)行同步更新,從而可占用較少的資源就能夠維護(hù)計(jì)算機(jī)應(yīng)用中各微數(shù)據(jù)庫的一致性。
附圖說明
圖1為現(xiàn)有技術(shù)中計(jì)算機(jī)應(yīng)用的共享數(shù)據(jù)庫示意圖;
圖2為本發(fā)明一實(shí)施例提供的一種計(jì)算機(jī)應(yīng)用的結(jié)構(gòu)示意圖;
圖3為本發(fā)明又一實(shí)施例提供的一種數(shù)據(jù)存儲方法的流程示意圖;
圖4為本發(fā)明又一實(shí)施例提供的一種數(shù)據(jù)存儲方法的流程示意圖;
圖5為本發(fā)明又一實(shí)施例提供的一種數(shù)據(jù)存儲方法的流程示意圖;
圖6為本發(fā)明又一實(shí)施例提供的一種計(jì)算機(jī)應(yīng)用的結(jié)構(gòu)示意圖;
圖7為本發(fā)明又一實(shí)施例提供的一種計(jì)算機(jī)應(yīng)用的結(jié)構(gòu)示意圖;
圖8為本發(fā)明又一實(shí)施例提供的一種微服務(wù)的結(jié)構(gòu)示意圖。
具體實(shí)施方式
為使本發(fā)明實(shí)施例的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚地描述,顯然,所描述的實(shí)施例是本發(fā)明實(shí)施例一部分實(shí)施例,而不是全部的實(shí)施例。
在本實(shí)施例中,微服務(wù)是一種新型軟件架構(gòu),就是把一個(gè)大型的單個(gè)應(yīng)用程序和服務(wù)拆分為數(shù)十個(gè)的支持微服務(wù)的節(jié)點(diǎn)。微服務(wù)可以是計(jì)算機(jī),也可以是進(jìn)程,可提供一個(gè)功能。
計(jì)算機(jī)應(yīng)用是一個(gè)網(wǎng)絡(luò)應(yīng)用系統(tǒng),所述計(jì)算機(jī)應(yīng)用由若干個(gè)微服務(wù)實(shí)現(xiàn)。
圖2示出了本發(fā)明實(shí)施例提供的一種計(jì)算機(jī)應(yīng)用的結(jié)構(gòu)示意圖。
在本計(jì)算機(jī)應(yīng)用中,每個(gè)微服務(wù)包括專屬的微數(shù)據(jù)庫,每個(gè)微數(shù)據(jù)庫只存儲對應(yīng)微服務(wù)功能的數(shù)據(jù),不同的微數(shù)據(jù)庫中的數(shù)據(jù)至少包括一個(gè)相同的屬性,每個(gè)屬性僅存在一個(gè)主節(jié)點(diǎn),所述主節(jié)點(diǎn)為具有所述屬性的更新權(quán)限的微服務(wù),且存在至少一個(gè)從節(jié)點(diǎn),所述從節(jié)點(diǎn)為不具有所述屬性的更新權(quán)限的微服務(wù),其中,所述主節(jié)點(diǎn)對該屬性進(jìn)行讀數(shù)據(jù)或更新數(shù)據(jù)的操作,所述從節(jié)點(diǎn)對該屬性進(jìn)行讀數(shù)據(jù)操作。
在本實(shí)施例中,在計(jì)算機(jī)應(yīng)用中引入微數(shù)據(jù)庫的概念。
微數(shù)據(jù)庫技術(shù)是本發(fā)明提出的一種不同于現(xiàn)有技術(shù)中數(shù)據(jù)庫持久化技術(shù)的新概念。微數(shù)據(jù)庫是指每個(gè)計(jì)算機(jī)應(yīng)用中的節(jié)點(diǎn)維護(hù)自己的一個(gè)數(shù)據(jù)庫,在每個(gè)微服務(wù)自己的微數(shù)據(jù)庫中,只維護(hù)完成自己功能所需要讀寫的那部分?jǐn)?shù)據(jù)。
其中,所述微數(shù)據(jù)庫包括多個(gè)表,每個(gè)表包括多個(gè)列,一個(gè)列稱為一個(gè)屬性,每個(gè)屬性包括多個(gè)記錄。
可選地,對于計(jì)算機(jī)應(yīng)用中,所有微數(shù)據(jù)庫中表的每一個(gè)屬性,存在且僅有一個(gè)微服務(wù)節(jié)點(diǎn)為其master,即所述主節(jié)點(diǎn),其余需要讀寫此屬性的微服務(wù)節(jié)點(diǎn)均為該屬性的slave,即所述從節(jié)點(diǎn),只能由master負(fù)責(zé)對該屬性下的記錄進(jìn)行更新操作。
應(yīng)當(dāng)說明的是,每個(gè)屬性具有master和slave,而微服務(wù)之間沒有主從關(guān)系。
如圖2所示,舉例來說,微服務(wù)a的微數(shù)據(jù)庫中的屬性x的master為微服務(wù)b,微服務(wù)a和微服務(wù)c為屬性x的slave,微服務(wù)b的微數(shù)據(jù)庫中的屬性y的master為微服務(wù)a,微服務(wù)b和微服務(wù)c為屬性y的slave。
本實(shí)施例提供的計(jì)算機(jī)應(yīng)用,至少具有以下技術(shù)效果:
通過計(jì)算機(jī)應(yīng)用中各微服務(wù)擁有屬于自己的一個(gè)微數(shù)據(jù)庫,且將一個(gè)屬性的更新權(quán)限僅賦予主節(jié)點(diǎn),使得從節(jié)點(diǎn)根據(jù)更新的事件進(jìn)行同步更新,從而可占用較少的資源就能夠維護(hù)計(jì)算機(jī)應(yīng)用中各微數(shù)據(jù)庫的一致性。
圖3示出了本發(fā)明實(shí)施例提供的一種數(shù)據(jù)存儲方法的流程示意圖。
參照圖2和圖3,本發(fā)明實(shí)施例提供的方法適用于上述的計(jì)算機(jī)應(yīng)用,具體包括以下步驟:
步驟11、主節(jié)點(diǎn)對主節(jié)點(diǎn)的微數(shù)據(jù)庫中屬性的記錄進(jìn)行更新操作。
具體地,每個(gè)屬性有且只有一個(gè)主節(jié)點(diǎn),可以有若干個(gè)從節(jié)點(diǎn)。對于某個(gè)屬性的主節(jié)點(diǎn),可以對該屬性進(jìn)行讀數(shù)據(jù)和更新已存在數(shù)據(jù)的操作。對于某個(gè)屬性的從節(jié)點(diǎn),可以對該屬性進(jìn)行讀數(shù)據(jù)操作,不可以進(jìn)行追加新數(shù)據(jù)和更新已存在數(shù)據(jù)的操作。當(dāng)某個(gè)屬性的主節(jié)點(diǎn)對該屬性進(jìn)行寫操作,即更新操作時(shí),包括追加新數(shù)據(jù)和更新已存在數(shù)據(jù),主節(jié)點(diǎn)在正常完成本節(jié)點(diǎn)的寫操作。
步驟12、主節(jié)點(diǎn)向至少一個(gè)從節(jié)點(diǎn)發(fā)送事件,所述事件包括所述主節(jié)點(diǎn)對所述屬性的記錄進(jìn)行更新操作,使得所述從節(jié)點(diǎn)接收所述事件,根據(jù)所述事件,對從節(jié)點(diǎn)的微數(shù)據(jù)庫進(jìn)行同步更新。
在主節(jié)點(diǎn)在正常完成本節(jié)點(diǎn)的寫操作后,會將對該屬性的寫操作以事件的方式通知該屬性的從節(jié)點(diǎn),當(dāng)從節(jié)點(diǎn)接收到寫操作事件后,執(zhí)行與該屬性相關(guān)的修改操作,完成更新。
其中,主節(jié)點(diǎn)向發(fā)送事件的手段可采用現(xiàn)有技術(shù)中的點(diǎn)對點(diǎn)的數(shù)據(jù)傳遞方式。
所述主節(jié)點(diǎn)的微數(shù)據(jù)庫和所述從節(jié)點(diǎn)的微數(shù)據(jù)庫均為維護(hù)對應(yīng)的微服務(wù)的數(shù)據(jù)存儲設(shè)備,且由于只有屬性的主節(jié)點(diǎn)具有所述屬性的更新權(quán)限,其他從節(jié)點(diǎn)需對應(yīng)進(jìn)行同步更新,以維護(hù)各微數(shù)據(jù)庫的一致性。
可選地,所述從節(jié)點(diǎn)根據(jù)所述事件,對從節(jié)點(diǎn)的微數(shù)據(jù)庫進(jìn)行同步更新,所述從節(jié)點(diǎn)的微數(shù)據(jù)庫是維護(hù)對應(yīng)的從節(jié)點(diǎn)功能的數(shù)據(jù)存儲設(shè)備。也就是說,所述屬性的slave則需要與所述屬性的master保持同步,維持計(jì)算機(jī)應(yīng)用內(nèi)各微服務(wù)中數(shù)據(jù)庫的一致性。
應(yīng)當(dāng)說明的是,微數(shù)據(jù)庫不同于現(xiàn)有技術(shù)中水平分片和垂直分片的分布式數(shù)據(jù)庫,水平分片和垂直分片的分布式數(shù)據(jù)庫只是實(shí)現(xiàn)了對龐大單個(gè)數(shù)據(jù)庫的分片,其本質(zhì)上還是一個(gè)所有微服務(wù)共享的數(shù)據(jù)庫,并不能解決微服務(wù)數(shù)據(jù)持久化中存在的高耦合、維護(hù)數(shù)據(jù)庫之間的一致性會占用過量資源的問題,而系統(tǒng)內(nèi)每個(gè)微服務(wù)節(jié)點(diǎn)擁有屬于自己的一個(gè)微數(shù)據(jù)庫,所述微數(shù)據(jù)庫維護(hù)所述微服務(wù)完成自己功能所需要讀寫的那部分?jǐn)?shù)據(jù)。
可以理解的是,計(jì)算機(jī)應(yīng)用中各微服務(wù)擁有屬于自己的一個(gè)微數(shù)據(jù)庫,當(dāng)屬性的主節(jié)點(diǎn)進(jìn)行更新時(shí),所述屬性的從節(jié)點(diǎn)僅需更新所述屬性,即可實(shí)現(xiàn)各微數(shù)據(jù)庫的同步。
本實(shí)施例提供的數(shù)據(jù)存儲方法,至少具有以下技術(shù)效果:
通過計(jì)算機(jī)應(yīng)用中各微服務(wù)擁有屬于自己的一個(gè)微數(shù)據(jù)庫,且將一個(gè)屬性的更新權(quán)限僅賦予主節(jié)點(diǎn),使得從節(jié)點(diǎn)根據(jù)更新的事件進(jìn)行同步更新,從而可占用較少的資源就能夠維護(hù)計(jì)算機(jī)應(yīng)用中各微數(shù)據(jù)庫的一致性。
圖4示出了本發(fā)明又一實(shí)施例提供的一種數(shù)據(jù)存儲方法的流程示意圖。
參照圖4,在上述實(shí)施例的基礎(chǔ)上,本實(shí)施例提供的數(shù)據(jù)存儲方法。所述步驟11之前,所述方法還包括:
步驟10、所述主節(jié)點(diǎn)接收所述從節(jié)點(diǎn)發(fā)送的更新請求,用于請求所述主節(jié)點(diǎn)對所述主節(jié)點(diǎn)的微數(shù)據(jù)庫中屬性的記錄進(jìn)行更新操作。
當(dāng)某一屬性的slave需要更新一條記錄,所述slave需向所述屬性的master發(fā)送更新請求,用于請求master對所述主節(jié)點(diǎn)的微數(shù)據(jù)庫中屬性的記錄進(jìn)行更新操作,在主節(jié)點(diǎn)對主節(jié)點(diǎn)的微數(shù)據(jù)庫中所述屬性的記錄進(jìn)行更新操作后,再向?qū)傩詫?yīng)的各slave發(fā)送事件,使得slave接收所述事件,并對從節(jié)點(diǎn)的微數(shù)據(jù)庫進(jìn)行更新。
在本實(shí)施例中,由于計(jì)算機(jī)應(yīng)用中對于某一屬性,只有master可對有關(guān)此屬性的記錄項(xiàng)進(jìn)行更新,保證了只有一個(gè)入口,從而可進(jìn)一步保證master和所有slave間的數(shù)據(jù)一致性,而不會出現(xiàn)因?yàn)榉謩e維護(hù)各自的微數(shù)據(jù)庫造成的數(shù)據(jù)不一致。
可選地,所述主節(jié)點(diǎn)接收到所述從節(jié)點(diǎn)發(fā)送的更新請求后,對主節(jié)點(diǎn)的微數(shù)據(jù)庫中屬性的記錄進(jìn)行更新操作之前,所述方法還包括:
所述主節(jié)點(diǎn)從對應(yīng)的所述主節(jié)點(diǎn)的微數(shù)據(jù)庫中讀取所述記錄。
具體地,計(jì)算機(jī)應(yīng)用中各微服務(wù)節(jié)點(diǎn)維護(hù)自己的一個(gè)微數(shù)據(jù)庫,所述微數(shù)據(jù)庫維護(hù)對應(yīng)的微服務(wù)節(jié)點(diǎn)完成自己功能所需要讀寫的那部分?jǐn)?shù)據(jù)。
在所述主節(jié)點(diǎn)讀取運(yùn)行所需數(shù)據(jù)時(shí),可從對應(yīng)的所述主節(jié)點(diǎn)的微數(shù)據(jù)庫中讀取所述記錄。相應(yīng)地,在所述從節(jié)點(diǎn)讀取運(yùn)行所需數(shù)據(jù)時(shí),可從對應(yīng)的所述從節(jié)點(diǎn)的微數(shù)據(jù)庫中讀取所述記錄。
可選地,所述主節(jié)點(diǎn)對主節(jié)點(diǎn)的微數(shù)據(jù)庫中屬性的記錄進(jìn)行更新操作,具體為對主節(jié)點(diǎn)的微數(shù)據(jù)庫中屬性的記錄進(jìn)行增加、修改或刪除。
具體地,所述系統(tǒng)內(nèi)某一屬性的master需要增加一條記錄,所述slave需向所述屬性的master發(fā)送增加所述記錄的消息,通知該master向自己的數(shù)據(jù)庫增加所述記錄。
所述系統(tǒng)內(nèi)某一屬性的master需要修改一條記錄,所述slave需向所述屬性的master發(fā)送修改所述記錄的消息,通知該master修改自己的數(shù)據(jù)庫中的所述記錄。
所述系統(tǒng)內(nèi)某一屬性的master需要?jiǎng)h除一條記錄,所述slave需向所述屬性的master發(fā)送刪除所述記錄的消息,通知該master向自己的數(shù)據(jù)庫刪除所述記錄。
可選地,所述主節(jié)點(diǎn)接收所述從節(jié)點(diǎn)發(fā)送的所述更新請求,具體為對主節(jié)點(diǎn)的微數(shù)據(jù)庫中屬性的記錄進(jìn)行增加、修改或刪除。
具體地,所述系統(tǒng)內(nèi)某一屬性的slave需要增加一條記錄,所述slave需向所述屬性的master發(fā)送增加所述記錄的消息,通知該master在主節(jié)點(diǎn)的微數(shù)據(jù)庫增加所述記錄。
所述系統(tǒng)內(nèi)某一屬性的slave需要修改一條記錄,所述slave需向所述屬性的master發(fā)送修改所述記錄的消息,通知該master修改主節(jié)點(diǎn)的微數(shù)據(jù)庫中的所述記錄。
所述系統(tǒng)內(nèi)某一屬性的slave需要?jiǎng)h除一條記錄,所述slave需向所述屬性的master發(fā)送刪除所述記錄的消息,通知該master刪除主節(jié)點(diǎn)的微數(shù)據(jù)庫中的所述記錄。
也就是說,當(dāng)一個(gè)從節(jié)點(diǎn)接收到某個(gè)屬性的增/刪/改請求時(shí),并不能直接執(zhí)行修改操作,從節(jié)點(diǎn)將對應(yīng)的修改請求消息發(fā)送到主節(jié)點(diǎn),使主節(jié)點(diǎn)執(zhí)行相應(yīng)的修改操作,將對該屬性的寫操作發(fā)送到該屬性的從節(jié)點(diǎn),從節(jié)點(diǎn)執(zhí)行與該屬性相關(guān)的修改操作,完成更新。
本實(shí)施例提供的數(shù)據(jù)存儲方法,至少具有以下技術(shù)效果:
通過所述主節(jié)點(diǎn)接收所述從節(jié)點(diǎn)發(fā)送的更新請求,對主節(jié)點(diǎn)的微數(shù)據(jù)庫中屬性的記錄進(jìn)行更新操作,保證一個(gè)屬性只有主節(jié)點(diǎn)可進(jìn)行更新,從而可進(jìn)一步保證主節(jié)點(diǎn)和從節(jié)點(diǎn)間的數(shù)據(jù)一致性。
圖5示出了本發(fā)明又一實(shí)施例提供的一種數(shù)據(jù)存儲方法的流程示意圖。
參照圖5,在上述實(shí)施例的基礎(chǔ)上,所述步驟12,所述主節(jié)點(diǎn)向至少一個(gè)從節(jié)點(diǎn)發(fā)送事件的方式可有多種,本實(shí)施例舉例說明其中一種。
所述步驟12具體為:
步驟12’、所述主節(jié)點(diǎn)向發(fā)布訂閱系統(tǒng)發(fā)送事件,使得發(fā)布訂閱系統(tǒng)向所述從節(jié)點(diǎn)發(fā)送所述事件。
可選地,發(fā)布訂閱系統(tǒng)負(fù)責(zé)存儲所述事件,主要用來解決高并發(fā)下減輕數(shù)據(jù)庫的壓力以及解決線程阻塞問題。
圖6示出了本發(fā)明又一實(shí)施例提供的一種計(jì)算機(jī)應(yīng)用的結(jié)構(gòu)示意圖。
如圖6所示,所述主節(jié)點(diǎn)a向發(fā)布訂閱系統(tǒng)發(fā)送所述事件,使得各從節(jié)點(diǎn)b和c接收所述事件。
圖7示出了本發(fā)明又一實(shí)施例提供的一種計(jì)算機(jī)應(yīng)用的結(jié)構(gòu)示意圖。
如圖7所示,所述從節(jié)點(diǎn)c向發(fā)布訂閱系統(tǒng)發(fā)送請求,用于請求主節(jié)點(diǎn)a更新屬性,使得主節(jié)點(diǎn)a接收所述請求,所述主節(jié)點(diǎn)的微數(shù)據(jù)庫進(jìn)行屬性更新,更新再向發(fā)布訂閱系統(tǒng)發(fā)送所述事件,使得從節(jié)點(diǎn)b和c接收所述事件,對所述從節(jié)點(diǎn)的微數(shù)據(jù)庫進(jìn)行同步更新。
在步驟12’之前,所述方法還包括:
所述主節(jié)點(diǎn)向所述發(fā)布訂閱系統(tǒng)發(fā)送設(shè)置請求,使得所述主節(jié)點(diǎn)能夠向所述發(fā)布訂閱系統(tǒng)發(fā)布或訂閱所述事件。
發(fā)布-訂閱模式包括生產(chǎn)者以及消費(fèi)者,即發(fā)布方和訂閱方,其主要特點(diǎn)就是每一個(gè)消息可以有多個(gè)消費(fèi)者。生產(chǎn)者把消息發(fā)送到一個(gè)主題(topic)中,消息代理將消息發(fā)布給訂閱該主題的每一個(gè)消費(fèi)者。
發(fā)布-訂閱模式的主要特點(diǎn)就是每一個(gè)消息可以有多個(gè)消費(fèi)者。生產(chǎn)者把消息發(fā)送到一個(gè)主題(topic)中,消息代理將消息發(fā)布給訂閱該主題的每一個(gè)消費(fèi)者。
所述發(fā)布-訂閱系統(tǒng)中,每一個(gè)屬性為一個(gè)主題(topic),所述master作為生產(chǎn)者將自己數(shù)據(jù)庫里記錄變化這一事件發(fā)送到對應(yīng)的主題中。每個(gè)屬性的所有slave會作為消費(fèi)者訂閱對應(yīng)的主題。相應(yīng)地,每個(gè)屬性的master會作為消費(fèi)者訂閱所有針對這一屬性的更新請求。
所述master在增加或更新所述記錄時(shí),將這一事件發(fā)送到發(fā)布-訂閱系統(tǒng)中。所述事件存儲于發(fā)布-訂閱系統(tǒng)中等待被訂閱所述事件對應(yīng)的主題的作為消費(fèi)者的slave消費(fèi)。當(dāng)所述slave消費(fèi)所述事件時(shí),會根據(jù)所述事件同步自己的數(shù)據(jù)庫來保持與所述master的數(shù)據(jù)庫的一致性。
也就是說,當(dāng)某個(gè)屬性的主節(jié)點(diǎn)對該屬性進(jìn)行寫操作,包括追加新數(shù)據(jù)和更新已存在數(shù)據(jù)時(shí),主節(jié)點(diǎn)在正常完成本節(jié)點(diǎn)的寫操作后,會將對該屬性的寫操作以事件的方式發(fā)送到發(fā)布訂閱系統(tǒng),該屬性的從節(jié)點(diǎn)通過訂閱以該屬性為主題的修改消息,當(dāng)接收到某屬性主節(jié)點(diǎn)發(fā)布的寫操作事件后,發(fā)布訂閱系統(tǒng)會將該事件轉(zhuǎn)發(fā)給該屬性的從節(jié)點(diǎn)。從節(jié)點(diǎn)執(zhí)行與該屬性相關(guān)的修改操作,完成更新。
當(dāng)一個(gè)從節(jié)點(diǎn)接收到某個(gè)屬性修改請求時(shí),并不能直接執(zhí)行修改操作,從節(jié)點(diǎn)發(fā)布以該屬性為主題的修改請求消息到發(fā)布訂閱系統(tǒng),主節(jié)點(diǎn)通過訂閱該消息接收到修改請求,執(zhí)行相應(yīng)的修改操作,將對該屬性的寫操作以事件的方式發(fā)送到發(fā)布訂閱系統(tǒng)并進(jìn)一步發(fā)送到該屬性的從節(jié)點(diǎn),從節(jié)點(diǎn)執(zhí)行與該屬性相關(guān)的修改操作,完成更新。
可選地,若所述主節(jié)點(diǎn)的微數(shù)據(jù)庫存儲的記錄丟失后,所述主節(jié)點(diǎn)接收發(fā)布訂閱系統(tǒng)中發(fā)送的備份事件,并根據(jù)所述備份事件進(jìn)行所述主節(jié)點(diǎn)的微數(shù)據(jù)庫的恢復(fù),其中,所述備份事件是所述發(fā)布訂閱系統(tǒng)接收所述主節(jié)點(diǎn)發(fā)送的所述事件時(shí)存儲的事件。
當(dāng)某一微服務(wù)節(jié)點(diǎn)失效后,即使數(shù)據(jù)庫中數(shù)據(jù)丟失,也可以通過發(fā)布-訂閱系統(tǒng)中存儲的事件來恢復(fù)數(shù)據(jù)庫,提高了系統(tǒng)的可用性。
本實(shí)施例提供的數(shù)據(jù)存儲方法,至少具有以下技術(shù)效果:
通過發(fā)布訂閱系統(tǒng)來傳遞主節(jié)點(diǎn)以從節(jié)點(diǎn)間的事件,可提高傳遞效率。
為了更充分理解本發(fā)明的技術(shù)內(nèi)容,在上述實(shí)施例的基礎(chǔ)上,本實(shí)施例提供的數(shù)據(jù)存儲方法,可應(yīng)用于多種場景中,本實(shí)施例以學(xué)校學(xué)生信息管理場景為例進(jìn)行說明。
學(xué)校學(xué)生信息管理場景中,本實(shí)施例提供的數(shù)據(jù)存儲方法應(yīng)用于學(xué)校學(xué)生信息管理系統(tǒng)中。
參閱圖2,其中微服務(wù)a為學(xué)生基本信息服務(wù),微服務(wù)b為學(xué)生成績管理服務(wù),微服務(wù)c為學(xué)生成績報(bào)告單郵寄服務(wù)。
其中,微服務(wù)a的數(shù)據(jù)庫維護(hù)學(xué)生的學(xué)號、姓名、家庭住址信息,微服務(wù)b的數(shù)據(jù)庫維護(hù)學(xué)生的學(xué)號、成績信息,微服務(wù)c的數(shù)據(jù)庫維護(hù)學(xué)生的學(xué)號、成績、家庭住址信息。上述微服務(wù)均未維護(hù)系統(tǒng)內(nèi)的所有屬性,數(shù)據(jù)冗余度極低。
表1為學(xué)校學(xué)生信息管理系統(tǒng)內(nèi)的數(shù)據(jù)關(guān)系。
如表1所示,微服務(wù)節(jié)點(diǎn)a是學(xué)生的學(xué)號、姓名、家庭住址的master,微服務(wù)b是學(xué)生成績的master。微服務(wù)b是學(xué)生學(xué)號的slave,微服務(wù)c是學(xué)生學(xué)號、成績和家庭住址的slave。
表2為學(xué)校學(xué)生信息管理系統(tǒng)內(nèi)發(fā)布-訂閱情況。
如表2所示,作為學(xué)生學(xué)號的slave的微服務(wù)b向發(fā)布-訂閱系統(tǒng)訂閱了學(xué)號這一屬性,作為學(xué)生學(xué)號、成績和家庭住址的slave的微服務(wù)c,向發(fā)布-訂閱系統(tǒng)訂閱了學(xué)生學(xué)號、成績和家庭住址屬性。相應(yīng)地,各屬性的master需要向發(fā)布-訂閱系統(tǒng)訂閱針對該屬性的修改請求。
如圖6所示,當(dāng)需要向系統(tǒng)內(nèi)注冊一名新生的基本信息時(shí),微服務(wù)a作為學(xué)生的學(xué)號、姓名、家庭住址的master,直接向自己的數(shù)據(jù)庫添加一條新的記錄,并將這個(gè)事件發(fā)送到發(fā)布-訂閱系統(tǒng)的學(xué)號、姓名、家庭住址三個(gè)主題中。
此時(shí),微服務(wù)b和c會從訂閱了的主題中消費(fèi)這個(gè)事件,相應(yīng)地,微服務(wù)b會向自己的數(shù)據(jù)庫中增加一條帶有新的學(xué)號的記錄,而微服務(wù)c會向自己的數(shù)據(jù)庫中增加一條帶有新的學(xué)號和對應(yīng)家庭住址的記錄。實(shí)現(xiàn)了系統(tǒng)內(nèi)數(shù)據(jù)的一致性。
當(dāng)需要向系統(tǒng)更新一條學(xué)生成績記錄時(shí),微服務(wù)b作為學(xué)生成績的master,直接向自己的數(shù)據(jù)庫中更新一條學(xué)生成績記錄,并將這個(gè)事件發(fā)送到發(fā)布-訂閱系統(tǒng)的成績這一主題中。
此時(shí),微服務(wù)c因?yàn)橛嗛喠顺煽冞@一主題會消費(fèi)所述事件,向自己的數(shù)據(jù)庫中更新對應(yīng)的學(xué)生的成績記錄。實(shí)現(xiàn)了系統(tǒng)內(nèi)數(shù)據(jù)的一致性。
如圖7所示,當(dāng)使用微服務(wù)c的負(fù)責(zé)郵寄學(xué)生成績的老師發(fā)現(xiàn)其中一個(gè)學(xué)生的成績錄入錯(cuò)誤需要修改時(shí),因?yàn)槲⒎?wù)c并不是學(xué)生成績的master,修改成績屬性下的記錄項(xiàng)就需要向成績屬性的master(微服務(wù)b)請求,讓微服務(wù)b作為學(xué)生成績的master來修改自己數(shù)據(jù)庫中對應(yīng)的一條記錄,所以微服務(wù)c向發(fā)布-訂閱系統(tǒng)發(fā)送了一條修改成績的請求。微服務(wù)b作為成績修改請求的消費(fèi)者,從發(fā)布-訂閱系統(tǒng)收到來自微服務(wù)c的修改請求,向自己的數(shù)據(jù)庫中更新自己數(shù)據(jù)庫中對應(yīng)的一條記錄,并將這個(gè)事件發(fā)送到發(fā)布-訂閱系統(tǒng)的成績這一主題中。微服務(wù)c因?yàn)橛嗛喠顺煽冞@一主題會消費(fèi)所述事件,向自己的數(shù)據(jù)庫中更新對應(yīng)的學(xué)生的成績記錄。實(shí)現(xiàn)了系統(tǒng)內(nèi)數(shù)據(jù)的一致性,完成了對學(xué)生成績的更新操作。
當(dāng)某一微服務(wù)失效后,即使數(shù)據(jù)庫中數(shù)據(jù)丟失,也可以通過發(fā)布-訂閱系統(tǒng)中存儲的事件來恢復(fù)數(shù)據(jù)庫,提高了系統(tǒng)的可用性。
如果微服務(wù)c失效,重啟后,它可以根據(jù)發(fā)布-訂閱系統(tǒng)中持久化過的事件進(jìn)行恢復(fù),例如微服務(wù)a向系統(tǒng)中添加學(xué)生信息,微服務(wù)b向系統(tǒng)中更新學(xué)生信息的事件。由于發(fā)布-訂閱系統(tǒng)的時(shí)間特性,所有事件是有序的,根據(jù)所述順序就能恢復(fù)到數(shù)據(jù)庫原有的狀態(tài)。
本實(shí)施例提供的數(shù)據(jù)存儲方法,至少具有以下技術(shù)效果:
(1)松耦合。每個(gè)微服務(wù)擁有屬于自己的數(shù)據(jù)庫,各自可以選擇不同的數(shù)據(jù)庫技術(shù)以及定義自己的數(shù)據(jù)庫的數(shù)據(jù)模型和表結(jié)構(gòu)。每個(gè)微服務(wù)不需要知道其他微服務(wù)的數(shù)據(jù)庫的內(nèi)部實(shí)現(xiàn)細(xì)節(jié),如果其中某個(gè)微服務(wù)為了更好的表示數(shù)據(jù)或者增加可維護(hù)性而修改表結(jié)構(gòu)的話,不會對其他微服務(wù)產(chǎn)生影響。
(2)數(shù)據(jù)冗余度低。每個(gè)微服務(wù)不需要維護(hù)一個(gè)相當(dāng)龐大的數(shù)據(jù)庫,整個(gè)系統(tǒng)的數(shù)據(jù)冗余程度低。
(3)維護(hù)一致性成本低。其中某一微服務(wù)更新一條記錄,所述記錄只會影響訂閱了涉及該記錄中屬性的微服務(wù),而不需要對系統(tǒng)內(nèi)所有微服務(wù)的數(shù)據(jù)庫進(jìn)行同步。
(4)可擴(kuò)展性高。如果系統(tǒng)中只有某個(gè)微服務(wù)存在性能問題,只需要對該微服務(wù)進(jìn)行修改擴(kuò)展。且只需要重新部署所述微服務(wù)就能夠發(fā)布該變更,這種部署風(fēng)險(xiǎn)性小。如果想要在系統(tǒng)中加入新的微服務(wù),新的微服務(wù)只需要向發(fā)布-訂閱系統(tǒng)訂閱所需的屬性即可。
(5)當(dāng)某一微服務(wù)失效后,即使數(shù)據(jù)庫中數(shù)據(jù)丟失,也可以通過發(fā)布-訂閱系統(tǒng)中存儲的事件來恢復(fù)數(shù)據(jù)庫,提高了系統(tǒng)的可用性。
圖8示出了本發(fā)明又一實(shí)施例提供的一種微服務(wù)的結(jié)構(gòu)示意圖。
參照圖8,所述微服務(wù)包括存儲器91、處理器92以及存儲在存儲器91上并可在處理器上運(yùn)行的計(jì)算機(jī)程序。
所述處理器92用于調(diào)用所述存儲器91中的程序指令,以執(zhí)行所述程序時(shí)實(shí)現(xiàn)如下的方法。
所述方法適用于計(jì)算機(jī)應(yīng)用中,所述計(jì)算機(jī)應(yīng)用由若干個(gè)微服務(wù)實(shí)現(xiàn),每個(gè)微服務(wù)包括專屬的微數(shù)據(jù)庫,每個(gè)微數(shù)據(jù)庫只存儲對應(yīng)微服務(wù)功能的數(shù)據(jù),不同的微數(shù)據(jù)庫中的數(shù)據(jù)至少包括一個(gè)相同的屬性,每個(gè)屬性僅存在一個(gè)主節(jié)點(diǎn),所述主節(jié)點(diǎn)為具有所述屬性的更新權(quán)限的微服務(wù),且存在至少一個(gè)從節(jié)點(diǎn),所述從節(jié)點(diǎn)為不具有所述屬性的更新權(quán)限的微服務(wù),其中,所述主節(jié)點(diǎn)對該屬性進(jìn)行讀數(shù)據(jù)或更新數(shù)據(jù)的操作,所述從節(jié)點(diǎn)對該屬性進(jìn)行讀數(shù)據(jù)操作。
對主節(jié)點(diǎn)的微數(shù)據(jù)庫中屬性的記錄進(jìn)行更新操作;
主向至少一個(gè)從節(jié)點(diǎn)發(fā)送事件,所述事件包括所述主節(jié)點(diǎn)對所述屬性的記錄進(jìn)行更新操作,使得所述從節(jié)點(diǎn)接收所述事件,根據(jù)所述事件,對從節(jié)點(diǎn)的微數(shù)據(jù)庫進(jìn)行同步更新。
所述主節(jié)點(diǎn)對主節(jié)點(diǎn)的微數(shù)據(jù)庫中屬性的記錄進(jìn)行更新操作之前,還包括所述主節(jié)點(diǎn)從對應(yīng)的所述主節(jié)點(diǎn)的微數(shù)據(jù)庫中讀取所述記錄。
所述主節(jié)點(diǎn)對主節(jié)點(diǎn)的微數(shù)據(jù)庫中屬性的記錄進(jìn)行更新操作,具體為對主節(jié)點(diǎn)的微數(shù)據(jù)庫中屬性的記錄進(jìn)行增加、修改或刪除。
所述主節(jié)點(diǎn)向至少一個(gè)從節(jié)點(diǎn)發(fā)送事件,使得所述從節(jié)點(diǎn)接收所述事件,具體為:
所述主節(jié)點(diǎn)向發(fā)布訂閱系統(tǒng)發(fā)送事件,使得發(fā)布訂閱系統(tǒng)向所述從節(jié)點(diǎn)發(fā)送所述事件。
所述主節(jié)點(diǎn)向發(fā)布訂閱系統(tǒng)發(fā)送事件,使得發(fā)布訂閱系統(tǒng)向所述從節(jié)點(diǎn)發(fā)送所述事件之前,所述方法還包括:
所述主節(jié)點(diǎn)向所述發(fā)布訂閱系統(tǒng)發(fā)送設(shè)置請求,使得所述主節(jié)點(diǎn)能夠向所述發(fā)布訂閱系統(tǒng)發(fā)布或訂閱所述事件。
若所述主節(jié)點(diǎn)的微數(shù)據(jù)庫存儲的記錄丟失后,所述主節(jié)點(diǎn)接收發(fā)布訂閱系統(tǒng)中發(fā)送的備份事件,并根據(jù)所述備份事件進(jìn)行所述主節(jié)點(diǎn)的微數(shù)據(jù)庫的恢復(fù),其中,所述備份事件是所述發(fā)布訂閱系統(tǒng)接收所述主節(jié)點(diǎn)發(fā)送的所述事件時(shí)存儲的事件。
所述主節(jié)點(diǎn)對主節(jié)點(diǎn)的微數(shù)據(jù)庫中屬性的記錄進(jìn)行更新操作之前,還包括:
所述主節(jié)點(diǎn)接收所述從節(jié)點(diǎn)發(fā)送的更新請求,用于請求所述主節(jié)點(diǎn)對主節(jié)點(diǎn)的微數(shù)據(jù)庫中屬性的記錄進(jìn)行更新操作。
本實(shí)施例提供的微服務(wù),可用于執(zhí)行上述方法實(shí)施例的方法對應(yīng)的程序,本實(shí)施不再贅述。
本實(shí)施例提供的微服務(wù),至少具有以下技術(shù)效果:
通過所述處理器執(zhí)行所述程序時(shí)實(shí)現(xiàn)對主節(jié)點(diǎn)的微數(shù)據(jù)庫中屬性的記錄進(jìn)行更新操作,向至少一個(gè)從節(jié)點(diǎn)發(fā)送事件,使得所述從節(jié)點(diǎn)根據(jù)所述事件,對從節(jié)點(diǎn)的微數(shù)據(jù)庫進(jìn)行同步更新從而可占用較少的資源就能夠維護(hù)計(jì)算機(jī)應(yīng)用中各微數(shù)據(jù)庫的一致性。
本發(fā)明又一實(shí)施例提供的一種計(jì)算機(jī)可讀存儲介質(zhì),所述計(jì)算機(jī)可讀存儲介質(zhì)上存儲有計(jì)算機(jī)程序,所述程序被處理器執(zhí)行時(shí)實(shí)現(xiàn)如下步驟:
對主節(jié)點(diǎn)的微數(shù)據(jù)庫中屬性的記錄進(jìn)行更新操作;
主向至少一個(gè)從節(jié)點(diǎn)發(fā)送事件,所述事件包括所述主節(jié)點(diǎn)對所述屬性的記錄進(jìn)行更新操作,使得所述從節(jié)點(diǎn)接收所述事件,根據(jù)所述事件,對從節(jié)點(diǎn)的微數(shù)據(jù)庫進(jìn)行同步更新。
所述主節(jié)點(diǎn)對主節(jié)點(diǎn)的微數(shù)據(jù)庫中屬性的記錄進(jìn)行更新操作之前,還包括所述主節(jié)點(diǎn)從對應(yīng)的所述主節(jié)點(diǎn)的微數(shù)據(jù)庫中讀取所述記錄。
所述主節(jié)點(diǎn)對主節(jié)點(diǎn)的微數(shù)據(jù)庫中屬性的記錄進(jìn)行更新操作,具體為對主節(jié)點(diǎn)的微數(shù)據(jù)庫中屬性的記錄進(jìn)行增加、修改或刪除。
所述主節(jié)點(diǎn)向至少一個(gè)從節(jié)點(diǎn)發(fā)送事件,使得所述從節(jié)點(diǎn)接收所述事件,具體為:
所述主節(jié)點(diǎn)向發(fā)布訂閱系統(tǒng)發(fā)送事件,使得發(fā)布訂閱系統(tǒng)向所述從節(jié)點(diǎn)發(fā)送所述事件。
所述主節(jié)點(diǎn)向發(fā)布訂閱系統(tǒng)發(fā)送事件,使得發(fā)布訂閱系統(tǒng)向所述從節(jié)點(diǎn)發(fā)送所述事件之前,所述方法還包括:
所述主節(jié)點(diǎn)向所述發(fā)布訂閱系統(tǒng)發(fā)送設(shè)置請求,使得所述主節(jié)點(diǎn)能夠向所述發(fā)布訂閱系統(tǒng)發(fā)布或訂閱所述事件。
若所述主節(jié)點(diǎn)的微數(shù)據(jù)庫存儲的記錄丟失后,所述主節(jié)點(diǎn)接收發(fā)布訂閱系統(tǒng)中發(fā)送的備份事件,并根據(jù)所述備份事件進(jìn)行所述主節(jié)點(diǎn)的微數(shù)據(jù)庫的恢復(fù),其中,所述備份事件是所述發(fā)布訂閱系統(tǒng)接收所述主節(jié)點(diǎn)發(fā)送的所述事件時(shí)存儲的事件。
所述主節(jié)點(diǎn)對主節(jié)點(diǎn)的微數(shù)據(jù)庫中屬性的記錄進(jìn)行更新操作之前,還包括:
所述主節(jié)點(diǎn)接收所述從節(jié)點(diǎn)發(fā)送的更新請求,用于請求所述主節(jié)點(diǎn)對主節(jié)點(diǎn)的微數(shù)據(jù)庫中屬性的記錄進(jìn)行更新操作。
本實(shí)施例提供的計(jì)算機(jī)可讀存儲介質(zhì),所述程序被處理器執(zhí)行時(shí)實(shí)現(xiàn)上述方法實(shí)施例的方法,本實(shí)施不再贅述。
本實(shí)施例提供的計(jì)算機(jī)可讀存儲介質(zhì),至少具有以下技術(shù)效果:
通過所述處理器執(zhí)行所述程序時(shí)實(shí)現(xiàn)對主節(jié)點(diǎn)的微數(shù)據(jù)庫中屬性的記錄進(jìn)行更新操作,向至少一個(gè)從節(jié)點(diǎn)發(fā)送事件,使得所述從節(jié)點(diǎn)根據(jù)所述事件,對從節(jié)點(diǎn)的微數(shù)據(jù)庫進(jìn)行同步更新從而可占用較少的資源就能夠維護(hù)計(jì)算機(jī)應(yīng)用中各微數(shù)據(jù)庫的一致性。
本發(fā)明又一實(shí)施例提供的一種微數(shù)據(jù)庫,所述微數(shù)據(jù)庫是微服務(wù)的專屬的微數(shù)據(jù)庫,每個(gè)微數(shù)據(jù)庫只存儲對應(yīng)微服務(wù)功能的數(shù)據(jù),不同的微數(shù)據(jù)庫中的數(shù)據(jù)至少包括一個(gè)相同的屬性,每個(gè)屬性僅存在一個(gè)主節(jié)點(diǎn),所述主節(jié)點(diǎn)為具有所述屬性的更新權(quán)限的微服務(wù),且存在至少一個(gè)從節(jié)點(diǎn),所述從節(jié)點(diǎn)為不具有所述屬性的更新權(quán)限的微服務(wù),其中,所述主節(jié)點(diǎn)對該屬性進(jìn)行讀數(shù)據(jù)或更新數(shù)據(jù)的操作,所述從節(jié)點(diǎn)對該屬性進(jìn)行讀數(shù)據(jù)操作。
應(yīng)當(dāng)說明的是,微數(shù)據(jù)庫不同于現(xiàn)有技術(shù)中水平分片和垂直分片的分布式數(shù)據(jù)庫,水平分片和垂直分片的分布式數(shù)據(jù)庫只是實(shí)現(xiàn)了對龐大單個(gè)數(shù)據(jù)庫的分片,其本質(zhì)上還是一個(gè)所有微服務(wù)共享的數(shù)據(jù)庫,并不能解決微服務(wù)數(shù)據(jù)持久化中存在的高耦合、維護(hù)數(shù)據(jù)庫之間的一致性會占用過量資源的問題,而系統(tǒng)內(nèi)每個(gè)微服務(wù)節(jié)點(diǎn)擁有屬于自己的一個(gè)微數(shù)據(jù)庫,所述微數(shù)據(jù)庫維護(hù)所述微服務(wù)完成自己功能所需要讀寫的那部分?jǐn)?shù)據(jù)。
本實(shí)施例提供的微數(shù)據(jù)庫,可實(shí)現(xiàn)上述方法實(shí)施例的方法,本實(shí)施不再贅述。
本實(shí)施例提供的微數(shù)據(jù)庫,至少具有以下技術(shù)效果:
各微服務(wù)擁有屬于自己的一個(gè)微數(shù)據(jù)庫,當(dāng)屬性的主節(jié)點(diǎn)進(jìn)行更新時(shí),所述屬性的從節(jié)點(diǎn)僅需更新所述屬性,即可實(shí)現(xiàn)各微數(shù)據(jù)庫的同步。
本發(fā)明又一實(shí)施例提供的一種微服務(wù),包括一種微數(shù)據(jù)庫。
其中,所述微數(shù)據(jù)庫是微服務(wù)的專屬的微數(shù)據(jù)庫,每個(gè)微數(shù)據(jù)庫只存儲對應(yīng)微服務(wù)功能的數(shù)據(jù),不同的微數(shù)據(jù)庫中的數(shù)據(jù)至少包括一個(gè)相同的屬性,每個(gè)屬性僅存在一個(gè)主節(jié)點(diǎn),所述主節(jié)點(diǎn)為具有所述屬性的更新權(quán)限的微服務(wù),且存在至少一個(gè)從節(jié)點(diǎn),所述從節(jié)點(diǎn)為不具有所述屬性的更新權(quán)限的微服務(wù),其中,所述主節(jié)點(diǎn)對該屬性進(jìn)行讀數(shù)據(jù)或更新數(shù)據(jù)的操作,所述從節(jié)點(diǎn)對該屬性進(jìn)行讀數(shù)據(jù)操作。
本實(shí)施例提供的微服務(wù),所述微服務(wù)可實(shí)現(xiàn)上述方法實(shí)施例的方法,本實(shí)施不再贅述。
本實(shí)施例提供的微服務(wù),至少具有以下技術(shù)效果:
各微服務(wù)擁有屬于自己的一個(gè)微數(shù)據(jù)庫,當(dāng)屬性的主節(jié)點(diǎn)進(jìn)行更新時(shí),所述屬性的從節(jié)點(diǎn)僅需更新所述屬性,即可實(shí)現(xiàn)各微數(shù)據(jù)庫的同步。
最后應(yīng)說明的是:以上實(shí)施例僅用以說明本發(fā)明實(shí)施例的技術(shù)方案,而非對其限制;盡管參照前述實(shí)施例對本發(fā)明實(shí)施例進(jìn)行了詳細(xì)的說明,本領(lǐng)域的普通技術(shù)人員應(yīng)當(dāng)理解:其依然可以對前述各實(shí)施例所記載的技術(shù)方案進(jìn)行修改,或者對其中部分技術(shù)特征進(jìn)行等同替換;而這些修改或者替換,并不使相應(yīng)技術(shù)方案的本質(zhì)脫離本發(fā)明實(shí)施例各實(shí)施例技術(shù)方案的精神和范圍。