写点什么

专访基于 Erlang 的开源 NoSQL 数据库 Tiger 创始人姚新明

2012 年 7 月 12 日

编者按:感谢 ZoomQuiet 淘宝褚霸为本次采访提供问题。

姚新明,Erlang 程序员,目前就职于安防技术中国有限公司杭州研究院云计算部,从事分布式文件系统的研发,早期从事企业信息系统开发、SaaS 系统架构,写过javascript,干过java,会点perl、c、emacs lisp,喜欢linux、emacs,爱好开源技术,目前主要关注NoSQL、分布式技术、分布式文件系统。

InfoQ: 请对 Tiger 项目做个介绍。

姚新明: Tiger 是一个 Erlang 开发的 NoSQL 数据库,基于 Erlang、zab 协议以及 leveldb、Redis 引擎实现,目的是提供高性能,高可靠性,高可用性的数据服务。单点问题一直是困扰架构师的主要问题之一,自己以前做架构的时候也碰到比较多,一直没有找到好的解决方案,接触 Erlang、zab 协议,leveldb 后,我意识到我以前所面临的一些问题是可以解决的,所以就有了 Tiger。

InfoQ: Tiger 在数据的安全性方面是如何做到的?

姚新明:Tiger 采用 2f+1 的集群模式,数据相当于多副本存储,所以数据丢失的概率比较小。

InfoQ: Tiger 在灾难恢复方面有哪些特性?

姚新明: Tiger 采用 2f+1 的集群模式,是基于 consensus 设计理念的集群,因此在 f 台机器出故障的时候不会影响系统的可用性,新增加的机器可以在线加入集群,历史数据会先从本地恢复,再从 leader 同步剩余的数据,所以只要不是所有机器都 crash,那么系统是可以恢复的。

InfoQ:能否介绍下 Tiger 的性能和可以承载的数据集大小?

姚新明:Tiger 的单机读写可以达到 10k tps 的能力,集群读写能力为 n:1, 这主要得益于 Erlang 强大的网络能力,以及 leveldb 存储引擎。数据集如果是 leveldb 引擎,主要瓶颈在磁盘容量,如果是 Redis 引擎,瓶颈主要是在内存,另外数据量太大系统重启恢复的时间会相对长点,zab 引擎的 log 是使用 leveldb,从 leveldb 的测试报告,大概是 100M 左右的顺序读能力,所以如果是 6G 的数据,估计回放数据要 2 分钟左右。

InfoQ: 为什么选择 Erlang 作为开发平台?

姚新明: Erlang 在网络编程方面有很大的优势,另外分布式协议 paxos 和 zab 都是基于消息的协议,Erlang 的 actor 模型很适合处理这种协议,用 Erlang 实现的 zab 引擎只有 2k 代码左右,比 zookeeper 的代码量小很多。

InfoQ: 为什么不在 menisa 上进行改进?

姚新明:menisa 是一个不错的数据库,功能比较多,但是也有比较明显的缺点,首先是对网络分区没有很好的处理,另外单个表的限制也是比较大的问题,Erlang 做数据库引擎其实不是一个很好的选择,个人认为 mmeisa 更适合 2 台机器做 HA 的模式,不是特别适合分布式大数据。

InfoQ: 作为少数派的基于 Erl 的 NoSQL 作品, 和 CouchDB/CouchBase ,Tiger 相比有什么优势?

姚新明: CouchDb 是文档数据库,我以前也简单用过,从性能和可靠性以及可用性方面 Tiger 应该是有更大的优势。CouchBase 其实和 Tiger 的做法类似,Erlang 做通讯层,c 做持久层,目前 Tiger 功能相对少些,因为 zab 协议的支持,可靠性和可用性应该更好,性能方面没有对比过。

InfoQ:目前,您推荐在什么场景中使用 Tiger?

姚新明: 比较适合 N:1 读写的场景,系统对可靠性和可用性要求比较高都可以考虑 Tiger,比如 session 服务器,认证中心都是可以的,当然作为缓存也可以, 应该说使用 memcached 和 Redis 的场景都能使用,当然 Redis 接口目前还不是很全。部署是建议 3 台或者 5 台集群方式。如果是采用 Erlang 开发 server,也可以嵌入 Tiger 中使用的 zab_engine 来解决多 server 的数据一致性问题。

InfoQ: Tiger 对中文信息是否有方便的支持?

姚新明: 下一步将完善文档,因为前端采用的是大家都比较熟悉的 memcached 协议和 Redis 协议,所以从使用的角度应该问题不大。如果只是验证,在项目主页上有说明,基本上是傻瓜型的,生产环境安装部署需要修改几个配置,这个会增加到文档中去。

