zookeeper為什么有時(shí)候啟動(dòng)不起來(lái) zookeeper中myid有用嗎?
zookeeper中myid有用嗎?myid的值是文件里定義方法的server.A項(xiàng)A的值,Zookeeper正常啟動(dòng)時(shí)會(huì)加載這個(gè)文件,拿回里面的數(shù)據(jù)與里面的配置信息比較比較使判斷不知道是那個(gè)serv
zookeeper中myid有用嗎?
myid的值是文件里定義方法的server.A項(xiàng)A的值,Zookeeper正常啟動(dòng)時(shí)會(huì)加載這個(gè)文件,拿回里面的數(shù)據(jù)與里面的配置信息比較比較使判斷不知道是那個(gè)server,能起一個(gè)標(biāo)識(shí)作用。
在系統(tǒng)中增加quartz定時(shí)任務(wù)集群,tomcat集群會(huì)多次執(zhí)行,怎么解決呢?
做過(guò)的的的功能,不一定會(huì)也得用分布式定時(shí)任務(wù),應(yīng)該要特點(diǎn)項(xiàng)目實(shí)際來(lái)選擇類(lèi)型具體的解決方案;從最簡(jiǎn)單說(shuō)起來(lái),給大家介紹幾個(gè)(不要先選高端大氣上檔次的方案,比較適合最重要)。
諸如數(shù)據(jù)庫(kù)中每天晚上都會(huì)有一百萬(wàn)條數(shù)據(jù)待處理,一個(gè)定時(shí)任務(wù)(記為A)要如何處理完這一百萬(wàn)條數(shù)據(jù),要10個(gè)小時(shí);如果想減緩這個(gè)處理速度,我們首先能想到的是多部署一個(gè)批處理程序(記為B),這時(shí)候理論上要10/25個(gè)小時(shí),也可以把任務(wù)都一次性處理完。
方案一:待一次性處理任務(wù)表增加一個(gè)去處理標(biāo)志的字段,比如0待如何處理,1一次性處理中,2全面處理結(jié)束;當(dāng)A任務(wù)取到待一次性處理數(shù)據(jù)的時(shí)候,將此字段更新完成1,處理完之后更新成2;當(dāng)字段1/2的時(shí)候,B任務(wù)應(yīng)該不會(huì)取到這條數(shù)據(jù);不過(guò)這種方法的問(wèn)題極大,而且非常容易發(fā)生了什么一條待如何處理任務(wù)在被A可以查詢(xún)到,但未更新全面處理狀態(tài)前,就被B任務(wù)取到,這樣的可能會(huì)造成重復(fù)一遍處理的問(wèn)題。
方案二:把處理任務(wù)通過(guò)人所的劃分,A去處理一批數(shù)據(jù),B處理一批數(shù)據(jù)。是可以從純數(shù)據(jù)角度劃分,諸如id的A處理,id!的B全面處理,也可以從業(yè)務(wù)角度劃分,諸如某個(gè)字段across(A,B,C)的A處理,某個(gè)字段across(X,Y,Z)的A如何處理;這樣的話(huà)做絕對(duì)不會(huì)導(dǎo)致數(shù)據(jù)反復(fù)重復(fù)一次性處理,但是也有一些問(wèn)題:
數(shù)據(jù)不當(dāng)然能平均分配,例如字段into(A,B,C)的數(shù)據(jù)有90萬(wàn)條,字段of(X,Y,Z)的有10萬(wàn)條。
未必能擴(kuò)展,畢竟條件是寫(xiě)死的,所以才如果要增加下降機(jī)器的話(huà)比較麻煩您;
假如其中一臺(tái)機(jī)器直接掛掉,那就這部分?jǐn)?shù)據(jù)就不可能一次性處理。
方案三:方案一改進(jìn)看看,提升分布式鎖(也可以是數(shù)據(jù)庫(kù)、Redis、ZK),誰(shuí)能搶完鎖,誰(shuí)才能分離提取待全面處理任務(wù),并更新完去處理狀態(tài),比如說(shuō)三次提取一萬(wàn)行數(shù)據(jù),并把這些數(shù)據(jù)的待如何處理狀態(tài)可以更新成【一次性處理中】,接著把鎖釋放者掉,再由其他的節(jié)點(diǎn)搶鎖。這種方案是需要確定的東西也許多:
要考慮到鎖超期的問(wèn)題:假如A搶鎖,還沒(méi)施放鎖之前A就直接掛掉了,這樣所有任務(wù)都會(huì)被卡主。
如果鎖未交被施放掉,A一次性處理到一半的任務(wù)還必須被其他任務(wù)如何處理(突然失效轉(zhuǎn)移到)。
也可以和方案二加強(qiáng),做任務(wù)分片,批處理程序搶到鎖后,如何領(lǐng)取一個(gè)任務(wù)分片接受處理。
方案四:再按結(jié)構(gòu)分布式任務(wù)處理框架,我十分了解的那是Elastic-Job了,它的功能極為極為強(qiáng)大,不過(guò)主要注意的功能嘛,你能再理解前三個(gè)方案的話(huà),這個(gè)方案也就淺顯易懂了(基本是上面那些東西)。
我將減弱分享分享Java開(kāi)發(fā)、架構(gòu)設(shè)計(jì)、程序員職業(yè)發(fā)展等方面的見(jiàn)解,我希望能換取你的關(guān)注。