Ruby on rails Rails rake并行化阈值和注意事项

Ruby on rails Rails rake并行化阈值和注意事项,ruby-on-rails,postgresql,activerecord,parallel-processing,rake,Ruby On Rails,Postgresql,Activerecord,Parallel Processing,Rake,这是我第一次遇到关于我必须处理的任务的时间问题。我需要使用大约700万条记录进行计算(针对Web服务运行)。这将花费180多小时,所以我考虑在EC2上运行多个webservice实例,并并行运行rake任务 因为我以前从未这样做过,我想知道需要考虑什么。 更准确地说: 我可以运行的最大rake任务数是多少(有限制吗 除了你自己的机器动力之外 postgres 9.3的最大并发连接数是多少 db 在运行多个应用程序时,是否需要考虑一些事项 活动记录。是否同时保存操作 我期待着听到你的想法。 最

这是我第一次遇到关于我必须处理的任务的时间问题。我需要使用大约700万条记录进行计算(针对Web服务运行)。这将花费180多小时,所以我考虑在EC2上运行多个webservice实例,并并行运行rake任务

因为我以前从未这样做过,我想知道需要考虑什么。 更准确地说:

  • 我可以运行的最大rake任务数是多少(有限制吗 除了你自己的机器动力之外
  • postgres 9.3的最大并发连接数是多少 db
  • 在运行多个应用程序时,是否需要考虑一些事项 活动记录。是否同时保存操作
我期待着听到你的想法。 最好的, 菲尔

rake
实例
  • 每次运行rake时,您都在运行一个新的ruby服务器实例,以及所有相关的内存和相关的负载依赖用法。在您的Rakefile中查找inits。
    • 您在中的实例数受所用内存和CPU的限制
    • 您必须分析每个内存和CPU,以了解可以运行多少个
    • 您可以编写一个程序来监控和计算可能发生的情况,但启发式方法在一次性和首次实验中效果更好
数据存储
  • 试探性地探索您的数据库容量。
    • 注意创建阻塞的写锁
    • 注意由于缺少索引而导致的读取速度慢
    • 查看您的postgres配置以查看并发限制、缓存大小等
。保存
  • 每个rake任务都是其自己的ruby服务器,因此多个active_record.save操作会产生以下影响:
    • 写入锁定导致阻塞/等待
    • 一个实例获取在另一个实例更新之前读取的“旧”数据
      。保存
操作复杂性
  • 记录数(7MM)只是每个记录上发生的所有操作的乘数。操作复杂性是限制的根源,因为理论上,运行7MM的工人可以在最小的时间范围内解决问题
  • 如果180小时是准确的(可疑),则每个过程
    (180*60*60*1000)/7000000
    ==
    92.57 ms
  • 查找任何作为IO阻止程序的共享资源
  • 寻找任何可以提前进行并缓存的常用计算。查找胜过计算
勘误表
  • 为基本操作系统进程留出空间。这些将因您的环境而异,但您提到AWS,但最好从概念上了解如何监视任何系统的活动
  • 耙子运行时,在单独的屏幕/终端上运行
    top
  • 喜欢在不同的屏幕上运行两个TOP。按内存对1排序,按CPU对另一个排序
  • 有办法监控耙子吗
  • 观察出现在
    顶部
    进程中的事件
    
  • 如果你做得足够长/足够好,你就已经分析了你的净空
  • 跑更多的耙子来填满你的净空
  • 不要超出你的记忆范围,否则你会被遗忘的

也许你想考虑豆茎,但我猜你会发现比学习所有这些好的基础要复杂得多。首先,