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