websocket消息处理失败排查(redis大key)

问题背景:
在做一个协同编辑的项目
所使用的技术栈:
nodejs + pm2 + socket.io + socket.redis.adapter.io + grpc
用户在进入对应节点时,客户端会发起websocket连接,并且告知当前用户信息,需要查看哪个节点等信息。
服务端接收到消息后执行对应的逻辑,执行完成后返回

watchroom -> websocket -> grpc -> emit

调用grpc 超时失败, 起初是认为grpc 的问题, 于是开了个python脚本 访问grpc,没有问题, 表示grpc 服务端正常。
在一起大规模断连的场景下,关注到日志
timeout reached while waiting for fetchSockets response

于是排查websocket + redis问题, 测试发现 redis本身的连接没有问题,只是某次差点寻会有问题。想到大key的问题,在测试环境复现,复制粘贴大量数据走 websocket 确实会出现断连的情况。
还需要进一步印证这个想法。
简单redis 监控。
我们本身是有prometheus 和 grafana 的,

# 创建docker compose 文件, 输出监控指标
docker-compose-redis-export.yaml

version: "3.2"
services:
  redis-exporter:
    image: oliver006/redis_exporter:v1.51.0
    container_name: redis-exporter
    restart: unless-stopped
    command:
      - "-redis.password-file=/redis_passwd.json"
    volumes:
      - /usr/share/zoneinfo/PRC:/etc/localtime
      - ./redis_passwd.json:/redis_passwd.json
    expose:
      - 9121
    ports:
      - "9121:9121"
# redis 连接信息
touch redis_passwd.json
{
    "redis://127.0.0.1:6379":"pwd"  #如果没有密码 冒号后设置空字符串
}

访问 http://127.0.0.1:9121/ ,显示正常这一步则没有问题。

prometheus yml配置

- job_name: 'redis_exporter_targets'
    static_configs:
      - targets:
        - redis://127.0.0.1:6379
    metrics_path: /scrape
    relabel_configs:
      - source_labels: [__address__]
        target_label: __param_target
      - source_labels: [__param_target]
        target_label: instance
      - target_label: __address__
        replacement: 127.0.0.1:9121


  ## config for scraping the exporter itself
  - job_name: 'redis_exporter'
    static_configs:
      - targets:
        - 10.57.1.17:9121

grafna 配置 导入 17507

将.redis.adapter 使用单独的redis,避免大key的问题
修改前 redis1
在这里插入图片描述
修改后 redis 1
在这里插入图片描述
redis2
在这里插入图片描述

反而出现问题的频次更多了,还在排查中

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值