BT

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

作者 张凯峰 发布于 2010年11月19日 | 注意:GTLC全球技术领导力峰会,500+CTO技聚重新定义技术领导力!

天涯社区最近开发了一款数据引擎——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