資料內(nèi)容:
針對(duì)上面起源版本問(wèn)題我們做一些解決辦法。
可靠的DB
我們引入一個(gè)DB,把同步進(jìn)程每次同步的位置寫(xiě)入到DB里面去,同步進(jìn)程重啟的時(shí)候首先從DB找到自 己的o?set,然后從o?set后面開(kāi)始數(shù)據(jù)同步就可以了。
流水記錄
參考mysql的方式,把所有的寫(xiě)入數(shù)據(jù)按照時(shí)間的先后用流水日志的方式記錄下來(lái)不能被修改,在沒(méi)有 同步到別的機(jī)房前也不能被刪除。 經(jīng)過(guò)上面的修改后我們得到修改版本一。
把修改版本一放到生產(chǎn)環(huán)境跑了幾天后,又會(huì)發(fā)現(xiàn)一些問(wèn)題:
性能低下
同步進(jìn)程每次同步一條數(shù)據(jù)都要修改Mysql同步o?set,導(dǎo)致同步進(jìn)程性能低下
單機(jī)磁盤(pán)空間不夠
因?yàn)槲锢頇C(jī)器上會(huì)混部多個(gè)服務(wù),每個(gè)服務(wù)都在往磁盤(pán)寫(xiě)入數(shù)據(jù) 跨機(jī)房同步本身又比較慢 可能導(dǎo)致單機(jī)磁盤(pán)空間被打爆,磁盤(pán)被打爆后數(shù)據(jù)再也無(wú)法寫(xiě)入了。
數(shù)據(jù)回環(huán)
Server A的數(shù)據(jù)被同步進(jìn)程A同步到B機(jī)房以后, 被寫(xiě)入到數(shù)據(jù)流水B,然后同步進(jìn)程B又把這個(gè)流水同 步給了A機(jī)房,就這樣形成了一個(gè)循環(huán)回路浪費(fèi)了網(wǎng)絡(luò)帶寬和資源。