最快的变化检测 - 对JSON端点的多线程GET请求

时间:2017-10-06 06:22:34

标签: ruby multithreading performance web-scraping

我正在开展一项研究项目,该项目要求我们在JSON端点发生响应时立即做出响应。 现在我正在产生许多线程,不断向该端点发出请求。我不确定这是否为我们提供了最佳性能。我也不确定如何确定我应该产生的线程数量(这样一旦发生变化我就会对变化作出反应 - 变化发生在不可预测的时间和速率上)。

我在ruby中这样做:

    require 'oj'
    require 'typhoeus'

    threads = []

    mutex = Mutex.new

    (0..50).each do |i|
      threads << Thread.new do 
        while true
          begin
            url = "http://target-endpoint.com/json"; 
            response = Typhoeus.get(url, followlocation: true)

            if response.code == 200
              orders = Oj.load(response.response_body)

              mutex.synchronize do 
                # analyze response, act accordingly
              end 
            end

          rescue StandardError => e
            puts e.message
            puts e.backtrace
          end
        end 
      end 
    end 

    threads.each(&:join)

此代码在AWS r3.xlarge实例(4个vCPU,30.5GB内存)上的ubuntu 16.04上运行。我也不确定这里的瓶颈是什么(CPU或内存)。 我们有权在我们正在与之交互的服务器上投入大量资金。该服务器也使用cloudflare。

感谢您的帮助!

0 个答案:

没有答案