Executando Background Jobs

Executando Background Jobs

Background Jobs + Sidekiq

Cb5d9e9095cd41b636764a85e57ade4b?s=128

Nando Vieira

July 04, 2013
Tweet

Transcript

  1. 3.

    Amazon poderia perder $1.6 bilhão por ano se o tempo

    de carre amento aumentasse apenas 0.5s. http://fnando.me/ip
  2. 4.

    Goo le estimou que 8 milhões de buscas diárias deixariam

    de ser realizadas se o tempo de carre amento aumentasse apenas 0.04s. http://fnando.me/ip
  3. 7.

    Verifica unicidade, salva no banco, indexa… Envia e-mail de confirmação/

    boas-vindas… Adiciona no índice de busca… Gera métricas…
  4. 8.

    Al umas tarefas estão fora de seu controle e podem

    demorar muito (ou até mesmo dar timeout). Imprevisível
  5. 9.

    adjective In computer pro rammin , asynchronous events are those

    occurrin independently of the main pro ram flow. Asynchronous actions are actions executed in a non-blockin scheme, allowin the main pro ram flow to continue processin . a•syn•chro•nous
  6. 11.

    Relatórios. Envio de e-mails. Processamento de ima ens. Chamadas a

    serviços externos. Indexação. Back round
  7. 13.
  8. 15.

    activemq amqp beanstalkd celery cron delayed_job earman hornetq jms ka

    a kestrel mqseries nsq qless qpid rabbitmq resque sidekiq sqs stormmq swiftmq zeromq
  9. 17.
  10. 20.
  11. 27.

    O job pode ser executado várias vezes sem criar efeitos

    colaterais maiores que a tarefa do próprio job. Idempotente
  12. 29.

    Idempotente Cancelar pedido Atualizar e-mail do usuário Re-exportar ima ens

    Não-idempotente Enviar e-mail de notificação Fazer cobrança no cartão de crédito
  13. 30.

    Se o job falhar, desfaça as alterações que foram feitas

    (use uma transação de banco de dados, por exemplo). Transacional
  14. 31.

    class BillingWorker include Sidekiq::Worker def perform(user_id) user = User.find_by_id(user_id) return

    unless user Billing.process(user) Mailer.billed(user).deliver! end end
  15. 32.

    class BillingWorker include Sidekiq::Worker def perform(user_id) user = User.find_by_id(user_id) return

    unless user Billing.process(user) Mailer.billed(user).deliver! end end
  16. 33.

    class BillingWorker include Sidekiq::Worker def perform(user_id) user = User.find_by_id(user_id) return

    unless user Billing.process(user) MailerWorker .perform_async(user.id, "billed") end end
  17. 36.

    Client É quem adiciona os jobs para processamento em back

    round. Server É quem pe a os jobs para serem processados.
  18. 38.

    Sidekiq.configure_server do |config| config.redis = { url: "redis://redis.example.com:7372/12", namespace: "mynamespace"

    } end Sidekiq.configure_client do |config| config.redis = { url: "redis://redis.example.com:7372/12", namespace: "mynamespace" } end
  19. 39.
  20. 42.

    stats = Sidekiq::Stats.new stats.processed # how many jobs have been

    processed stats.failed # how many jobs have failed stats.queues # queues and number of enqueued jobs stats.enqueued # total count of enqueued jobs
  21. 43.

    stats = Sidekiq::Stats::History.new(2) # 2 days stats.processed # => {

    "2012-12-05" => 1010, "2012-12-04" => 1500 }
  22. 48.

    https:// ithub.com/tomykaira/clockwork require "./config/environment" require "clockwork" module Clockwork configure do

    |config| config[:tz] = "America/Sao_Paulo" end every(1.day, "mailer.followup", at: "02:00") do FollowupWorker.perform_async end end
  23. 51.
  24. 52.

    Back round Job All The Thin s. Back round Job

    All The Thin s. Back round Job All The Thin s. Back round Job All The Thin s. Back round Job All The Thin s. Back round Job All The Thin s. Back round Job All The Thin s. Back round Job All The Thin s. Back round Job All The Thin s. Back round Job All The Thin s.