Redis高可用架构多种架构对比最佳

本文由温国兵(三七互娱数据库管理员)分享、汇编,主要内容来自社区“Rdis高可用架构最佳实践”交流活动,liucj00(平安好房数据库管理员)等社区会员也贡献了内容

一前言Rdis是一个开源的使用ANSIC语言编写、支持网络、可基于内存亦可持久化的日志型、Ky-Valu数据库,并提供多种语言的API。

如今,互联网业务的数据正以更快的速度在增长,数据类型越来越丰富,这对数据处理的速度和能力提出了更高要求。Rdis是一种开源的内存非关系型数据库,给开发人员带来的体验是颠覆性的。在自始至终的设计过程中,都充分考虑高性能,这使得Rdis成为当今速度最快的NoSQL数据库。

考虑高性能的同时,高可用也是很重要的考虑因素。互联网7x无间断服务,在故障期间以最快的速度Failovr,能给企业带来最小的损失。

那么,在实际应用中,都有哪些高可用架构呢?架构之间有何优劣?我们应该怎么取舍?有哪些最佳实践?

二问题集锦

.1高可用相关

问题1:Rdis常用高可用架构有哪些?

Rdis高可用架构如下:

RdisSntinl集群+内网DNS+自定义脚本

RdisSntinl集群+VIP+自定义脚本

封装客户端直连RdisSntinl端口

JdisSntinlPool,适合Java

PHP基于phprdis自行封装

RdisSntinl集群+Kpalivd/Haproxy

RdisM/S+Kpalivd

RdisClustr

Twmproxy

Codis

问题:Rdis高可用架构优劣对比?

—RdisSntinl集群+内网DNS+自定义脚本

优点:

秒级切换

脚本自定义,架构可控

对应用透明

缺点:

维护成本略高

依赖DNS,存在解析延时

Sntinl模式存在短时间的服务不可用

—RdisSntinl集群+VIP+自定义脚本

优点:

秒级切换

脚本自定义,架构可控

对应用透明

缺点:

维护成本略高

Sntinl模式存在短时间的服务不可用

—封装客户端直连RdisSntinl端口

优点:

服务探测故障及时

DBA维护成本低

缺点:

依赖客户端支持Sntinl

Sntinl服务器需要开放访问权限

对应用有侵入性

—RdisSntinl集群+Kpalivd/Haproxy

优点:

秒级切换

对应用透明

缺点:

维护成本高

存在脑裂

Sntinl模式存在短时间的服务不可用

—RdisM/S+Kpalivd

优点:

秒级切换

对应用透明

部署简单,维护成本低

缺点:

需要脚本实现切换功能

存在脑裂

(RdisClustr、Twmproxy、Codis优劣对比见下个问题)

问题:常见的Rdis集群方案有哪些优缺点?

(解答来自liucj00)

Twmproxy:

多个同构Twmproxy(配置相同)同时工作,接受客户端的请求,根据hash算法,转发给对应的Rdis。

优点:

开发简单,对应用几乎透明

历史悠久,方案成熟

缺点:

代理影响性能

LVS和Twmproxy会有节点性能瓶颈

Rdis扩容非常麻烦

Twittr内部已放弃使用该方案,新使用的架构未开源

Codis:

ZooKpr

存放路由表和代理节点元数据

分发Codis-Config的命令

Codis-Config集成管理工具,有wb界面

Codis-Proxy

无状态代理,兼容Rdis协议

对业务透明

Codis-Rdis

基于.8版本,二次开发

加入slot支持和迁移命令

优点:

开发简单,对应用几乎透明

性能比Twmproxy好

有图形化界面,扩容容易,运维方便

缺点:

代理依旧影响性能

组件过多,需要很多机器资源

修改了Rdis代码,导致和官方无法同步,新特性跟进缓慢

开发团队准备主推基于Rdis改造的rborndb

RdisClustr:

PP模式,无中心化。把ky分成个slot,每个实例负责一部分slot。客户端请求若不在连接的实例,该实例会转发给对应的实例。通过Gossip协议同步节点信息。

优点:

组件all-in-box,部署简单,节约机器资源

性能比proxy模式好

自动故障转移、Slot迁移中数据可用

官方原生集群方案,更新与支持有保障

缺点:

架构比较新,最佳实践较少

多键操作支持有限(驱动可以曲线救国)

为了性能提升,客户端需要缓存路由表信息

节点发现、rshard操作不够自动化

.Rdis通用

问题1:Rdis相对MySQL、PostgrSQL这些关系型数据库,有什么优缺点?

(解答来自liucj00):

Rdis主要是用来做缓存,它有持久化,但也只是为了缓存的可靠而已。优点是数据全放内存,速度快。缺点就是,数据大小不能超过内存大小。两个用在不同业务场景,Rdis无法取代传统关系型数据库。

(解答来自赵海):

Rdis首先它是一种内存数据库,最大的优势在于效率高。尤其在某些特定场合下,例如热点数据量非常大,而数据从内存和磁盘之间的换入换出代价比较高的情况下,Rdis就会体现它的价值。

传统关系型数据库在于它对数据的一致性保障,它的数据模型范式是遵循严格事务规则的结构化数据,由于其数据的高度抽象化,它调度到内存的数据一般场合下不会占用很大的内存空间。

总的来说,两种数据库各有各的优点和缺点。不同的业务场合有特定的追求目标,rdis首要的是效率,适用的是一些单纯二维结构化数据无法表达的数据模型,而关系型数据库处理的是可以用范式模型表达的二维数据,追求的是数据的高度一致性。随着IT的发展,每一类型的数据库都会在其特定的场合内发挥出无可比拟的优势,最终的趋势是大家趋于平衡,没有最好,只有最适合。

(解答来自温国兵):

记住一句话:任何数据库都有自己的应用场景,应该







































北京哪家正规医院治疗白癜风
北京哪家治白癜风的医院好



转载请注明:http://www.xcqg58.com/jbjj/7073.html

  • 上一篇文章:
  •   
  • 下一篇文章: 没有了