InfoQ: 对于 Tiger 的未来有什么计划?

姚新明:

  1. 根据用户反馈,完善已有的 api 包括 memcached 和 Redis ,推出稳定的版本
  2. 完善性能测试,性能调优
  3. zab 引擎的完善
  4. 增加数据备份功能

从长远的角度是考虑做一个类似 riak 的系统,但不是 p2p 模式,而是采用 master slave 模式,数据一致性通过 zab 引擎来实现,那么系统将会是一个大型的高可靠性分布式 K/V 系统。

InfoQ:目前有种说法是最低调的 Riak 可能是最终胜出者。Tiger 的目标是 Riak, 那为什么 Riak 目前无法解决手上的问题? 或者説 Riak 相比 Tiger 的应用场景有什么不同?

姚新明: Riak 是 p2p 模型的,对于数据是基于 CAP 的最终一致性,相当与弱一致性,我还是比较喜欢 master slave 模式,简单可控性强。另外 Riak 中所有 node 都是连接的,保活消息广播量比较大,估计能支持的节点数会有限。

Riak 我是比较喜欢的,Basho 公司应该是在 c 和 Erlang 方面都很有实力的公司,Tiger 的项目结构是参考 Riak 做的,打包脚本是直接从 Riak 拿来的,省了不少工作。eleveldb 也是从 Basho 公司拿来的。


给 InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ )或者腾讯微博( @InfoQ )关注我们,并与我们的编辑和其他读者朋友交流。

2012 年 7 月 12 日 02:003830
用户头像

发布了 479 篇内容, 共 124.3 次阅读, 收获喜欢 25 次。

关注

评论

发布
暂无评论
发现更多内容

【万字图文-原创】 | 学会Java中的线程池,这一篇也许就够了!

一枝花算不算浪漫

并发编程 jdk源码 线程池

使用 webpack 搭建一个简单的 React 脚手架

张张张小烦

react.js

ArrayList 源码分析

读钓

Java 源码分析 jdk源码

青春时期的打油诗

墨凡

随笔

ARTS打卡Week 01

teoking

android WebRTC

《陆蓉行为金融学讲义》 - 读后感

石云升

读书笔记 投资 行为金融学 理性 公平

k8s 上运行我们的 springboot 服务之——我们的springboot能够在k8s上运行

柠檬

k8s istio springboot

字节跳动:高级人才的五个基本素质

池建强

人才培养

时间管理的本质

史方远

职场 心理 成长

谈谈控制感(9):提升控制感排名第一的武器

史方远

职场 心理 成长

数据与广告系列二:计算广告和推荐系统

黄崇远@数据虫巢

数据挖掘 大数据 互联网 广告 推荐系统

Kubernetes 资料集合

倪朋飞

学习 Kubernetes 架构模式

Spring Data R2DBC 入门

稻草鸟人

MySQL WebFlux springboot R2DBC

Spring Security密码登录流程源码分析

读钓

源码分析 spring security springboot

编程入门整理

紫枫

读书笔记

宏在C++中的替代解决方案

老王同学

Lucene的Smart CN实现分词、停用词、扩展词

Page

中文分词 lucene 停用词 扩展词 SmartCN

谈即时编译优化-以异常堆栈丢失为例

寻筝

从引用聊一聊 Java 垃圾回收

Rayjun

Java 引用 对象

ARTS week1

紫枫

ARTS 打卡计划

关于工作的一点总结

墨凡

工作思路

Tomcat学习分享

墨凡

tomcat

Java 数据持久化系列之JDBC

程序员历小冰

Java JDBC 持久化

谈谈我的云笔记使用之路

读钓

学习 个人成长 写作

Algorithm week 1: Merge Two Sorted Lists

猫吃小怪兽

算法 链表 ARTS 打卡计划

鄙视链 & 全栈

伯薇

学习 能力提升 全栈

修改Tomcat窗口的名称

阡陌r

Java tomcat 踩坑 实施

leetcode练级-两数之和

幸福三寸日光

算法 LeetCode js

其实,还是让我挺震惊的,程序员的换行率竟然高达 40%

非著名程序员

程序员 程序人生 自我思考

音视频会议系统-Janus的安装与布署

音视频专家-李超

音视频 WebRTC 音视频会议

leetcode练级-只出现一次的数字

幸福三寸日光

算法 LeetCode js

专访基于Erlang的开源NoSQL数据库Tiger创始人姚新明-InfoQ