2016-05-26 2 views
1

В настоящее время я использую Sidekiq с моим приложением Rails вместе с базой данных ElasticCache Redis. Я заметил, что в последнее время при мониторинге CurrItems метрики с помощью инструментов AWS, я вижу число элементов постепенно увеличивается с течением времени почти ступенчатым способом:Ключи базы данных Sidekiq Redis увеличиваются с течением времени

enter image description here

Однако, когда я смотрю на заданий в очереди на панели мониторинга Sidekiq, я вообще ничего не вижу. Я вижу 0 заданий в очереди, 0 занят, 0 запланировано.

Поэтапное увеличение, похоже, происходит в определенное время каждый день (прямо в конце дня), что заставило меня подумать, что это может быть связано с процессом работы/часового механизма, который у меня работает. Тем не менее, у меня есть только 4 задания, которые запускаются один раз в день, и никто из них не работает в течение этого времени или даже почти в это время. Просто для хорошей меры, хотя, вот мой файл clock.rb (я замкнуты все описания заданий и имена классов и методов для простоты):

module Clockwork 
    every(30.seconds, 'Task 1') { Class.method } 
    every(30.seconds, 'Task 2') { Class.method } 
    every(10.minutes, 'Task 3') { Class.method } 
    every(1.day, 'Task 4', :at => '06:00', :tz => 'EST') { Class.method } 
    every(10.minutes, 'Task 5') { Class.method } 
    every(1.day, 'Task 6', :at => '20:00', :tz => 'UTC') { Class.method } 
    every(1.day, 'Task 7', :at => '20:00', :tz => 'UTC') { Class.method } 
    every(1.day, 'Task 8', :at => '20:00', :tz => 'UTC') { Class.method } 
    every(1.hour, 'Task 9') {Class.method} 
    every(30.minutes, 'Task 10') {Class.method} 
    every(30.minutes, 'Task 11') {Class.method} 
    every(1.hour, 'Task 12') {Class.method} 
end 

Я не совсем уверен, где это происходит из. Может быть, Sidekiq не удаляет ключи из базы данных после завершения задания?

Другая потенциальная полезная информация состоит в том, что я запускаю 4 рабочих/серверов. Вот моя конфигурация Redis:

if (Rails.env == "production" || Rails.env == "staging") 
    redis_domain = ENV['REDIS_DOMAIN'] 
    redis_port = ENV['REDIS_PORT'] 

    redis_url = "redis://#{redis_domain}:#{redis_port}" 

    Sidekiq.configure_server do |config| 
     ActiveRecord::Base.establish_connection(
      adapter: "postgresql", 
      encoding: "unicode", 
      database: ENV["RDS_DB_NAME"], 
      pool: 25, 
      username: ENV["RDS_USERNAME"], 
      password: ENV["RDS_PASSWORD"], 
      host: ENV["RDS_HOST"], 
      port: 5432 
    ) 

     config.redis = { 
     namespace: "sidekiq", 
     url: redis_url 
     } 

    end 

    Sidekiq.configure_client do |config| 
     config.redis = { 
     namespace: "sidekiq", 
     url: redis_url 
     } 
    end 
end 

Кто-нибудь знает, почему это может произойти?

ответ

1

Исторические показатели работы хранятся в течение дня, в течение последних 5 лет. Вы видите эти 4-6 ключей в день. Это дает вам приятные показатели на панели инструментов веб-интерфейса.

+0

Ах, это не проблема, но с Redis db, начинающим чистить ключи, когда он заполняется? Если да, существует ли рекомендованный размер БД, который должен иметь в производстве, поскольку ключи хранятся в течение 5 лет? Мы используем ElasticCache t2.medium с 2,78 ГБ оперативной памяти – Karim

+0

Скажем, каждый ключ занимает 100 байт. Это 4 * 100 * 365 * 5 или 720 КБ за пять лет данных. –

+0

Отлично! Спасибо Майку – Karim

Смежные вопросы