Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Mantendo Milhares de Usuários Atualizados Utilizando Pub/Sub do Redis e Ruby

Mantendo Milhares de Usuários Atualizados Utilizando Pub/Sub do Redis e Ruby

Apresentado na RubyConf BR 2018 - Como exploramos as funcionalidades de Publisher/Subscriber do Redis para manter os dados de milhares de clientes atualizados o mais cedo possível nas ferramentas de Análise e Business Intelligence da RD.

Matheus Teixeira

December 14, 2018
Tweet

Other Decks in Programming

Transcript

  1. Mantendo Milhares de Usuários Atualizados Utilizando Pub/Sub do Redis e

    Ruby Matheus Teixeira Full Stack Developer - Análise e BI
  2. • Florianópolis, SC • Ciências da Computação - UFSC •

    Ruby desde 2014 • Resultados Digitais - Time de Análise e BI desde 2015 in/matheusteixeira1
  3. • Florianópolis, SC • ~700 Colaboradores • ~100 no Time

    de Produto e Engenharia • Divididos em Squads por funcionalidade ◦ Analytics e BI • 2 Produtos ◦ Marketing e CRM • +10 mil clientes
  4. Como solucionar um problema de forma simples e eficiente, com

    as ferramentas que já temos dentro de nossa stack?
  5. • Motivação • O que é Pub/Sub? • Redis •

    Como fazer Pub/Sub com Redis? • Exemplo em Ruby • Exemplo do caminho completo • Conclusões
  6. # Motivação | Ad Hoc? Pooling? Serviço de Terceiro Aplicação

    Principal (Rails) Extrator de Dados (Sinatra)
  7. # O Que é Pub/Sub? • Mensageria com Publisher/Subscriber é

    uma forma assíncrona de comunicação entre serviços; • Qualquer mensagem publicada sobre um tópico é imediatamente recebida por todos que se inscreveram naquele tópico; • Os Subscribers podem realizar diferentes funções, em paralelo com a mensagem recebida; • Os Publishers não precisam saber quem está usando a informação que ele está transmitindo; • Os Subscribers não precisam saber de onde a mensagem veio.
  8. # Banco de Dados Chave-Valor? • Guarda seus valores em

    um formato similar a um Hash do Ruby; • A chave é um identificador único que permite acessar o valor associado a ela; • O valor pode ser qualquer coisa a ser armazenada, no caso do Redis: Binary-safe strings, Lists, Sets, Sorted sets, Hashes, bitmaps, HyperLogLogs, etc.
  9. # Banco de Dados Chave-Valor? Key Value Bruce (52) 333-1939

    Wally (52) 231-0001 Kyle (52) 223-2814 Jaime (52) 999-1000
  10. # Banco de Dados Chave-Valor? Key Value artist:1:name Iron Maiden

    artist:1:genre Heavy Metal artist:2:name Queen artist:2:genre Rock
  11. # Pub/Sub no Redis • Introduzido em 2010 ◦ PUBLISH

    ◦ SUBSCRIBE ◦ UNSUBSCRIBE • Redis utiliza uma variável global (pubsub_channels) que mantém um mapeamento entre os tópicos e o conjunto de objetos de subscribers; • Os objetos de subscribers representam um cliente conectado via TCP, de acordo com seu file descriptor.
  12. # Pub/Sub no Redis • Quando um cliente manda uma

    mensagem de SUBSCRIBE, adiciona ao conjunto com aquele nome; • Para o PUBLISH o Redis olha o mapeamento na variável global e manda a mensagem para o socket do cliente subscriber; • Caso o cliente desconecte, o redis limpa as subscriptions desse cliente.
  13. # Subscriber • Enquanto está no modo Subscriber não pode

    realizar outras tarefas (como publicar, ler alguma chave, etc); • Se precisar utilizar a mesma instância abrir outra conexão.
  14. # Unsubscribe é Pouco Eficiente • Operação UNSUBSCRIBE é O(N)

    ◦ Onde n é o número de clientes subscribers; • Com um número alto de Subscribers em um canal, o UNSUBSCRIBE pode ser custoso; • Dica: Tentar limitar o número de clientes ou número de subscriptions permitidas por tópico.
  15. Como solucionar um problema de forma simples e eficiente, com

    as ferramentas que já temos dentro de nossa stack?
  16. # Links • What is Pub/Sub Messaging? • What is

    a Key-Value Database? • Redis Pub/Sub Documentation • Exemplo de Chat com Redis Pub/Sub (em Ruby) • Redis Pub/Sub Under The Hood We’re Hiring! https://resultadosdigitais.com.br/trabalhe-conosco