Reduce the number of queues Sidekiq needs to watch

Currently, every worker in our codebase has it's own queue, this results in 276 queues to watch in total. Most of our shards will only be watching a handful, while the catch-all had 202 to watch in a first try. Causing high redis CPU load (production#1791). So we need to reduce size of the list of keys we watch using BRPOP. Even though having a single queue per worker allowed a lot of flexibility.

In #225 (comment 307869452) we've discussed several proposals, but the consensus seems to be we want to have queue names based on the worker attributes.

Proposal 1: Use the selector syntax to generate queue names

I think this would include loading the Rails environment in sidekiq-cluster and have a common way of generating a queue name based on the selector used. So gitlab-rails would need to know these selectors.

The selector urgency!=high,resource_boundary=cpu => queue name non-urgent-cpu-bound

Proposal 2: Generate queue names based on worker attributes

Instead of basing the queue name on the worker's class name, we use the configured attributes to generate a queue name. sidekiq-cluster can then build a queue name based on the selector

Both these proposals require renaming all of our queues. So we will need migrate each queue.

Edited by Bob Van Landuyt