聽(tīng)京東張成遠(yuǎn)講NewSQL和raft的那些事兒
原創(chuàng)2016中國(guó)應(yīng)用性能管理大會(huì)(簡(jiǎn)稱APMCon 2016)于8月18日至19日在北京新云南皇冠假日酒店隆重召開(kāi)。APMCon由聽(tīng)云、極客邦和InfoQ聯(lián)合主辦的作為國(guó)內(nèi)APM領(lǐng)域***影響力的技術(shù)大會(huì),***舉辦的APMCon以“驅(qū)動(dòng)應(yīng)用架構(gòu)優(yōu)化與創(chuàng)新”為主題,致力于推動(dòng)APM在國(guó)內(nèi)的成長(zhǎng)與發(fā)展。京東商城高級(jí)架構(gòu)師 張成遠(yuǎn)在大會(huì)現(xiàn)場(chǎng)接受記者采訪。
SQL早在70年代左右就被提出來(lái)了,后續(xù)有一些SQL的產(chǎn)品衍生出來(lái)供用戶使用。2000年之后,隨著分布式系統(tǒng)的引入,后來(lái)發(fā)明了NoSQL,它沒(méi)有SQL的特性,但是在操作上方便了很多,在擴(kuò)展上也非常便捷。近幾年有人發(fā)現(xiàn),在實(shí)際使用過(guò)程中,SQL比NoSQL用起來(lái)更方便,但是又不像NoSQL對(duì)于海量數(shù)據(jù)的收縮擴(kuò)容以及管理容易使用,后來(lái)就提出想把NoSQL跟SQL的特性結(jié)合起來(lái),就衍生出來(lái)了NewSQL。
什么是NewSQL
NewSQL是一類新的高性能的可擴(kuò)展的數(shù)據(jù)庫(kù)的簡(jiǎn)稱,主要能夠解決提供分布式事務(wù)的支持,并且可以提供跨數(shù)據(jù)中心的一致性保證。在一些應(yīng)用場(chǎng)景中,會(huì)對(duì)分布式事務(wù)有著嚴(yán)格的要求,NewSQL就能夠保證如果某些節(jié)點(diǎn)出現(xiàn)了異?,F(xiàn)象,可以與另外的節(jié)點(diǎn)進(jìn)行替換,以滿足場(chǎng)景的正常工作。
NewSQL與傳統(tǒng)數(shù)據(jù)庫(kù)相比的特點(diǎn)是,NewSQL自身具有的特點(diǎn)就是能夠帶來(lái)的效益,主要對(duì)分布式事務(wù)的支持,以及強(qiáng)一致性和跨數(shù)據(jù)中心的存活,像在雙十一的時(shí)候,提前就可以做一些比較輕松的擴(kuò)容的工作,以及在這個(gè)過(guò)程中,如果說(shuō)某個(gè)機(jī)房有異常,可以很好的進(jìn)行切換,對(duì)整個(gè)服務(wù)來(lái)說(shuō)可以很好的提供更可用支持。
什么是raft
raft是分布式系統(tǒng)里面的一致性的算法,raft作者曾學(xué)習(xí)了很久的PAXOS,后來(lái)覺(jué)得PAXOS比較難理解,而且在實(shí)現(xiàn)的時(shí)候很困難,所以他提出了raft算法。其***特點(diǎn)就是比較容易理解,在實(shí)現(xiàn)上也相較簡(jiǎn)單,主要是通過(guò)選舉leader+日志復(fù)制,實(shí)現(xiàn)分布式的一致性算法。
但是在技術(shù)網(wǎng)絡(luò)狀況不太好的情況下,會(huì)出現(xiàn)頻繁選取leader的行為,這對(duì)整個(gè)系統(tǒng)對(duì)外提供服務(wù)是有影響的,這種情況優(yōu)先是要改善基礎(chǔ)網(wǎng)絡(luò)。還有一種情況,某些節(jié)點(diǎn)在特殊情況下有網(wǎng)絡(luò)偶發(fā)的發(fā)生,這樣也會(huì)引起選舉的情況,在具體實(shí)現(xiàn)的時(shí)候,會(huì)有一些優(yōu)化的措施。其他節(jié)點(diǎn)跟leader的通信是正常的,當(dāng)這個(gè)異常的節(jié)點(diǎn)發(fā)起選舉的時(shí)候,其他的節(jié)點(diǎn)就可以拒絕掉這次選舉,這個(gè)異常的節(jié)點(diǎn)就可以很快恢復(fù)到follow的角色,這樣對(duì)于整個(gè)系統(tǒng)提供一個(gè)穩(wěn)定的服務(wù)會(huì)比較有幫助。
raft在NewSQL中的應(yīng)用
因?yàn)镹ewSQL能夠提供分布式事務(wù)的支持,也就是ACID的支持,同時(shí)還要提供高可用,如果有一個(gè)節(jié)點(diǎn)掛掉了,可以快速有另外一個(gè)節(jié)點(diǎn)接替它。但是在這種場(chǎng)景下,如果要保持已提交的事務(wù)沒(méi)有丟失,那么備份的節(jié)點(diǎn)來(lái)接替這個(gè)服務(wù)的時(shí)候,要保證所有的數(shù)據(jù)跟異常的節(jié)點(diǎn)數(shù)據(jù)是完全一致的,才能夠真正的接替這個(gè)服務(wù)。那raft就是解決一致性的問(wèn)題,保證NewSQL的存儲(chǔ)節(jié)點(diǎn)之間的數(shù)據(jù)一致。舉個(gè)例子,假如說(shuō)以ROCKSDB來(lái)說(shuō),假設(shè)NewSQL的存儲(chǔ)節(jié)點(diǎn)是ROCKSDB,要讓多個(gè)ROCKSDB之間的數(shù)據(jù)一致,那就在ROCKSDB上面加一層Raft的服務(wù),通過(guò)日志復(fù)制的方式,讓彼此之間的數(shù)據(jù)是一致的。
但是NewSQL在業(yè)界還沒(méi)有特別成熟的產(chǎn)品,在實(shí)際使用上來(lái)說(shuō),在性能方面需要進(jìn)一步提升。在解決分布式事務(wù)的時(shí)候,還涉及到兩階段提交,或者變種的兩階段提交,有很多的工程細(xì)節(jié)的問(wèn)題,離一個(gè)非常完善的成熟的,可以完全商用的系統(tǒng)來(lái)說(shuō),還在探索的路上。