storm写redis问题小结

最近一直在跟进storm的问题,从storm集群的稳定性到监控到升级到bolt写redis的问题,因为公司目前没有专业运维redis的,只能我们数据部门自己搞了。。下面记录下遇到的几个问题:

总结下目前storm写redis问题:

1.redis高峰写入异常,增加redis监控,发现cpu性能瓶颈(redis单线程,最高10w/s的处理量)

2.之前redis bolt的并发在200以上,过多的并发对redis的性能造成比较大的影响,现在已经减少为5

3.关闭了redis的monitor监控,常驻的monitor监控对redis的性能损耗在30%左右

4.关闭了redis的rdb持久化方式,开启了aof的方式,在低峰aofrewrite

5.扩容到8个实例,使用jedissharding的方式,高峰时单机超过5W/s处理量

6.去掉select操作,使用默认db0

7.对高峰时的数据进行分析,40w/s的处理量中,ping操作占50%以上,调整jedispool的设置,基本上屏蔽了ping的操作

8.bolt端batch处理,减少写入量

9.40%的expire操作,测试ttl+expire vs expire的性能,基于ttl+expire的方式在一个操作里面的性能损耗在35%左右,

如果是同一个key在一个线程里面顺序操作会有性能的提升(目前我们没有这种场景)

1)直接expire

hardedJedis.set(key,value)

hardedJedis.expire(key,1000)

2)ttl+expire

hardedJedis.set(key,value)

Long re = shardedJedis.ttl(key);

if ((re == -1)||(re == -2)){hardedJedis.expire(key,1000)};

10.从第8点测试来看40%的expire操作是省不了了,只能从提高单次处理量(pipline)来做优化了

11.测试了lvs->twemproxy->redis的方案,不太稳定,考虑引用到的组件比较多,twemproxy相对来说对于我们这边也是一个黑盒

12.jedissharding的方案在高峰时会有一些延迟,单机方案相对来说比较稳定,如果接入数据量变大的话还是要走sharding模式

,延迟的原因需要继续跟进

最后附几个监控图:

1.redis cpu

2.redis conns

3.redis command/s

时间: 2024-10-10 10:41:46

storm写redis问题小结的相关文章

redis学习小结一

Redis知识点小结一 概念: 内存数据库,用于做缓存.可做分布式锁,提供多种数据类型支持不同业务场景.支持事务.持久化.LUA脚本.LRU驱动事件. 高性能和高并发 高性能:第一次访问数据库中的数据会比较慢,因为是从磁盘上读取.将用户第一次访问的数据放入缓存,第二次或以后的多次访问直接查缓存,没有再去磁盘,提高查询效率,缩短查询时间.如果数据库中的数据改变,那么就同步改变缓存中的数据. 高并发:直接操作缓存能够承受的请求远远超过直接访问数据的请求.可以考虑将部分数据库中的数据移到缓存中,从而实

一起写redis脚本

一.redis脚本环境 要写redis的脚本,首先应该搭建好它的脚本环境.redis使用lua作为其脚本语言.所以搭建lua环境成了首要工作. 环境:centos7.0 redis:3.0.2 1.1 安装lua环境 [[email protected] lua]# curl -R -O http://www.lua.org/ftp/lua-5.3.0.tar.gz [[email protected] lua]# tar zxf lua-5.3.0.tar.gz [[email protect

利用多写Redis实现分布式锁原理与实现分析

在我写这篇文章的时候,其实我还是挺纠结的,因为我这个方案本身也是雕虫小技拿出来显眼肯定会被贻笑大方,但是我最终还是拿出来与大家分享,我本着学习的态度和精神,希望大家能够给与我指导和改进方案. 一.关于分布式锁 关于分布式锁,可能绝大部分人都会或多或少涉及到. 我举二个例子: 场景一:从前端界面发起一笔支付请求,如果前端没有做防重处理,那么可能在某一个时刻会有二笔一样的单子同时到达系统后台. 场景二:在App中下订单的时候,点击确认之后,没反应,就又点击了几次.在这种情况下,如果无法保证该接口的幂

自已动手写Redis【简单动态字符串序列一】

第一章 简单动态字符串 2.1 引言 字符串String是程序设计中最为常见的一种数据结构,也是最为重要的一种数据结构,Hello World!这个最为精典的程序,是绝大部份人学习一种程序设计语言的入门程序,在这个最为精典的入门程序中,Hello World!就是字符串类型,字符串可以用于软件中信息的提醒.保存等,Redis中key都是String类型的,因此了解String类型对于我们了解Redis以及动手写Redis都是非常有益的. 2.2 字符串基本概念 以上是我们最为熟悉的Hello W

Storm 系列(七)—— Storm 集成 Redis 详解

一.简介 Storm-Redis 提供了 Storm 与 Redis 的集成支持,你只需要引入对应的依赖即可使用: <dependency> <groupId>org.apache.storm</groupId> <artifactId>storm-redis</artifactId> <version>${storm.version}</version> <type>jar</type> <

redis开发小结

随着缓存在web服务中用的越来越广泛,redis可以说成为了目前最流行的NoSQL数据库!redis与memcached最大的不同在于redis支持更多的数据类型,包括string.hash.list.set.sorted list等,所以redis的发展非常迅速,很多公司已将memcached替换为redis.我也做了一些redis的开发,现做一些小结. 1. redis常用配置 daemonize no     //Redis默认不是以守护进程的方式运行,可以通过该配置项修改,使用yes启用

redis的小结

redis使用场景: 1.在主页中显示最新的项目列表. 2.删除和过滤 3.排行榜及相关问题. 4.按照用户投票和时间排序. 5.过期项目处理. 6.计数. 7.特定时间内的特定项目. 8.实时分析正在发生的情况,用于数据统计与防止垃圾邮件等. 9.Pub/Sub. 10.队列. 11.缓存. 12.关注者列表. 13.共同关注. ............... 1.redis包含如下结构(引自官方): Binary-safe strings. Lists: collections of str

分布式redis一些小结

本文围绕以下几点进行阐述: 为什么使用 Redis 使用 Redis 有什么缺点 单线程的 Redis 为什么这么快 Redis 的数据类型,以及每种数据类型的使用场景 Redis 的过期策略以及内存淘汰机制 Redis 和数据库双写一致性问题 如何应对缓存穿透和缓存雪崩问题 如何解决 Redis 的并发竞争 Key 问题 为什么使用 Redis 我觉得在项目中使用 Redis,主要是从两个角度去考虑:性能和并发. 当然,Redis 还具备可以做分布式锁等其他功能,但是如果只是为了分布式锁这些其

手写redis的docker文件,通过docker-compose配置redis

在前面一遍随笔,配置的是mysql主从的docker-compose配置.今天我们来学习配置编排容器redis. 准备环境: docker 18.06.1-ce docker-compose 1.23.0-rc3 redis最新版 开始: 1.首先我们创建下docker文件的目录,并新建Dockerfile.redis-entrypoint.sh.redis.conf 如下图: Dockerfile文件内容如下: FROM redis:latest #指定启动容器的镜像 MAINTAINER c