В настоящее время я использую Sidekiq с моим приложением Rails вместе с базой данных ElasticCache Redis. Я заметил, что в последнее время при мониторинге CurrItems метрики с помощью инструментов AWS, я вижу число элементов постепенно увеличивается с течением времени почти ступенчатым способом:Ключи базы данных Sidekiq Redis увеличиваются с течением времени
Однако, когда я смотрю на заданий в очереди на панели мониторинга 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
Кто-нибудь знает, почему это может произойти?
Ах, это не проблема, но с Redis db, начинающим чистить ключи, когда он заполняется? Если да, существует ли рекомендованный размер БД, который должен иметь в производстве, поскольку ключи хранятся в течение 5 лет? Мы используем ElasticCache t2.medium с 2,78 ГБ оперативной памяти – Karim
Скажем, каждый ключ занимает 100 байт. Это 4 * 100 * 365 * 5 или 720 КБ за пять лет данных. –
Отлично! Спасибо Майку – Karim