建设网站要钱么天津互联网十大公司
建设网站要钱么,天津互联网十大公司,网站规划建设案例,网站建设如何学本文目录#xff1a;
1、big key的定义及问题
2、2023年实际生产事故
3、监控手段
4、预防手段 #xff08;一#xff09;big key的定义及产生的问题
Redis 的big key是指value占用内存空间较大的键值。通常#xff0c;针对不同的数据类型会用元素个数或者占用空间大小…本文目录
1、big key的定义及问题
2、2023年实际生产事故
3、监控手段
4、预防手段 一big key的定义及产生的问题
Redis 的big key是指value占用内存空间较大的键值。通常针对不同的数据类型会用元素个数或者占用空间大小来衡量bigKey
Stringvalue占用空间超过5MB实际使用避免超过1MB
集合(listsetzset成员数量超过1万个实际使用避免超过2000个
hashfield成员个数1000个但value总大小超过100M实际避免超过10MB)
Big Key对Redis系统性能会带来极其严重的影响具体问题包括
1、big key占用较大内存空间在Redis集群中会造成严重的数据倾斜存储分布不均匀
2、当big key同时还是热点key时还会造成访问倾斜可能造成单节点访问出现异常
3、对 big key的操作尤其是批量操作较耗时时间复杂度达到O(N)会造成命令执行阻塞;
4、阻塞网络bigkey数据较大会对服务器网卡、所在网络产生一定的影响
5、影响持久化。AOF重写和bgsave都会同步fork子进程因为大key导致写时复制比较耗时。
二2023年实际生产事故
1、A系统
现象交易超时和成功率低预警以及机房传输设备有端口心跳告警
影响用户相应功能不可用影响用户体验
原因存在bigKey且进行了批量操作(hgetallhsetall在交易并发量增大时批量查询存储操作对Redis性能影响较大查询缓慢进而导致交易超时。
分析尽管Redis在Redis4.0引入了后台多线程Redis6又引入了IO多线程但Redis的主要命令执行依然是单线程的。如果对单个key进行批量操作如hashKey的 hgetall,hsetall执行的时间复杂度是O(N)当并发上来的时候这种操作是非常低效的很容易造成客户端阻塞。此外也可能会引发网络阻塞。因为每次获取大 key 产生的网络流量较大举一个极端的例子一个 key 的大小是 1 MB每秒访问量为 1000那么每秒会产生 1000MB 的流量这对于普通千兆网卡的服务器来说是难以承受的。
总结
开发者在使用Redis时要考虑性能的问题使用Redis也并不是万事大吉一定要遵循相应的开发规范。笔者建议查看阿里的Redis开发规范里面也提到了对于big key、批量操作等典型的会阻塞整个主线程的问题。
2、B系统
现象交易成功率低于最低告警值
影响用户查询功能报错引起客诉
原因使用Redis时存在两个big key且还是热点key且这两个key都在同一个master节点上RedisCluster集群导致在高峰期间对应节点访问流量过大造成了严重的访问倾斜。
分析并发较高的系统切记不可忽视big keyhot key的问题热点问题就是其中要考虑的因素尤其是像秒杀这种超高并发场景。如果把活动库存以 key-value这种简单方式存储到Redis中抢购中就会出现上述的问题。
对于这种问题我们可以通过两种方式解决。
1增加一层本地缓存减少Redis的访问基本上多级缓存都这么干
2考虑到一致性的问题用不了本地缓存像秒杀场景的活动库存这种就可以将热点key分散存储一个key拆成多个子key存储。比如某电商进行茅台抢购活动首先将茅台商品活动库存放到Redis中茅台就是一个热点key如maotai,1000此时就可以将热点key分散存储茅台抢购是需要预约的可以将所有预约用户进行分组Redis会根据组存储活动库存key可以是 maotai:groupId1 300maotai:groupId2 300maotai:groupId3 400通过这种方式把整个流量分散到不同的节点上减轻单节点压力。 三监控手段
检测key本身会是一件非常耗时的工作为了避免Redis的检测造成实际业务命令的阻塞进行bigKey检测时不可在master节点进行可以在从节点或者使用RDB文件快照进行检测。具体方案总结如下
1、在从节点执行 --bigkeys命令
Redis天然支持bigkey的检索通过该命令Redis会统计每种数据类型的排名第一位的bigKey。这种方式的优点是会进行全量扫描在对Redis业务数据存储不清楚的情况下使用。但它的缺点也是由于全量扫描带来的性能问题一种解决方式是在该命令后加上时间间隔即每隔多长时间扫描一次。 --bigkey -i 3表示每隔100条指令就会休眠3秒。
2、在从节点执行SCAN命令
实际上bigkey的底层也使用SCAN命令执行SCAN可以指定某种类型扫描比如只扫描String只扫描set类型相比于直接使用bigkeySCAN可以缩小扫描范围。
3、离线扫描RDB文件
可以使用redis-rdb-tools等工具离线扫描RDB文件查看key的内存使用情况该方案的优势是完全不影响在线Redis节点完全离线操作。下面的命令是找出字节大于256的key
rdb --command memory --bytes 256 dump.rdb
4、 慢查询监控
Redis支持对于慢查询的监控当执行命令超过了设置的阈值之后会自动将该操作添加到Redis的慢查询日志中该日志是个链表结构。随后通过SLOWLOG GET命令可以查看到慢查询语句。通过观察慢查询也可查出bigkey的问题。首先要配置慢查询的阈值
CONFIG SET slowlog-log-slower-than 2
5、Redis时延、带宽等监控 big key的操作会对时延、带宽消耗产生一定的影响因此对此进行监控可及时发现异常情况。
四预防手段
最好的监控就是预防在写业务代码时就必须提前考虑big key出现的场景要提前做好规避方案主要手段包括
1、分治将整个Key进行分片存储将key打散减小单key的大小
2、压缩可对value值进行序列化、压缩减小value的存储大小
3、对 大key操作避免使用批量避免产生长时间阻塞
4、对大key进行删除不可用del命令要使用unlink异步操作
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/88836.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!