专访豆瓣网首席架构师洪强宁:BeansDB与NoSQL的应用与发展

原创
数据库 企业动态
BeansDB采用Key-Value存储架构,其最大的特点是具有高度的可伸缩性,在大数据量下,扩展数据节点将轻而易举;但NoSQL的流行并不意味着关系型数据库的消亡,NoSQL与关系型数据库并存将是对网站架构师的挑战。

【51CTO独家报道】在2009年数据库大事记中,我们曾重点关注过NoSQL运动和Key-Value形式的数据库产品;在《分布式可扩展非关系数据库聚焦》一文中也曾介绍过几款非关系型数据库。今天我们一起深入国内采用Key-Value的数据库——豆瓣网的BeansDB。

豆瓣网首席架构师洪强宁 
豆瓣网首席架构师洪强宁先生接受51CTO记者访问

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#

视频采访实录

责任编辑:佚名 来源: 51CTO.com
相关推荐

2010-04-24 22:15:21

Python豆瓣洪强宁

2012-04-26 10:22:27

豆瓣网洪强宁Python

2016-08-29 11:33:23

京东云云计算云安全

2012-03-26 20:10:58

去哪儿架构师艺术家

2009-06-30 16:34:44

微软

2011-12-23 15:56:02

2010-03-02 09:44:32

首席架构师赵亮

2009-12-18 10:22:50

Ray Ozzie架构师

2010-12-16 11:05:36

数学程序员Google首席Jav

2012-03-21 17:30:21

百度架构师

2017-04-16 00:26:34

融云直播互动系统

2012-04-25 14:33:52

HTML5UniSDP混合应用

2020-06-28 14:15:52

前端架构师互联网

2012-05-09 08:59:59

百度云架构师林仕鼎

2011-03-11 15:38:08

Java

2010-04-20 09:18:00

架构师

2009-12-31 09:51:59

BeansDB键值存储

2011-07-15 09:44:20

Ruby

2014-04-09 18:01:42

京东

2011-05-13 09:46:20

MySQLNoSQL
点赞
收藏

51CTO技术栈公众号