BT

天涯新款key-list类型内存数据引擎——Memlink

作者 张凯峰 发布于 2010年11月19日 | 被首富的“一个亿”刷屏?不如定个小目标,先把握住QCon上海的优惠吧!

天涯社区最近开发了一款数据引擎——Memlink,并将其开源。对于为什么会出现这样一款开源项目、它的能力和市面上的其他款同类型项目相比有怎样的优势,InfoQ中文站特地采访了天涯社区在北京研发中心的技术负责人冯勇先生。

1. 您好,能请您先自我介绍一下吗?您最近在做哪些有趣的事情呢?

大家好!我是天涯技术中心系统平台部负责人冯勇,系统平台部是今年刚组建的部门,旨在优化天涯线上产品的系统架构。天涯是一个有十二年历史的网站,对于一个累积了十二年补丁的系统进行重构、优化,本身就是一件很有趣、很有挑战的事情。

2. 是出于什么初衷,天涯会开发出这样一款数据引擎出来呢?并且最后要开源出来。

近些年,Nosql系统非常流行,也确实对sql系统进行了合理补充,为Web应用提供多种数据解决方案。但是在开源Nosql系统中,key-value系统可选择较多,而key-list/queue系统可选择较少,因此我们开发了memlink来满足我们自己的需要。

在这里,需要强调一些key-list的概念,在实际场景中有大量需要key-list的地方。比如:论坛中的主题列表、回复列表,微博中的用户关注列表、用户feed列表、用户关注feed列表等等。如果使用key-value中的value来存储list(比如:list打包成json放入value中),其操作性能是非常低效的。

理想的Key-list通常需要如下特点:

  1. list是海量的、且操作性能高效
  2. list是有序的、且可动态调整顺序

至于为什么开源?一方面,我们很多工作都得益于已有的开源系统,所以回馈开源社区是我们应做的义务;另一方面,技术分享也有利于公司本身技术的成长,并吸引更多的技术人才。

3. 能介绍一下Memlink的特性吗?

Memlink是一个高性能、持久化、分布式的Key=>List/Queue数据引擎。正如名称中的Mem所示,所有数据都建构在内存中,保证了系统的高性能,同时使用块链进行内存压缩,使用redo-log技术保证数据的持久化。此外,Memlink还支持主从复制、读写分离、数据项过滤操作等功能。

特点:

  • 内存数据引擎,性能极为高效
  • List中的Node采用块链组织,精简内存,优化查找效率
  • Node数据项可自定义Mask表,支持多种过滤操作
  • 支持redo-log,数据持久化,非Cache模式
  • 分布式,主从同步
  • 读写分离,写优先处理。

4. 我们知道市面上还有一些其他基于内存的数据引擎,比如Redis和Scalaris,跟它们相比Memlink解决了什么特别的问题吗?

在设计和开发memlink之前,我们也认真分析对比了Redis。最终没有采用Redis原因有以下四点:

  1. Redis持久化策略(redo-log)不能完全满足线上生产的需求。对于一个成熟的互联网应用应该有足够的容错能力。比如系统统重启、宕机等而不丢失数据。Redis持久化策略一:定时同步磁盘(此期间重启会丢失部分数据);持久化策略二:不断追加log,这样容易使log膨胀,性能降低。Memlink持久化策略是同时借鉴Redis两种策略,在非创建快照期间追加redo-log,在完成快照后清除redo-log。
  2. Redis主从同步策略不够完善。比如:slaver因为某原因丢失了部分同步数据,则需要重新完全获取一份主节点的所有数据。在大数据量的情况下,不太合适线上生产的需求。
  3. Redis单线程模式,读写没有分离,只能使用单核。Memlink为多线程,充分利用多核,并进行了读写分离,优先保证写。
  4. 在内存消耗和性能上Memlink要优于Redis。

Memlink是key=>list/queue引擎,Scalaris是key-value,两者功能出发点上不一样。

5. Memlink在天涯内部的哪些系统中得到了采用?可以提供一下Memlink带来的性能变化的数据吗?

Memlink主要应用于天涯论坛类型产品(论坛、来吧)中。比如论坛的主题列表,当数据达到百万、千万量级,采用Mysql系统进行分页浏览时,基本上不能响应,而Memlink则性能提升了上百倍。具体可见Benchmark

6. 能向广大的开发者朋友们介绍一下,如何来选择一款适用自己的NoSQL产品呢?

首先需要确定业务需求,是否需要NoSQL产品。对于大多数百万量级、千万量级的应用,MySQL也能支持。

其次在明确需要NoSQL产品后,应根据业务需求抽象出数据模型,比如:有些数据是需要采用key-value系统存储,有些数据是需要采用key-list系统存储,有些数据是采用文档数据库存储等等。

对于NoSQL产品候选列表的选项,可以从如下维度进行考虑:

  1. 系统的容量、性能、软硬件环境是否符合需求?
  2. 数据的安全机制如何?各种异常是否会丢失数据?
  3. 具备主从复制功能?何种一致性策略?
  4. 可扩展性?自动扩展 or 程序进行扩展?
  5. 系统的可控性?系统的成熟度、对开发者的支持度、bug谁来修复等等

7. Memlink现在的版本号是多少?未来的发展计划是怎样的?

Memlink现在的版本号为0.2,具备基本key-list/主从复制等功能,目前正在测试中。

在0.3/0.4版本中,Memlink会增加双向队列、用户认证等功能。具体可以见Memlink的RoadMap

长远而言,Memlink专注为一个高性能、持久化、分布式的Key=>List/Queue数据引擎,不会增加其他数据存储模型。

更多关于Memlink的信息,请参考Memlink的介绍文档设计文档

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

听起来貌似不错 by huaiyong li

听起来貌似不错

架构 by Java 陈

希望中国有越来越多的架构师

很不错的东东 by hao ding

前几天就看到这个产品大概的介绍,希望能早日出来让大家一起测试。

关注 by long tom

关注

cassandra by 徐 少男

您觉得cassandra怎么样

很想知道什么时候会Release by Lee Bob

至少现在看到Google Code上还只是个空的壳子。

Re: 很想知道什么时候会Release by von brightman

现在还在测试阶段,预计元旦左右会发布。

Re: 很想知道什么时候会Release by 赵 威

空壳子到不是,代码在svn里,没有打包出来。

关注 by niu Vniu

听起来貌似不错,关注

关注 by 张 晓科

key-list/queue,非常棒,关注!

很好的项目 by Sun Joy

经过测试,Memlink很不错。
同时也推荐我们的NoSQL开源项目:code.google.com/p/treapdb/
欢迎掺和

Re: 很想知道什么时候会Release by 李 永华

现在你去看看,你也可以用svn下载源代码的

Re: 很好的项目 by 李 永华

什么时候看看,谢谢

一些不清楚的地方 by 郭 志通

花了几天时间看了下memlink的源码,有几个问题:
1、DataBlock这种方式会不会影响插入时候的效率?
2、Redis使用单线程读,那么多线程的I/O和单线程的慢多少呢?

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

14 讨论
提供反馈
错误报告
商务合作
内容合作
Marketing
InfoQ.com及所有内容,版权所有 © 2006-2016 C4Media Inc. InfoQ.com 服务器由 Contegix提供, 我们最信赖的ISP伙伴。
北京创新网媒广告有限公司 京ICP备09022563号-7 隐私政策
BT

We notice you’re using an ad blocker

We understand why you use ad blockers. However to keep InfoQ free we need your support. InfoQ will not provide your data to third parties without individual opt-in consent. We only work with advertisers relevant to our readers. Please consider whitelisting us.