Pouco a pouco Redis se tornou uma das nossas ferramentas-chaves para nossas plataformas críticas. A principal vantagem do Redis é sua performance e versatilidade: usamos ele como cache, database e lock distribuído. Com Redis nossas plataformas são muito mais resilientes e com alto throughput. Nessa talk, mostraremos como armazenar informações sobre mais de 160 milhões de telefones com menos de 1ms de latência. Além disso, mostraremos como usamos implementamos um load balancer com lock distribuído usando Redis.
1. Redis em Aplicações Críticas:
Alta Performance e Muita Versatilidade
Luciano Sabença - IT Coordinator
2. ABOUT ME
Luciano Sabença
lucianosabenca
● IT Tech Leader / Software Engineer at Movile/Wavy.
● Arquitetura e Desenvolve Sistemas Distribuídos de Alta
Performance.
● Principais áreas de interesse: Teoria da Computação,
Sistemas Distribuídos e Machine Learning.
● Graduado em Ciência da Computação pela Unicamp.
8. PLAYKIDS
685-63
Você gostaria de assinar o
PlayKids por R$ 9,99 por
mês. Envie SIM se deseja
confirmar a assinatura.
SIM
Você assinou com sucesso
o PlayKids. Download
oapp: http://bit.ly/pp e use
o seguinte código de
validação para acesso
premium: 528-985-963
9.
10. AGENDA
● O que é Redis?/Por que Redis?
● Usando Redis como Cache
● Usando Redis como Database
● Usando Redis como Lock Distribuído
● Lições Aprendidas...
11. Mas o que, exatamente, é o Redis?
● Redis se define como "in-memory data structure
store".
● Dados armazenados em formato: Key -> Value
● Lida bem com problemas de concorrência! o/
● Tem suporte à expiração de registro! o/
● Diversas aplicações
12. Mas o que, exatamente, é o Redis?
● Tipos de dados básicos:
○ String
○ Hash
○ Set
○ SortedSet
○ List
○ GeoHash
○ HyperLogLogs
○ BitMap
13. Por quê Redis?
● Operações atômicas!
● Replicação assíncrona:
○ Rapida.
○ Confiável.
● Muuuuito rápido: todo o dataset armazenado em
memória!
● Persistência!
14. Por quê Redis?
● Extensões em Lua customizáveis!
● API de Módulos:
○ Redis Search
○ Redis Graph
○ ReJSON
○ Bloomfilter
16. Redis Como Cache
Um dos casos de usos mais comuns para o Redis!
Vamos cachear nossos dados de Greylist com alta
performance?
> 160 milhões de
Registros
Essencial para a
nossas
plataformas
críticas!
Impacto direto no
faturamento da
companhia!
17. Mas o que é a Greylist?
A GreyList é um score criado a partir do histórico de
pagamentos dos usuários em nossos serviços!
Phone Number: + 55 19 0000 1111 Score: 0,8
Phone Number: + 55 19 2323 0101 Score: 0,2
Phone Number: + 55 19 0202 0000 Score: 0,4
Phone Number: + 55 19 4242 9090 Score: 0,1
GREYLIST DATA LAYER
18. Greylist na Prática
Gostaria de assinar o
produto de esportes
por R$4,99/semana?
Responde com Sim
para confirmar.
685-63
Parceiro de Mídia
19. Greylist na Prática
Gostaria de assinar o
produto de esportes
por R$4,99/semana?
Responde com Sim
para confirmar.
Sim
685-63
Platforma de
Assinatura
Greylist Service
20. Greylist na Prática
Gostaria de assinar o
produto de esportes
por R$4,99/semana?
Responde com Sim
para confirmar.
Sim
685-63
Platforma de
Assinatura
Greylist Service
Desculpe, serviço
indisponível para seu
número.
Parabéns, você agora é
um assinante do
produto de esportes.
Digite SAIR para
cancelar a assinatura.
SIM
SCORE > 0,5Não
21. Greylist na Prática
Gostaria de assinar o
produto de esportes
por R$4,99/semana?
Responde com Sim
para confirmar.
Sim
Desculpe, serviço
indisponível para seu
número.
685-63
Greylist Service
Desculpe, serviço
indisponível para seu
número.
Parabéns, você agora é
um assinante do
produto de esportes.
Digite SAIR para
cancelar a assinatura.
Sim
SCORE > 0,5Não
22. Greylist na Prática
Gostaria de assinar o
produto de esportes
por R$4,99/semana?
Responde com Sim
para confirmar.
Sim
Desculpe, serviço
indisponível para seu
número.
685-63
Platforma de
Assinatura
Greylist Service
Desculpe, serviço
indisponível para seu
número.
Parceiro de Mídia
Parabéns, você agora é
um assinante do
produto de esportes.
Digite SAIR para
cancelar a assinatura.
Sim
Não SCORE > 0,5
24. Redis como Cache
● Usando como cache não precisamos de persistência => Taxa de
escrita próxima a 300k/segundo.
● Alguns picos de ~400k de escritas/segundo
● Tempo de resposta do Redis < 5 ms
● Nenhum impacto no nosso fluxo de assinatura
25. Resultados
● Mais de 1 milhão de assinaturas de usuários com
histórico ruim bloqueadas.
● Aproximadamente R$ 200 mil economizados em
somente alguns meses
● Algumas campanhas com taxa de bloqueio > 40%.
Ponto de atenção!
27. Redis Como Banco de Dados
Redis como nosso banco de dados primário é viável!
Não só viável, como é uma solução bem interessante!
:-D
60 Milhões de
Números de
telefone
> 1 Bilhão de
requisições/mês
Latência < 5ms
28. Blacklist - Exemplo de Uso
Plataforma de Envio de
Mensagens
BLACKLIST LAYER
check
PLAY KIDS
685-63
29. Blacklist - Exemplo de Uso
Plataforma de Envio de
Mensagens
BLACKLIST LAYER
check
PLAY KIDS
Você gostaria de
assinar o PlayKids R$
9,99/mês. Envie SIM
p/ confirmar a
assinatura.
685-63
30. Blacklist - Exemplo de Uso
Platforma de
Cobrança
BLACKLIST LAYER
check
SIM
685-63
PLAY KIDS
Você gostaria de
assinar o PlayKids R$
9,99/mês. Envie SIM
p/ confirmar a
assinatura.
31. Blacklist - Exemplo de Uso
Plataforma de
Assinatura
BLACKLIST LAYER
check
SIM
Você assinou com
sucesso o PlayKids.
Use o código de
acesso 555-5555
685-63
PLAY KIDS
Você gostaria de
assinar o PlayKids R$
9,99/mês. Envie SIM
p/ confirmar a
assinatura.
32. Blacklist - Exemplo de Uso
Plataforma de
Assinatura
Platforma de
Cobrança
Plataforma de Envio de
Mensagens
BLACKLIST LAYER
check check check
685-63
SIM
Você assinou com
sucesso o PlayKids.
Use o código de
acesso 555-5555
685-63
PLAY KIDS
Você assinou com
sucesso o PlayKids.
Use o código de
acesso 555-5555
37. Resultados
● Economizamos mais de 100 GB de
memória
● Salvamos milhares de R$ em memória
● Dados centralizados
Throughput no envio de
Mensagens
Aumento na Escalabilidade
Diminuição de custos
Diminuição de latência
e impacto dos deploys
38. Redis como um lock
distribuído
Vamos experimentar o Redis como
um orquestrador de sistemas
distribuídos?
39. Redis Como Lock Distribuído
Vamos usar o Redis como orquestrador para nos
ajudar a lidar com conexões SMPP.
Mas, o que são conexões SMPP?
Conexões Stateful
com quantidade
limitada
Uma conexão
pode ser
consumida por
mais de uma
instância
Nós devemos
conseguir ser
capaz de fazer
balanceamento
das conexões
44. Obter o Lock:
SET resource_lock_name some_random_value NX PX <expiration>
Como Obter/Liberar o Lock?
45. Obter o Lock:
SET resource_lock_name some_random_value NX PX <expiration>
Liberar o Lock:
if redis.call("get",KEYS[1]) == ARGV[1] then
return redis.call("del",KEYS[1])
else
return 0
end
Source and More Information: https://redis.io/topics/distlock
Como Obter/Liberar o Lock?
46. Por Que Usar o Redis Para Esse Cenário?
Operações Atômicas Estruturas de Dados Poderosas
47. Aumento na
confiabilidade de
nossas integrações.
Melhoria considerável
na resiliência da
nossas plataformas
Resultados
Diminuição
downtime das
nossas plataformas
49. Ausência de Multi-DC
● Hoje o Redis não tem suporte nativo a Multi-DC :-(
○ Todas as escritas são duplicadas hoje.
● Solução Futura: CRDT (Redis Enterprise)
Aplicação
DATACENTER 1 DATACENTER 2
50. Persistência realmente necessária sempre?
● Desative a persistência se você usa o Redis
como Cache!
Main Memory Access Send 2KB Over Commodity
Network
Read Sequentially 1MB from
SSD
100 ns 900 ns 400 µs
Source: https://people.eecs.berkeley.edu/~rcs/research/interactive_latency.html
Referência dos anos:
2010-2012
51. Setup Incorreto (Não faça isso :'-( )
Master
KeepAliveD
Slave
KeepAliveD
Virtual IP
Instância
writes
52. Quando o Master falhar, o que deveria acontecer?
Down
KeepAliveD
Slave
KeepAliveD
Virtual IP
Instância
writes
Master
KeepAliveD
Slave
KeepAliveD
Virtual IP
Instância
writes
53. Cenário Esperado em Caso de Falha
Slave
KeepAliveD
Master
KeepAliveD
Virtual IP
Instância
writes
54. O que realmente aconteceu (em produção, um dia…)?
Master
KeepAliveD
Slave
KeepAliveD
Virtual IP
Instância
● O antigo mestre sobe e se
assume como mestre,
sincronizando informaçoes
antigas para o Slave
● Perdemos muitos dados...
● Problemas generalizados de
consistência.
Lição Aprendida: Não tente usar
soluções caseiras. Use a solução
oficial: Sentinel.
writes
55. Limitações da Nossa Implementação de Lock
● Ponto único de falha
Plataforma
Plataforma
Plataforma
56. Limitações da Nossa Implementação de Lock
● Ponto único de falha
Platforma
Platforma
Platforma
Delay
Slave
Solução para esses problemas: Use uma solução mais complexa (e.g. RedLock).
● Não muito adequado para locks de alto
throughput
Platforma
Platforma
Platforma
57. Cuidado com o Modo de Persistência!
AOF
RDB
RDB
Uma Nova instância
de Redis foi criada a
partir do dump de
outra instância
Persistência via
Append-Only-File foi
deixada desabilitada
incorretamente
Algum tempo
depois...
Instância caiu/foi
rebootada...
Restore foi feito a
partir do dump
antigo :-(