1.1. php + redis 高并发实时数据处理

  • 需要有序队列处理 毫秒级数据
  • 有序集合 + hash
  • 数据来源 rabbitmq
  • 平均1s 1200条数据 单条数据需要处理 10次 对应不同业务

1.rabbitmq 消耗速度要达到生产速度

  • 方案1 php rabbiqmq 消息 ttl 3s 过期 多进程无法保证消息顺序 ,但是单进程无法快速消耗掉消息会导致消息过期
  • 瓶颈 在 redis 数据插入上无法达到处理速度
  • 方案2 使用go接入 单个消费 协程+通道 插入redis 轻松达到处理速度

2.单条 消息 10次处理 平均0.4s 需要 8min 才能处理掉 1200条数据

  • php 多进程任务消耗 锁机制处理
  • go 接入后避免上游生产数据队列中的数据乱序 推送到redis
  • php 多进程处理任务 用redis 形成任务栅栏 保证消息顺序执行 hash+zlist 实现有序处理
  • php 任务进程切换造成cpu占用较高
  • redis cpu 过高 + mongo 内存越来越大

1.2. 注意

  • 插入和消耗 zlist && hash 需要保持事务处理
  • 采用 pipeline 一次性的发送多个命令,无需等待服务端返回
  • pipeline事实上所能容忍的操作个数,和socket-output缓冲区大小/返回结果的数据尺寸都有很大的关系;同时也意味着每个redis-server同时所能支撑的pipeline链接的个数,也是有限的,这将受限于server的物理内存或网络接口的缓冲能力

  • https://www.cnblogs.com/loveyouyou616/p/5415552.html

results matching ""

    No results matching ""