问题是这样 有这样个需求 就是把redis作为主力数据库  因为数据量较大  每分钟 都有几十万的数据写入到redis, 需要做个任务定时将redis中 数据序列化成文件 上传到文件服务器 , 
问题来了  由于任务是跑在多台机器上  定时跑  瞬间 redis服务器 文件服务器 负载都很大 包括网络磁盘 io 都着招架不住,有什么好的策略 或者算法来保证负载均衡呢  包括从redis拉取数据 以及保证任务不会socket超时???(需要保证reids的每条数据 都得成功写入文件 并且上传到文件服务器)
恳请各位支支招!!!

解决方案 »

  1.   

    数据就在redis 量很大   要生成文件上传到文件服务器  这个操作很消耗资源 定时任务在指定时间不一定能处理完  用队列怎么实现呢 能详细说下吗
      

  2.   

    很明显你这个数据处理太集中了。现在不都讲分布式吗?用spring cloud 微服务,把业务分模块分项目,各自处理各自的数据,而且每分钟有十几万数据,应该尽量精简处理数据,把不需要的数据剔除掉这样会有质的提升。
      

  3.   

    就是因为经常会被量冲死  才把数据放到redis  让redis集群承压 目前问题 就是持久化redis里的数据  形成文件 这个貌似只有集中处理 但需要策略 防止文件服务器崩
      

  4.   

    定义一个redis队列存数据索引,集群机器pop队列按索引拉数据传文件服务器。
    定义任务,定时往队列push未上传的数据。
    其中,如果上传了的数据可释放redis的话尽量释放。 任务可配置初始队列大小,任务也可以根据队列剩余量适量push。
    建议用 xxl-job,可根据实际吞吐效率灵活配置任务执行频率以及参数。
      

  5.   

    就是因为经常会被量冲死  才把数据放到redis  让redis集群承压 目前问题 就是持久化redis里的数据  形成文件 这个貌似只有集中处理 但需要策略 防止文件服务器崩
    所以说你现在的架构不足以解决问题,你得搭建一个spingcloud微服务分布式的架构或是其他类似架构。然后构思如何精简数据,分散处理数据。
      

  6.   

    Redis Cluster 看看这个能解决你的问题不
      

  7.   

    队列是可行的  但队列的长度得控制下   如果生产的速度 大于消费的速度 队列会一直增长  有什么好的策略吗
    不是说了吗,任务里往队列push新索引的时候判断可以自定义push多少。如果队列为空也可以通过xxl配置任务cron或者参数提高执行push频率或一次push更多数据。
      

  8.   

    队列是可行的  但队列的长度得控制下   如果生产的速度 大于消费的速度 队列会一直增长  有什么好的策略吗
    不是说了吗,任务里往队列push新索引的时候判断可以自定义push多少。如果队列为空也可以通过xxl配置任务cron或者参数提高执行push频率或一次push更多数据。
    感谢  队列是可行的  但队列的长度得控制下   如果生产的速度 大于消费的速度 队列会一直增长  有什么好的策略吗
    不是说了吗,任务里往队列push新索引的时候判断可以自定义push多少。如果队列为空也可以通过xxl配置任务cron或者参数提高执行push频率或一次push更多数据。
    这思路可以试下  感谢!
      

  9.   

    感觉这个可以用kafka和zk
      

  10.   

    你这个不是redis的使用场景 倒是很适合用kafka 数据吞吐量 持久化 分区 都可以解决
      

  11.   

    ESJob  分任务吧
      

  12.   

    redis 自己也有持久化策略