`

同程凤凰缓存系统基于Redis的设计与实践(转)

阅读更多

 

本文摘自《深入分布式缓存》,此文中提到的同程在使用Redis过程中踩过的坑,非常真实也很有借鉴性,读文有感Mark如下:

 

1、Redis主从+Keepalived方案,存在的问题!

这本来是个很好的方案,但是忽略了主数据节点挂掉的情况。Redis的单进程、单线程设计是其简单和稳定的基石,只要不是服务器发生了故障,在一般情况下是不会挂的。但同时,单进程、单线程的设计会导致Redis接收到复杂指令时会忙于计算而停止响应,可能就因为一个zset或者keys之类的指令,Redis计算时间稍长,Keepalived就认为其停止了响应,直接更改虚IP的指向,然后做一次主从切换。过不了多久,zset和keys之类的指令又会从客户端发送过来,于是从机上又开始堵塞,Keepalived就一直在主从机之间不断地切换IP。终于主节点和从节点都堵了,Keepalived发现后,居然直接将虚IP释放了,然后所有的客户端都无法连接Redis了,只能等运维到线上手工绑定才行。

 

2、RDB数据落盘,存在的问题!

数据落盘也引起了很大的问题,RDB属于非阻塞式的持久化,它会创建一个子进程来专门把内存中的数据写入RDB文件里,同时主进程可以处理来自客户端的命令请求。但子进程内的数据相当于是父进程的一个拷贝,这相当于两个相同大小的Redis进程在系统上运行(?),会造成内存使用率的大幅增加。如果在服务器内存本身就比较紧张的情况下再进行RDB配置,内存占用率就会很容易达到100%,继而开启虚拟内存和进行磁盘交换,然后整个Redis的服务性能就直线下降了。

 

3、主从Redis之间网络动荡,存在的问题!

主从Redis之间的网络出现了一点小动荡,想想这么大的一个东西在主从同步,一旦网络动荡了一下下,会怎么样呢?主从同步失败,同步失败,就直接开启全同步,于是200GB的Redis瞬间开始全同步,网卡瞬间打满。为了保证Redis能够继续提供服务,运维同学,直接关掉从机,主从同步不存在了,流量也恢复正常。不过,主从的备份架构变成了单机Redis,心还是悬着的。俗话说,福无双至,祸不单行。这Redis由于下层降级的原因并发操作量每秒增加到四万多,AOF和RDB库明显扛不住。同样为了保证能持续地提供服务,运维同学也关掉了AOF和RDB的数据持久化。连最后的保护也没有了(其实这个保护本来也没用,200GB的Redis恢复太大了)。

 

4、滥用Redis命令,带来的问题!

Redis上挂载数千个客户端,每秒的并发量数万,系统的单核CPU使用率接近90%,此时Redis已经开始不堪重负。有程序向这个日志组件写入了一条7MB的日志,于是Redis堵死了,一旦堵死,数千个客户端就全部无法连接,所有日志记录的操作全部失败。

 

所以,对运维来说实践经验、规范操作、要踩的坑必不可少,对开发人员来说对中间件原理的理解和良好的服务/接口架构设计也必须要做到位!

 

同程凤凰缓存系统基于Redis的设计与实践”

http://www.sohu.com/a/212424883_494947

 

 

分享到:
评论

相关推荐

    Redis思维导图分布式缓存-基于Redis集群解决单机Redis存在的问题

    分布式缓存-基于Redis集群解决单机Redis存在的问题。分布式缓存-基于Redis集群解决单机Redis存在的问题。分布式缓存-基于Redis集群解决单机Redis存在的问题。分布式缓存-基于Redis集群解决单机Redis存在的问题。...

    基于redis的分布式缓存系统架构分析_张威.pdf

    【基于Redis的分布式缓存系统架构分析】 在现代高并发的互联网应用中,为了提高数据访问的速度和系统性能,往往采用缓存技术。基于Redis的分布式缓存系统因其高效、灵活的特点,被广泛应用于大型应用系统中。Redis...

    06-Redis缓存设计与性能优化最佳实践-ev.rar

    06-Redis缓存设计与性能优化最佳实践_ev.rar06-Redis缓存设计与性能优化最佳实践_ev.rar06-Redis缓存设计与性能优化最佳实践_ev.rar06-Redis缓存设计与性能优化最佳实践_ev.rar06-Redis缓存设计与性能优化最佳实践_...

    Mybatis-plus基于redis实现二级缓存过程解析

    Mybatis-plus基于Redis实现二级缓存过程解析 Mybatis-plus是一款基于Java语言的持久层框架,旨在简化数据库交互操作。然而,在高并发、高性能的应用场景中,数据库的查询操作可能会成为性能瓶颈。为了解决这个问题...

    redis本地缓存与redis缓存

    文件名称“RedisCache-master”可能是一个包含Redis缓存相关项目的源代码仓库,里面可能包括了如何配置、使用Redis作为缓存的示例代码,以及如何与本地缓存结合的实践。 总结来说,本地缓存和Redis缓存各有优势,...

    基于redis的缓存框架

    在IT行业中,缓存是一种非常...如果你对这个主题感兴趣,可以进一步研究提供的"redis-cache-demo.rar"和"redis-cache.rar"压缩包文件,这些资源可能包含示例代码和实现细节,有助于你理解和实践基于Redis的缓存框架。

    基于Redis缓存商城分类以及商品信息Demo

    在现代电商系统中,快速响应用户请求和提供高效的数据访问是至关重要的。...在实际项目中,还需要考虑如何根据业务需求进行缓存设计,以及如何处理与数据库的交互,确保系统的稳定性和数据的一致性。

    Redis缓存数据库_redis_数据库系统_

    五、Redis与其他数据库对比 相比传统的SQL数据库,Redis具有更高的读写速度和更低的延迟,但在数据一致性方面稍逊色。在选择使用Redis时,需根据应用场景权衡性能与数据一致性的需求。 六、最佳实践与注意事项 1. ...

    一种基于Redis的分布式爬虫系统设计与实现.pdf

    本文着重介绍了一种基于Redis的分布式爬虫系统的设计与实现。 【Redis在分布式爬虫中的应用】Redis是一种高性能的键值存储系统,它以其内存存储、高并发读写能力以及丰富的数据结构被广泛应用于分布式系统。在...

    基于redis的二级缓存

    本文将深入探讨基于Redis实现的二级缓存机制,以及如何将其与Hibernate框架结合使用,提升数据访问速度。 首先,理解二级缓存的概念至关重要。在传统的数据库应用中,一级缓存通常是Java应用程序内部的Session缓存...

    springMybatis+redis三级缓存框架

    "springMybatis+redis三级缓存框架"是一个高效且灵活的解决方案,它将MyBatis的二级缓存与Redis相结合,形成一个三级缓存体系,以优化数据读取速度并减轻数据库压力。 首先,MyBatis作为一款轻量级的持久层框架,其...

    论文研究-基于Redis和Mysql的存储系统的设计与实现 .pdf

    基于Redis和Mysql的存储系统的设计与实现,范东媛,钮心忻,本文基于Redis和Mysql数据库设计并且实现了在线学习平台的数据存储系统。利用Mysql的持久化存储和Redis的高速读写设计出具有存储数据庞�

    Redis用作二级缓存

    Redis作为二级缓存是数据库系统优化的一个重要策略,特别是在高并发、大数据量的场景下,可以显著提升应用性能。在Mybatis中,二级缓存是一个跨Mapper共享的区域,用于存储查询结果,避免了重复查询数据库,从而降低...

    redis页面缓存html使用redis实现页面缓存.docx

    本文档主要介绍了使用 Redis 实现页面缓存的方法,包括缓存 key 的设计、缓存实现的思路和代码实现。 页面缓存的目的:页面缓存的主要目的是为了提高网站的访问速度和用户体验。通过将页面缓存到 Redis 中,可以...

    如何应对redis缓存雪崩,redis缓存穿透,redis缓存击穿,redis应对高并发的解决方案

    redis缓存雪崩,redis缓存穿透,redis缓存击穿 redis应对高并发造成的雪崩、穿透、击穿

    100讲带你实战基于Redis的高并发预约抢购系统.zip

    《基于Redis的高并发预约抢购系统实战解析》 Redis,作为一款高性能的键值存储系统,因其内存存储、快速响应、丰富的数据结构以及强大的持久化能力,在高并发场景下得到了广泛应用,尤其在预约抢购系统中发挥着关键...

    基于Redis的缓存管理系统.zip

    基于Redis的缓存管理系统 项目概述 本项目是一个基于Redis的缓存管理系统,旨在提供高效的数据缓存服务。通过使用Redis作为缓存数据库,系统能够显著提升数据访问速度,减轻后端数据库的压力。项目包含了Redis的...

    基于Redis的分布式缓存系统.zip

    # 基于Redis的分布式缓存系统 **项目概述** 本项目是一个基于Redis的分布式缓存系统,旨在提供高效、可靠的数据缓存服务。通过集成Redis的各种特性,如数据结构、持久化、主从复制、哨兵模式和集群模式,实现了...

Global site tag (gtag.js) - Google Analytics