最近看了很多技術(shù)組件键耕、發(fā)現(xiàn)其實(shí)很多技術(shù)都有共同點(diǎn);而這些共同點(diǎn)都圍繞著異步柑营、同步屈雄。
看到同步機(jī)制這個(gè)關(guān)鍵詞、我想到的是 性能差官套;可靠性高酒奶。
而異步機(jī)制這個(gè)關(guān)鍵詞蚁孔、是性能好、可靠性差惋嚎。
我覺(jué)得前輩們一直可能在思考一個(gè)問(wèn)題杠氢; 就是一項(xiàng)技術(shù)如何達(dá)到同步機(jī)制的可靠性、又能夠達(dá)到異步的性能另伍。
過(guò)半寫入機(jī)制
掙扎中就出現(xiàn)了過(guò)半寫入機(jī)制(paxos核心思想) Zookeeper的過(guò)半機(jī)制很相似修然; 比如ABC三個(gè)節(jié)點(diǎn);只要A/B兩個(gè)同步完成返回ack就對(duì)外提供服務(wù)质况。而C節(jié)點(diǎn)此時(shí)還沒(méi)同步完成愕宋;但它可能在異步同步數(shù)據(jù)、也有可能已經(jīng)掛了结榄。從某種角度來(lái)看這是一種策略中贝;從整體對(duì)外提供服務(wù)來(lái)說(shuō);保證了對(duì)外一致性臼朗;已經(jīng)是提高了性能邻寿;雖然內(nèi)部可能不一致。
預(yù)防策略(瞎寫的)
還有Kafka的副本同步機(jī)制视哑;主從同步策略绣否;也是強(qiáng)一致性;他是避免同步可能存在的問(wèn)題挡毅;而影響對(duì)外可用蒜撮。他有個(gè)ISR集合的概念;挺有意思的跪呈;比如說(shuō)我有ABC 3個(gè)節(jié)點(diǎn)段磨;A是Master 當(dāng)通過(guò)Master寫一條數(shù)據(jù)的時(shí)候;Master需要同步給BC兩個(gè)從節(jié)點(diǎn)耗绿;每個(gè)節(jié)點(diǎn)同步完成返回ACK確認(rèn)苹支;表示同步完成。
假設(shè)說(shuō)C節(jié)點(diǎn)同步很慢(這個(gè)同步時(shí)間可配置)误阻;或者掛了網(wǎng)絡(luò)不通债蜜;機(jī)制會(huì)把C節(jié)點(diǎn)踢出ISR集合;就能夠有效保證ISR集合的百分百健康究反。同時(shí)也會(huì)異步去探活異常C寻定;一旦他網(wǎng)絡(luò)恢復(fù)了;就把C加入集合奴紧;數(shù)據(jù)對(duì)其后 并對(duì)Master ack確認(rèn)特姐;此時(shí)Master 才認(rèn)為C是健康的、才會(huì)對(duì)他進(jìn)行數(shù)據(jù)同步黍氮。
這兩種策略其實(shí)都是在滿足同步的情況下去增強(qiáng)唐含;那假設(shè)說(shuō)沒(méi)有過(guò)半寫入浅浮、沒(méi)有ACK確認(rèn);只要有一個(gè)節(jié)點(diǎn)寫完立刻返回捷枯;節(jié)點(diǎn)之間通過(guò)異步同步滚秩。
這樣確實(shí)可以大大提高性能;但降低了可靠性淮捆、可能存在數(shù)據(jù)不一致問(wèn)題郁油。
就看業(yè)務(wù)容忍度;但市面上尤其是互聯(lián)網(wǎng)技術(shù)棧攀痊;基本都是優(yōu)先考慮性能桐腌、其實(shí)很多組件都是能夠滿足、異步苟径、或者同步策略案站;提供給開(kāi)發(fā)人員結(jié)合場(chǎng)景選擇;比如 Redis AOF棘街、RockerMQ蟆盐、Kafka刷盤以及提供者寫消息等等;
哎遭殉;有點(diǎn)零零散散石挂;但如果用CAP理論其實(shí)可以在分布式環(huán)境貫穿所有技術(shù)棧;應(yīng)該說(shuō)借助CAP理論可以可以找到他們之間的共性险污;更好的去理解他痹愚。而不是被天花亂墜的技術(shù)棧表面所迷惑。
https://www.processon.com/view/link/61a23cf01e0853431b172d90
【技術(shù)的本質(zhì)】有一句話叫:無(wú)論如何罗心,新技術(shù)一定是產(chǎn)生于已有的技術(shù)組合里伯。
也就是說(shuō)任何技術(shù)都是從老技術(shù)演變而來(lái)的;而我們首先學(xué)習(xí)他們的背后邏輯(底層邏輯) 其實(shí)更高效渤闷。
因?yàn)楹芏鄷r(shí)候技術(shù)底層都是相似相通的、你會(huì)很快理解上手脖镀;其實(shí)并不是你學(xué)的快飒箭,而是此時(shí)此刻你只是在復(fù)習(xí);以及在不同場(chǎng)景擴(kuò)展技術(shù)邊界而已蜒灰。