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