OneValue,兼容Redis协议和命令的持久化Key-Value存贮,超高性能,单实例胜过小集群!

OneValue是一款基于Redis协议和命令集的持久化Key Value存贮产品,它支持Redis里的绝大部份数据类型,包括字符串、哈希表、列表、集合以及有序集合,以前在这些类型上的所有操作。在配置良好的机器上,得益于基于多线程的消息处理框架,单个OneValue实例可以提供超过100万QPS的存取能力,可以保证在高并发下的存取操作的时延,基于单进程的Redis则很难保证。可以使用OneValue来减少集群里Redis的台数,或者将较小的Redis集群直接替换成单个OneValue实例(可配置主备)。下图是我们在一台8核CPU的机器上做的一次性能测试结果(测试工具使用Redis Benchmark,同时跑多个进程)。

onevalue_first_benchmark_result

OneValue主要的功能和特点如下:

  1. 单机单实例可高于100万QPS能力,在较高并发下存取时延要比Redis低;OneValue在向上扩展和水平扩展上可以有更好的平衡,Redis在不启用Pipeline的情况下性能较低。
  2. OneValue会将数据实时持久化到磁盘,可以做到数据零丢失。而Redis是基于内存的,虽然有持久化机制,意外情况下数据损失会比较严重。如果将文件放到共享存贮上,可以起到更好的数据保护作用,两台OneValue之间还可以互为主备。
  3. 完全兼容Redis协议,无须应用重写,并有计划提供Memcached协议的支持。
  4. 支持通过Unix Socket文件进行连接,如果应用和OneValue布在一起,可以有更高的网络效率。
  5. 可以开启数据压缩功能,以节约磁盘空间,提升缓存的命中率,从而提升整体性能(需要配置较好的CPU)。
  6. 数据自动过期功能,可以设置一个过期时间,在专门的线程进行清理,或在下次访问到时进行清理。
  7. 支持主备结构(Master/Slaves),一主一备或一主多备,以防止单点故障,或者将文件放在共享存贮或云盘上,以防数据丢失。
  8. 守护进程,防止单机进程级故障。

OneValue并不支持所有的Redis命令(也可能与最新的Redis版本存在差异),以下命令是不支持的:

  1. Redis实例后端管理命令,例如:”BGSAVE”、”CLIENT LIST”、”CLIENT KILL”等。
  2. 消息订阅和发布命令,例如:”PUBLISH”、”PUBSUB”、”SUBSCRIBE”等。
  3. 事务相关命令,例如:”DISCARD”、”WATCH”等。
  4. 脚本相关命令,例如:”EVAL”、”SCRIPT LOAD”等。
  5. 多数据库相关的命令,例如:”SELECT”等。

不支持的命令将会给出错误消息,由于CPU的主频很难提高,而CPU内核的数量最近几年增长很快,平民软件使用多线程消息网络框架来提高整体并发量是非常准确的做法。在一次8核机器的测试中OneValue用光了所有的CPU资源,说明更多的CPU还可以得到更好的吞吐量。