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.
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.
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.
◦ 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.
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.
◦ 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.
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