專訪豆瓣網首席架構師洪強寧:BeansDB與NoSQL的應用與發展
原創【51CTO獨家報道】在2009年數據庫大事記中,我們曾重點關注過NoSQL運動和Key-Value形式的數據庫產品;在《分布式可擴展非關系數據庫聚焦》一文中也曾介紹過幾款非關系型數據庫。今天我們一起深入國內采用Key-Value的數據庫——豆瓣網的BeansDB。
BeansDB于去年12月31日發布,是國內知名網站豆瓣網自主開發的針對大數據量、高可用性的分布式鍵值存儲系統,在伸縮性和高可用性方面有非常好的表現。在剛剛結束的Qcon 2010開發者大會上,51CTO記者有幸采訪到豆瓣網的首席架構師洪強寧先生,對BeansDB和Python編程語言等方面做了深入交流。
BeansDB在豆瓣的應用
BeansDB主要由Server端和Client端兩個部分組成。Server端用C編寫,使用Memcached的通訊協議,任何支持Memcached的Client端都可以與BeansDB的Server端同步來獲取和存儲數據。在Client端方面的主要差別是分布式的邏輯實現方面。目前,BeansDB的Client端主要是豆瓣自己用Python語言的實現。Client端的運作方式是寫數據時寫入多份,讀的時候只讀一份,用其他任何語言實現也和簡單。
BeansDB開放在Google Code上,在采訪中,洪強寧先生談到,豆瓣開放BeansDB,希望能看到其他語言的Client端實現,讓這個BeansDB的使用更加方便,能讓更多人用到這個產品。
目前,BeansDB在豆瓣主要部署了兩個集群:一個集群用于存儲數據庫中的大文本數據,比如日記、帖子一類;另外一個豆瓣FS集群,主要用于存儲媒體文件,比如用戶上傳的圖片、豆瓣電臺上的音樂等。
BeansDB的可伸縮性和可用性
豆瓣網開發BeansDB,采用Key-Value的存儲架構主要有哪些優點呢?在訪談中,洪強寧先生為我們講解了BeansDB在可伸縮性和高可用性方面的優勢。
BeansDB采用Key-Value存儲架構,其最大的特點是具有高度的可伸縮性;在BeansDB的架構下,在大數據量下,擴展數據節點將輕而易舉,只需要添加硬件,安裝軟件,修改相應的配置文件即可。
BeansDB在可用性方面也有很大的優勢,任何一個節點宕機都不會受到影響,數據是自動伸縮冗余的。在運維方面也很簡單,基本上沒有什么用戶數據的冗余殘余,所有數據通過一個同步腳本可以快速同步。
NoSQL是對網站架構師的一個挑戰
BeansDB是對亞馬遜Dynamo數據庫的一個簡化,是對NoSQL的一個延伸。在談到去年蓬勃發展的NoSQL運動時,洪強寧說:去年可以稱之為NoSQL元年,大量的NoSQL數據庫發布并被人們注意到。這與互聯網的發展有很大關系,互聯網發展帶來一個問題就是數據的海量增長,數據的可伸縮性是一個主要問題。傳統的關系型數據庫在這方面有一定的局限性,NoSQL就是為解決這一問題而誕生的。
隨著NoSQL數據庫的逐步成熟,會有越來越多的網站會把相適應的邏輯放在NoSQL數據庫上來,會看到越來越多的網站在應用NoSQL數據庫。
洪強寧同時強調,NoSQL的流行并不意味著關系型數據庫的消亡。NoSQL與關系型數據所關注和應用的點并不相同:在一個網站里面,除了有伸縮性的需求之外,還有關系型數據庫更合適的需求,在某些應用場景下,應用關系型數據更加有效合理。
NoSQL與關系型數據庫并存是對網站架構師的挑戰。以前架構師只考慮如何應用關系型數據庫,現在我們要考慮的是如何更好的同時應用好關系型和非關系數據庫的挑戰。這將是未來網站架構師需要關注的一個方向。
關于NoSQL請參考51CTO之前的報道《對SQL說不!NoSQL的數據庫技術革命》和《探尋關系數據庫和ORM的最佳替代者》
關于BeansDB請參考《豆瓣網開源數據庫BeansDB發布 采用分布式鍵值存儲》 ,BeansDB的一些特性列表:
◆高可用:通過多個可讀寫的用于備份實現高可用
◆最終一致性:通過哈希樹實現快速完整數據同步(短時間內數據可能不一致)
◆容易擴展:可以在不中斷服務的情況下進行容量擴展
◆高性能:異步IO和高性能的KeyValue數據TokyoCabinet
◆可配置的可用性和一致性:通過N,W,R進行配置
◆簡單協議:Memcache兼容協議,大量可用客戶端
客戶端
目前只提供了Python版本的客戶端,在python目錄中,該目錄中各文件的左右如下:
◆dbclient.py BeansDB的客戶端,由memcached的客戶端簡單封裝而成
◆status.py 查看BeansDB的狀態,各個節點的數據分布,以及同步狀態
◆sync.py 同步各節點
◆httpd.py HTTP方式訪問BeansDB的內容(目前只有GET方式)
◆store.pyx, dbserver.py test.py setup.py
◆Python 版本的BeansDB,核心部分是C實現
51CTO專訪洪強寧視頻請見下一頁
#p#
視頻采訪實錄