2013-01-06

LevelDB 服务器 SSDB 支持主从(master-slave)同步了!

Views: 45994 | 5 Comments

经过前段时间的连续奋战, 前两晚的代码清理和收尾, 基于 LevelDB 的 KV(支持数据类型包括 hashmap, zset) 存储服务器 SSDB 终于发布了 1.2.0 版本. 这是一个里程碑式的版本, 因为从此 SSDB 支持了主从同步(master-slave replication), 再加上在线备份功能, SSDB 已经成为一个真正的生产环境的存储服务器!

Google 的 LevelDB 存储引擎保证了 SSDB 至少能存储 T 级别的数据, 并在上面进行快速的查询, 有报告称 100G 级别的数据已经在网站上正常工作. 而 SSDB 本身实现的备份和主从同步特性, 则是对生产环境的必要支持 - 负载均衡.

从实现上, SSDB 利用 LevelDB 来存储数据, 以及数据的更新历史. 由于两者都是 LevelDB 来保证持久化, 所以 SSDB 的主从同步可以容忍不稳定的网络, 包括网络异常中断, 带宽起伏等, 因为 SSDB 能从上一次的同步状态中继续恢复. 相比较, Redis 在这方面做得不好, 经常因为网络不稳定而导致主从之间不断地进行全量数据的复制.

SSDB 1.2.x 是 beta 版, 欢迎在这方面有经验的同学参与进来一起开发, 已经有百度的前同事决定要加入进来了.

SSDB 项目地址: https://code.google.com/p/zdb/

另外, LevelDB 本身还有一些待改进的地方, 例如在磁盘写 IO 上面没有限速, 磁盘写 IO 限速在生产环境中是非常重要, 我们的经验证明了这一点. 一旦磁盘写压力过大, 不仅导致其它进程可能阻塞, 甚至可能对操作系统也有影响.

Related posts:

  1. SSDB – 支持 zset 的 LevelDB 服务器
  2. SSDB 解决了 Snappy 导致 LevelDB 编译失败的问题
  3. SSDB 已经支持在线备份功能!
  4. SSDB(LevelDB 服务器) PPT
  5. LevelDB 会丢数据吗?
Posted by ideawu at 2013-01-06 13:34:53 Tags: , ,

5 Responses to "LevelDB 服务器 SSDB 支持主从(master-slave)同步了!"

  • 学习了一下主从同步的实现,如果一开始slave没有数据,则master会创建一个迭代器,遍历所有的kv,然后将数据发给slave。这期间为了防止一次迭代的时间过长,还穿插发送sync请求。

    请教下会不会存在这样的问题:
    迭代过程中有更新key,sync请求将这个key同步过去后,copy过程又将这个key刷会老值?

    下面这段代码注释:
    // WARN: When there are writes behind last_key, we MUST create
    // a new iterator, because iterator will not know this key.
    // Because iterator ONLY iterates throught keys written before
    // iterator is created.
    if(this->iter){
    delete this->iter;
    this->iter = NULL;
    }
    这里只处理了”behind last_key“,但如果并没有超过last key,仅仅对已有的key做更新,迭代器一样发现不了。 Reply
    @乔木: sync 只针对老值(已被 copy 的值), 如果还未 copy, 则不会 sync. 所以不存在"刷回老值"的情况. Reply
  • 开发太难了,早转测试了。哎。。 Reply
  • Hi 我想加入进来开发可以么. 我现在也在百度工作. ^-^ Reply

Leave a Comment