Redis高可用,高性能,架构演进史

时间: 2019-07-26阅读: 101标签: 架构

介绍

上个礼拜,我搭建了一个mongo分片集群,发现分布式系统保证高可用和高性能的套路都差不多。高性能就是做分片(可以类比为分库分表,将数据分到不同服务器上),在Kafka中叫分区,在mongodb中叫shard,在HDFS上叫DataNode。而保证高可用的方式就是做交叉备份。然后我很好奇Redis是怎么部署的。

上测试环境查看集群的状态

info replication

输出如下,好吧,没有做高可用,一个master节点开跑。

# Replication
role:master
connected_slaves:0

一个Redis实例其实有很多问题,最起码Redis崩了就没法提供服务了,而且单机能够承载的QPS在上万到几万不等


replication(复制)

如果业务要承载的QPS在几十万,单机是不可能做到的,此时就可以用到复制。做一个主从架构,一主多从,master节点负责写,slave节点负责读,假如说一个节点可以承载的5w读QPS,那么两个节点就可以承载10w的读QPS,水平扩容非常方便。



master节点挂太多slave节点会有性能问题,此时就可以在slave节点上挂slave节点

redis replication的核心机制有如下几点

1.redis采用异步方式复制数据到slave node,不会block master node的正常工作
2.一个master node可以配置多个slave node,slave node也可以连接其他的slave node
3.slave node主要用来进行横向扩容,做读写分离,扩容的slave node可以提高读的吞吐量

主从复制的实现原理

1.slave连接master,发送SYNC命令; 
2.master接收到SYNC命名后,开始执行BGSAVE命令生成RDB文件并使用缓冲区记录此后执行的所有写命令; 
3.master BGSAVE执行完后,向slave发送快照文件,并在发送期间继续记录被执行的写命令; 
4.slave收到快照文件后丢弃所有旧数据,载入收到的快照; 
5.master快照发送完毕后开始向salve发送缓冲区中的写命令; 
6.slave完成对快照的载入,开始接收命令请求,并执行来自主服务器缓冲区的写命令;


sentinel(哨兵)

主从架构有一个缺点就是如果master节点挂了,那么写服务是不可用的,因为slave节点默认是只读的,这时就重启master节点或者重新配置主从,有没有更好的方案呢?类似zookeeper的组件,能自动完成主从切换。在Redis中还真有,就是sentinel节点,当master节点发生故障能自动完成主从切换。


当master节点挂掉时,sentinel将一个slave节点变成maste节点,当原先的master节点可用时,以slave的角色加入集群。
一个高可用的系统是很忌讳有单点问题的。看到没,sentinel就是一个单点,如果sentinel挂了,主从切换也就没人做了。所以应该将sentinel也做成一个集群


哨兵的作用有如下几点

1.集群监控,负责监控redis master和slave进程是否正常工作
2.消息通知,如果某个redis实例有故障,那么哨兵负责发送消息作为报警通知给管理员
3.故障转移,如果master node挂掉了,会自动转移到slave node上
4.配置中心,客户端初始化时,通过哨兵获得master地址,如果故障转移发生了,通知客户端新的master地址


redis cluster(集群)

主从+哨兵,只能保证Redis的高可用,并不能保证Redis的高性能,因为一个master节点并不能放海量数据,而且单个Redis的实例过大时,会导致rdb文件过大,当执行主从同步时时间过长。

如果想做到高性能该怎么办?分片啊,我一开始就提到了,都是一个套路。redis搞几个节点,每个节点存储一部分数据。可想而之,此时查询和插入都得按照一定的分片策略,总不能查询一个数据把所有的redis节点遍历一遍吧。而这种操作不应该放在客户端,中间件兴起了,常见的有codis,twemproxy



图片来自《Redis 深度历险:核心原理与应用实践》

客户端不连接具体的Redis,而是连接Codis,2个Codis节点保证高可用,和Mycat一个套路。

当然Redis作者也意识到这个问题了,redis cluster应用而生。


链接: http://www.fly63.com/article/detial/4390

如何架构一个中后台项目的前端部分?

不管是前端抑或后端,从零开始做一个新项目避免不了技术选型这一块,其应该也是最先需要考虑的内容,之后的一切都会建立在这之上。这篇文章便主要来谈谈在架构一个中后台系统的前端部分上我的实践点。

MySQL逻辑架构简介

第一层结构主要处理客户端与mysql服务端的连接、授权认证、安全等;第二层是Mysql服务端的核心,功能包括查询解析、分析、优化、缓存等,存储过程、触发器、视图等都在这一层实现;第三层的存储引擎主要负责数据存储和提取

架构师教你如何设计一个高并发系统?大多程序员都收藏了

其实所谓的高并发,如果你要理解这个问题呢,其实就得从高并发的根源出发,为啥会有高并发?为啥高并发就很牛逼?我说的浅显一点,很简单,就是因为刚开始系统都是连接数据库的

业务架构师给你一些建议

搬运工: 付老师讲述了自己成为业务架构师的一些个人经历,并且也给出了学习建议,最后推荐了一些不错的书籍。希望对你成为业务架构师有帮助或者启发,也可以在完成业务开发建模等有所帮助。

从Web开发者的视角来解读MVC架构

MVC代表了一种软件框架的设计模式。该框架的主要功能是:通过允许多名开发人员共同在一个项目上开展工作,以分离应用程序的功能、逻辑和接口,进而促进有组织的编程实现方法

高级架构设计师 推荐书籍

关于程序员类的技术书籍有很多,但是往往没有时间阅读,下面的这些书籍,是由John Sonmez(《软技能》作者)精选的架构经典书籍,可以帮助你提高技术技能,让你成为一名更好的程序员

大型项目前端架构浅谈

本篇文章不会更多侧重于具体技术实现,而是尝试从更高角度出发,分析为什么要这么做,这些设计能解决什么问题,成本和收益如何。前端架构的设计,应是用于解决已存在或者未来可能发生的技术问题

前端架构师对于框架的技术选型

前端技术发展日新月异,互联网上出现的新型框架也比较多,如何让新招聘的人员能够直接上手接替项目,或者有相关人员请假,替补人员的接替工作,如何做到不同前端工程师的开发的差异性更小

vue/react/angular开发的css架构思考

前端开发现在已经从传统的后端web多页面开发模式转向前端单页SPA开发模式,而vuejs/react/angular则是开发SPA非常优秀的前端框架。组件化开发由react最早提出,vuejs后发优势,将组件化开发贯彻到了极致

微服务架构 VS 单体架构

在软件行业,微服务架构是一种重要的发展趋势。这一趋势,不仅仅是对企业内的IT信息系统建设,甚至在企业向数字化转型方面,都有着深远的影响

fly63.com版权所有,内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权,请与小编联系!情况属实本人将予以删除!

广告赞助文章投稿关于web前端网站点搜索站长推荐网站地图站长QQ:522607023

小程序专栏: 土味情话心理测试脑筋急转弯幽默笑话段子句子语录成语大全