counter服务报警问题分析解决

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介:

counter服务介绍:
    我们sae这边counter服务给用户提供的功能为计数器服务,使用的软件为redis。而我们对counter服务的监控,是通过monitor来做的,主要操作就是set,get,delete,increase,create,remove等操作。而counter报警问题,之前也存在,大概两三天会有一次报警。


报警问题主要分为如下两个阶段:

一,某天counter服务频繁报警:
    是因为之前monitor的counter监控只监控了com组webruntime, 把ent,bigapp加进去之后,频繁报警。这是因为ent,bigapp组sae-php-saecounter软件包版本比较低, 而低版本的包代码中没有添加执行redis操作失败的重试机制。软件版本统一之后,每天counter的报警大概在十几条左右。
    注:
ent,bigapp组counter没升级的原因为新counter的软件包一直在com组做灰度

二,counter服务每天十几条的报警:
通过分析报警内容,redis的 aof文件,monitor报警逻辑及分析tcpdump抓的数据包发现一些问题,具体如下:
    1,报警内容都是create和remove的时候没有成功,其它的set,get,increase操作没问题。
    2,create和remove一个key的时候,是一个事物操作。但是,在aof文件中看涉及对两个key的操作。和服务负责人确认,是代码逻辑添加的。涉及到的一个key是hash表中客户端要操作的key本身,数据结构:appname -> {"count_1":num,"count_2":num},即keyname为这个应用的appname,hash表中的value为这个应用创建的所有计数器,限制为每个应用最多100个计数器;另一个key是记录此hash表的key数量,数据结构:appname_len -> num,即keyname为这个应用appname加字符串"_len",value为hash表的长度,由于com组monitor是com组的一个应用,ent和bigapp组的monitor同理也是一个应用,所以,ent或com或 bigapp组每组的counter的monitor会共用一个key;
    3,在抓包中看到,报警的ent webruntime机器在执行一个remove key事物操作前,已经被redis watch的key(这个key为此hash表的key数量,watch操作也是在代码中的)被另一台ent webruntime给修改了(因为monitor报警是并发的,故对redis的操作在一段时间内,不一定只有一台机器执行),导致remove或者 create的时候,redis发现被watch的key修改了,故停止执行此事物操作,重试5次没有成功,故导致monitor报警


    解决办法:
    1,适当增大redis命令执行失败后的delay时间和重试次数,这样当事务执行失败后,会在延迟后继续重试执行,一定程度降低失败率
    2,修改counter代码逻辑,可以通过hlen命令获得hash表的长度。可以解决这个问题


最终我们才用第二种方法解决了这个问题。










本文转自 leejia1989 51CTO博客,原文链接:http://blog.51cto.com/leejia/1758172,如需转载请自行联系原作者
目录
相关文章
|
存储 运维 负载均衡
智能存储解决方案:探索 TDengine 的多级存储功能
在当今数据驱动的时代,如何高效地存储和管理海量数据已成为企业面临的一大挑战。为了应对这一需求,TDengine Enterprise 不仅支持使用对象存储(S3),还早已引入了独特的多级存储功能。这一功能不仅能够降低存储成本,还能显著提升数据写入性能,并简化系统维护流程。
212 2
|
关系型数据库 分布式数据库 数据库
PolarDB 开源:推动数据库技术新变革
在数字化时代,数据成为核心资产,数据库的性能和可靠性至关重要。阿里云的PolarDB作为新一代云原生数据库,凭借卓越性能和创新技术脱颖而出。其开源不仅让开发者深入了解内部架构,还促进了数据库生态共建,提升了稳定性与可靠性。PolarDB采用云原生架构,支持快速弹性扩展和高并发访问,具备强大的事务处理能力及数据一致性保证,并且与多种应用无缝兼容。开源PolarDB为国内数据库产业注入新活力,打破国外垄断,推动国产数据库崛起,降低企业成本与风险。未来,PolarDB将在生态建设中持续壮大,助力企业数字化转型。
314 3
UserWarning: Palette images with Transparency expressed in bytes should be converted to RGBA images
本文提供了解决PIL库中"Palette images with Transparency"警告的方法,通过将图片转换为'RGB'模式来消除透明通道的问题。
UserWarning: Palette images with Transparency expressed in bytes should be converted to RGBA images
|
存储 关系型数据库 MySQL
如何搭建MySQL
【8月更文挑战第16天】如何搭建MySQL
295 1
idea没有Maven运行界面怎么办
idea没有Maven运行界面怎么办
|
关系型数据库 MySQL Java
halo搭建炫酷个人博客快速部署:docker+docker-compose+nginx(一)
halo搭建炫酷个人博客快速部署:docker+docker-compose+nginx
4481 1
|
Linux 虚拟化
图解CentOS安装步骤(超详细教程)
图解CentOS安装步骤(超详细教程)
1075 0
element-ui中的prop 的相关作用
element-ui中的prop 的相关作用
677 0
|
存储 缓存 运维
课时6:Tair在雪球和作业帮的使用剖析
课时6:Tair在雪球和作业帮的使用剖析