Skip to content

Related Projects

Adam McCrea edited this page Nov 17, 2023 · 105 revisions

A number of 3rd party gems provide additional Sidekiq functionality. Please note these gems (1) may not work with Sidekiq's commercial functionality; (2) may dramatically hurt Sidekiq's scalability and performance; (3) may not be maintained.

ActiveRecord and Transactions

  • sidekiq-staged_push: Implements a strategy of pushing jobs to Redis that involves an intermediary database table. This allows you to leverage the power of Sidekiq while still treating your jobs as if they were stored in the database for the purpose of transactions.

Async Email & File Processing

  • Devise Async: Send Devise's emails in background. Supports Resque, Sidekiq and Delayed::Job
  • Carrierwave Backgrounder: Offload CarrierWave's image processing and storage to a background process using Delayed Job, Resque, Sidekiq, Qu, Queue Classic or Girl Friday
  • Ryespy: IMAP, FTP, Amazon S3, Google Cloud Storage, Google Drive, Rackspace Cloud Files listener.
  • SidekiqSendMail: Render mail then serialize it for dispatch by Sidekiq.

Benchmark

  • Sidekiq Benchmark: Adds benchmarking methods to Sidekiq workers, keeps metrics and adds tab to Web UI to let you browse them

Batch status

Deployment

Execution ordering

  • Sidekiq::Sequence: provides a simple yet powerful framework to run a sequence of Sidekiq jobs, where each job runs only when the previous job successfully completes.
  • Gush: Gush is a parallel workflow runner built on top of Sidekiq. Created for running complex processes with multiple dependencies per job. See example
  • Batsir: Batsir is an execution platform for stage based filter queue execution. It is based on the Pipes and Filters patterns, and makes it possible to create multiples Pipes and Filters (called Stages) that can be invoked asynchronously using so called inbound Acceptors. Acceptors are started automatically and will send a payload into the filter chain, after which the (possibly) transformed message will be processed by the so called outbound Notifiers. Notifiers can be used to asynchronously send a message to another stage, as long as corresponding inbound Acceptors have been configured.
  • Sidekiq Superworker: Chain together Sidekiq workers in parallel, serial, and batch configurations using an expressive DSL.
  • Sidekiq::Promise: [archived] Turn individual workers into Async promises that can be coordinated using promise flows.
  • sidekiq-grouping: Lets you group similar tasks to run them all as a single task. Is useful to reduce number of similar counter update queries, grouping separate background indexing queries into a bulks, etc.
  • sidekiq-merger: Merge tasks occurring before the execution time. Useful especially for bulk notifications.
  • sidekiq_workflows: Adding a workflow API on top of Sidekiq Pro. Unlike other gems, this one has been created specifically to integrate with Sidekiq Pro's batches.

Heroku

  • Sidekiq Heroku Autoscale: Dynamically start, stop, and scale Heroku Sidekiq dynos based on jobs in the queue (an updated take on the autoscaler project).
  • Judoscale: Heroku add-on that autoscales web and worker dynos with minimal setup.

Heroku High Availability

  • Sidekiq Multi-Redis Client: Allows you to specify two redis locations and have the client code 1) alternate sending jobs between the two redis instances, and 2) automatically failover to submitting jobs to the remaining instance in case one goes away.

Mongoid

Monitoring

  • Sidekiq Monitor: Advanced monitoring for Sidekiq that lets you filter, search, and sort jobs by many attributes, view error backtraces, set job completion metadata, and more.
  • Sidekiq Spy: Sidekiq monitoring in the console. A bit like Sidekiq::Web. But without the web.
  • Sidekiq Monitor Stats: Add a json endpoint with useful metrics for monitor scripts. Here are some sensu scripts to consume this api and raise warnings when Sidekiq is having problems and track useful metrics.
  • Attentive Sidekiq: A Sidekiq extension for monitoring/logging lost jobs (the ones started but not finished and disappeared from redis).
  • Sidekiq InfluxDB: Sidekiq server middleware that pushes executed job metrics to an InfluxDB database.
  • Sidekiq Prometheus exporter: A Sidekiq extension for exposing Prometheus formatted stats to be scrapped.
  • general ruby Prometheus exporter: A general purpose ruby exporter for Prometheus metrics with Sidekiq integration.
  • sidekiq_queue_metrics: Lets you monitor individual sidekiq queue metrics along with failures in each queue.
  • sidekiq-job_alert: Send alert to Slack if too many waiting jobs or dead jobs.
  • yabeda-sidekiq — plugin collecting cluster and process-level metrics and exposing them via yabeda adapters to monitoring system of your choice: Prometheus, NewRelic, DataDog…

Prioritization

Queue control

  • Sidekiq Custom Queue: A Sidekiq plugin for allowing workers to define custom/dynamic queues based on the queued message.
  • Sidekiq Canary: A Sidekiq plugin for doing canary deployments

Queue limits

  • Sidekiq Limit Fetch: Restrict number of workers which are able to run specified queues simultaneously. You can pause queues and resize queue distribution dynamically. Also tracks number of active workers per queue. Supports global mode (multiple Sidekiq processes). There is an additional blocking queue mode.
  • Sidekiq Throttler: Sidekiq::Throttler is a middleware for Sidekiq that adds the ability to rate limit job execution on a per-worker basis.
  • sidekiq-rate-limiter: Redis backed, per worker rate limits for job processing.
  • Sidekiq::Throttled: Concurrency and threshold throttling.
  • Sidekiq Worker Limiter: An extremely simple way to limit the concurrency of specified workers.

Recurring jobs

Dead jobs

Ruby

  • Rubykiq: Sidekiq agnostic enqueuing using Redis.

Non-Ruby

  • Coffeekiq: Basic node.js Library that enqueues jobs to Sidekiq.
  • sidekiq-job-php: PHP library that enqueues/schedules jobs to Sidekiq.
  • rust-sidekiq: Rust library that enqueues/schedules jobs to Sidekiq.

Task status

  • Sidekiq-Status: Resque-Status-like functionality for Sidekiq, allows you to track job status.
  • sidekiq_status: Yet another rewrite from scratch of resque_status for Sidekiq.

Unique Jobs

Kubernetes

  • Sidekiq Alive Liveness probe for Sidekiq in Kubernetes deployments

Misc

  • Sidekiq Remove Scheduled: Remove scheduled jobs easily
  • sidekiq-retries: a Retry middleware with more flexible retry handling.
  • sidekiq-enqueuer: A Sidekiq Web extension to enqueue/schedule jobs with custom perform params in Web UI. Support both Sidekiq::Worker and ActiveJob.
  • sidekiq-worker-killer: Memory leaks are very hard to tackle in Ruby and we often find ourselves with growing memory consumption. Instead of spending herculean efforts fixing them, why not kill your processes when they got to be too large ?
  • sidekiq-logstash: Sidekiq plugin to log Structured logs in Logstash formatting.
  • sidekiq-iteration: Make your long-running jobs interruptible and resumable by design.

Add yours here!

Previous: Testimonials

Clone this wiki locally