Ich verwende derzeit Sidekiq mit meiner Rails-App in der Produktion zusammen mit einer ElasticCache Redis-Datenbank. Ich habe vor kurzem festgestellt, dass, wenn die CurrItems Überwachung Metrik die AWS-Tools, sehe ich die Anzahl der Elemente nach und nach im Laufe der Zeit zu erhöhen in eine fast stufenartige Art und Weise:Sidekiq Redis Datenbankschlüssel, die im Laufe der Zeit zunehmen
Allerdings, wenn ich bei der Suche Jobs in der Warteschlange im Sidekiq-Dashboard, ich sehe überhaupt nichts. Ich sehe 0 Jobs in der Warteschlange, 0 beschäftigt, 0 geplant.
Der stufenartige Anstieg scheint jeden Tag zu einer ganz bestimmten Zeit (genau am Ende des Tages) zu geschehen, was mich glauben ließ, dass er mit einem Chron-Job/Uhrwerk-Prozess zusammenhängen könnte. Allerdings habe ich nur 4 Jobs, die einmal am Tag laufen und keiner von ihnen läuft während dieser Zeit oder sogar in der Nähe dieser Zeit. obwohl nur für eine gute Maßnahme, hier ist meine clock.rb Datei (ich habe kurzgeschlossen, alle Stellenbeschreibungen und Klassen- und Methodennamen der Einfachheit halber):
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
Ich bin mir nicht ganz sicher, wo das herkommt. Vielleicht entnimmt Sidekiq die Schlüssel nicht aus der Datenbank, wenn der Auftrag abgeschlossen ist?
Eine weitere mögliche hilfreiche Information ist, dass ich 4 Arbeiter/Server betreibe. Hier ist meine Redis-Konfiguration:
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
Wer weiß, warum das passieren könnte?
Ich habe es - wird dies nicht zu Problemen führen, obwohl die Redis db beginnt, die Tasten zu löschen, wenn sie voll ist? Wenn ja, gibt es eine empfohlene Größe der DB, die man in der Produktion haben sollte, da Schlüssel für 5 Jahre gespeichert werden? Wir verwenden ein ElasticCache t2.medium mit 2,78 GB RAM – Karim
Sagen wir, jeder Schlüssel dauert 100 Bytes. Das sind 4 * 100 * 365 * 5 oder 720 KB für fünf Jahre Daten. –
Großartig! Danke Mike – Karim