当前位置: 首页 > 业界动态 > 技术评论 > 本文


百分点开源分布式内存数据库RedisSentinelClient




发布时间: 2016-2-1 10:30:43  

  随着公司业务的不断发展,和数据量的快速增长,单节点的Redis已经不能满足大数据量缓存的需求,实现分布式的缓存系统是个必然趋势。那么如何实现分布式呢?如何保证高可用呢?如何进行动态扩容呢?在Redis3.0诞生之前,业界并无成熟可靠的分布式Redis方案,百分点结合自身的需求,开发了基于客户端实现的分布式缓存系统 RedisSentinelClient,目前该系统已经开源。

 

  RedisSentinelClient基于Ketama算法在客户端实现了一致性hash,基于Sentinel实现了自动故障切换机制来保证缓存系统的高可用性,并且支持了分布式缓存系统的动态扩容。百分点长期致力于大数据底层技术的研发,秉承开放共享的精神,将此系统开源,以帮助更多的企业和个人开发者减少在分布 式缓存系统上的研发成本。

 

  RedisSentinelClient的优势特性

 

  一致性hash

 

  RedisSentinelClient采用一致性hash算法,把Redis实例的name做hash后形成hash环,客户端把key做hash后映射到hash环中对应的机器上。

 

  优化Ketama算法,实现负载均衡

 

  RedisSentinelClient优化了Ketama算法,把Redis实例的db数设置为1024映射为1024个db来散列到hash环中,这样可以使vdb均匀的分布在hash环的各个部分,以达到Redis实例的负载均衡。

 

  自动故障切换

 

  RedisSentinelClient订阅了Sentinel的消息,当某个Master挂掉,Sentinel会自动检测Master的状态并把某个Slave升级为Master,之后Sentinel会发送相应的消息给客户端,RedisSentinelClient根据Sentinel的消息,会提出连接池对应的无效连接,并对新的Master建立新的连接。这一切对上层用户都是透明的,RedisSentinelClient会进行自动故障切换。

 

  支持数据Rebalance

 

  通过RedisSentinelClient存入Redis集群的key会被转换为BusinessID_key,存入指定的Redis实例的db中,在需要Rebalance的时候,只需要查询出Rebalance对应的db中的所有key,对key进行重新存入即可。

 

  基于hiredis进行的二次开发

 

  RedisSentinelClient基于C语言的hiredis库进行二次开发,支持原生Redis协议。

 

  支持BusinessID来区分不同业务的key

 

  通过RedisSentinelClient存入Redis集群的key会被转换为BusinessID_key,BusinessID在RedisClient类的构造函数中传入,这样每个key中都存储对应的BusinessID,后期可以按照BusinessID进行统计,以控制不同业务线对Redis集群容量的占用。

 

  支持异步mget

 

  RedisSentinelClient封装了异步的mget,以提高mget的性能。异步mget会把用户传入的keys按照映射的Redis实例进行分组,分别按照分组后的keys对相应Redis实例进行mget,执行完毕所有分组后的mget后,再把结果进行合并后返回。

 

  命令接口加入重试机制

 

  由于Redis实例会关闭一段时间空闲的连接,RedisSentinelClient中加入了重试机制,在命令执行失败后会重试一次,如果连接由于空闲一段时间被服务端关闭,则重试时会重新创建连接,以保证命令执行成功。

 

  采用连接池来提高并发性能

 

  RedisSentinelClient对Redis集群中的每个Master实例都建立了一个连接池,接口执行完命令后会把连接放回连接池,连接池维护对Redis实例的长连接,以提高RedisSentinelClient的并发性能。

 

  RedisSentinelClient的多语言支持

 

  RedisSentinelClient支持C++、Java、Python。

 

  设计架构

 

  RedisSentinelClient采用了三层架构设计, 分别为连接层、哈希层和接口层,另外还有Sentinel监控层来监控Sentinel服务的存活状态。连接层包含同步连接池,异步连接池和Sentinel的连接。哈希层采用优化后的Ketama算法来做一致性hash。接口层为提供给上层用户的对Redis的key相关的操作命令,详见图1。

RedisSentinelClient设计架构

  via:百分点

 

  来源:36大数据

分享到: 微信 QQ空间 人人网 更多
阅读:2005次
下一篇:云备份答疑解惑

版权所有 © 2011-2017 南京凯发网娱乐大数据科技股份有限公司(股票代码:835305), 保留一切权利。(苏ICP备11060547号-1)  
凯发网娱乐大数据-专业的云存储、大数据、云计算产品供应商