तो एक बात यह है कि अक्सर पूछे जाने वाले प्रश्न के अनुसार, "साइडकीक संदेश प्रारूप काफी सरल और स्थिर है। :यह JSON प्रारूप में सिर्फ एक हैश है।" जोर मेरा-- मुझे नहीं लगता कि JSON को साइडकीक में भेजना बहुत मुश्किल है। विशेष रूप से जब आप ठीक-ठाक नियंत्रण चाहते हैं जिसके आसपास आप रेडिस इंस्टेंस को जॉब भेजते हैं, जैसा कि ओपी की स्थिति, मैं शायद बस एक छोटा सा रैपर लिखूंगा जो मुझे नौकरी के साथ-साथ एक रेडिस इंस्टेंस को इंगित करने देगा।
रेडिस उदाहरणों में केविन बेडेल की नौकरियों को राउंड-रॉबिन करने की अधिक सामान्य स्थिति के लिए, मुझे लगता है कि आप नहीं जिस रेडिस इंस्टेंस का उपयोग किया जाता है, उस पर नियंत्रण रखना चाहते हैं-- आप बस एनक्यू करना चाहते हैं और वितरण को स्वचालित रूप से प्रबंधित करना चाहते हैं। ऐसा लगता है कि अब तक केवल एक व्यक्ति ने इसका अनुरोध किया है, और वे एक समाधान लेकर आए हैं जो Redis::Distributed
का उपयोग करता है :
datastore_config = YAML.load(ERB.new(File.read(File.join(Rails.root, "config", "redis.yml"))).result)
datastore_config = datastore_config["defaults"].merge(datastore_config[::Rails.env])
if datastore_config[:host].is_a?(Array)
if datastore_config[:host].length == 1
datastore_config[:host] = datastore_config[:host].first
else
datastore_config = datastore_config[:host].map do |host|
host_has_port = host =~ /:\d+\z/
if host_has_port
"redis://#{host}/#{datastore_config[:db] || 0}"
else
"redis://#{host}:#{datastore_config[:port] || 6379}/#{datastore_config[:db] || 0}"
end
end
end
end
Sidekiq.configure_server do |config|
config.redis = ::ConnectionPool.new(:size => Sidekiq.options[:concurrency] + 2, :timeout => 2) do
redis = if datastore_config.is_a? Array
Redis::Distributed.new(datastore_config)
else
Redis.new(datastore_config)
end
Redis::Namespace.new('resque', :redis => redis)
end
end
उच्च-उपलब्धता और विफल-ओवर प्राप्त करने के लिए आपकी खोज में एक और बात पर विचार करना है, साइडकीक प्रो प्राप्त करना जिसमें विश्वसनीयता विशेषताएं शामिल हैं:"साइडकीक प्रो क्लाइंट क्षणिक रेडिस आउटेज का सामना कर सकता है। यह त्रुटि पर स्थानीय रूप से नौकरियों की कतार लगाएगा और उन नौकरियों को वितरित करने का प्रयास करेगा। एक बार कनेक्टिविटी बहाल हो जाने के बाद।" चूंकि साइडकीक वैसे भी पृष्ठभूमि प्रक्रियाओं के लिए है, अगर रेडिस इंस्टेंस नीचे जाता है तो थोड़ी देरी आपके आवेदन को प्रभावित नहीं करनी चाहिए। यदि आपके दो रेडिस इंस्टेंस में से एक नीचे चला जाता है और आप राउंड रॉबिन का उपयोग कर रहे हैं, तो आप अभी भी कुछ नौकरियां खो चुके हैं जब तक कि आप इस सुविधा का उपयोग नहीं कर रहे हैं।