SlideShare ist ein Scribd-Unternehmen logo
1 von 58
Downloaden Sie, um offline zu lesen
Redis em Aplicações Críticas:
Alta Performance e Muita Versatilidade
Luciano Sabença - IT Coordinator
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.
is a Movile company
SALDO BANCARIO
Conta: X3254
Saldo: R$1,564.20
100852
SALDO BANCARIO
Conta: X3254
Saldo: R$1,564.20
100852
Você acabou de receber
um deposito no valor de
R$1000 reais na sua
conta X3254
PLAYKIDS
685-63
PLAYKIDS
685-63
Você gostaria de assinar o
PlayKids por R$ 9,99 por
mês. Envie SIM se deseja
confirmar a assinatura.
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
AGENDA
● O que é Redis?/Por que Redis?
● Usando Redis como Cache
● Usando Redis como Database
● Usando Redis como Lock Distribuído
● Lições Aprendidas...
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
Mas o que, exatamente, é o Redis?
● Tipos de dados básicos:
○ String
○ Hash
○ Set
○ SortedSet
○ List
○ GeoHash
○ HyperLogLogs
○ BitMap
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!
Por quê Redis?
● Extensões em Lua customizáveis!
● API de Módulos:
○ Redis Search
○ Redis Graph
○ ReJSON
○ Bloomfilter
Redis como Cache
Vamos experimentar o
Redis como um cache de
alta performance?
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!
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
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
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
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
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
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
Solução
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
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!
Redis como Database
Vamos experimentar o
Redis como um banco de
dados?
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
Blacklist - Exemplo de Uso
Plataforma de Envio de
Mensagens
BLACKLIST LAYER
check
PLAY KIDS
685-63
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
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.
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.
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
Arquitetura da Solução Atual - Redis como Banco de Dados
Arquitetura da Solução Atual - Redis como Banco de Dados
Por que Usamos Redis Nesse Cenário?
Persistência
Configurável
Diferentes
Estratégias de
Replicação
Dados em
memória - Acesso
Muito Rápido!
Setup Redis
Aplicação Aplicação Aplicação Aplicação Aplicação Aplicação
DATACENTER 1 DATACENTER 2
Leitura
Escrita
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
Redis como um lock
distribuído
Vamos experimentar o Redis como
um orquestrador de sistemas
distribuídos?
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
Condições Normais
Instância
Instância
Operadora
SMPP / BIND 1
SMPP / BIND 2
WAVY DATACENTERS INTERNET
Cenário de Falhas
Instância
Instância
Operadora
SMPP / BIND 1
SMPP / BIND 2
WAVY DATACENTERS INTERNET
O Que Esperamos?
Instância
Instância
Operadora
SMPP / BIND 1
SMPP / BIND 2
WAVY DATACENTERS INTERNET
Solução
Instância
Instância
Operadora
SMPP / BIND 1
SMPP / BIND 2
WAVY DATACENTERS INTERNET
Obter o Lock:
SET resource_lock_name some_random_value NX PX <expiration>
Como Obter/Liberar o Lock?
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?
Por Que Usar o Redis Para Esse Cenário?
Operações Atômicas Estruturas de Dados Poderosas
Aumento na
confiabilidade de
nossas integrações.
Melhoria considerável
na resiliência da
nossas plataformas
Resultados
Diminuição
downtime das
nossas plataformas
O que aprendemos
usando Redis em
Produção?
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
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
Setup Incorreto (Não faça isso :'-( )
Master
KeepAliveD
Slave
KeepAliveD
Virtual IP
Instância
writes
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
Cenário Esperado em Caso de Falha
Slave
KeepAliveD
Master
KeepAliveD
Virtual IP
Instância
writes
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
Limitações da Nossa Implementação de Lock
● Ponto único de falha
Plataforma
Plataforma
Plataforma
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
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 :-(
linkedin.com/in/luciano-sabenca
Obrigado! :-)
luciano.sabenca@wavy.global

Weitere ähnliche Inhalte

Ähnlich wie Redis Aplicações Críticas

Apresentação prask's
Apresentação prask'sApresentação prask's
Apresentação prask'sGilberto Fadim
 
Apresentação Prasks- Atualizada
Apresentação Prasks- AtualizadaApresentação Prasks- Atualizada
Apresentação Prasks- AtualizadaGcm Prezotto
 
Apresentacao prasks 2014
Apresentacao prasks 2014Apresentacao prasks 2014
Apresentacao prasks 2014Lucas Pereira
 
Apresentação PRASKS - NOROESTE PAULISTA
Apresentação PRASKS - NOROESTE PAULISTAApresentação PRASKS - NOROESTE PAULISTA
Apresentação PRASKS - NOROESTE PAULISTACarlos Wilson Horschutz
 
Prasks apresentação
Prasks apresentaçãoPrasks apresentação
Prasks apresentaçãoCOMO DA China
 
Webinar - Como deixar seu consumidor mais confortável para comprar no seu e-c...
Webinar - Como deixar seu consumidor mais confortável para comprar no seu e-c...Webinar - Como deixar seu consumidor mais confortável para comprar no seu e-c...
Webinar - Como deixar seu consumidor mais confortável para comprar no seu e-c...Site Blindado S.A.
 
QUESTNET by SAMBIASE
QUESTNET by SAMBIASEQUESTNET by SAMBIASE
QUESTNET by SAMBIASELuiz Sambiase
 
Lancamento Novo Plano Apresentação Oficial Clube Créditos
Lancamento Novo Plano Apresentação Oficial Clube CréditosLancamento Novo Plano Apresentação Oficial Clube Créditos
Lancamento Novo Plano Apresentação Oficial Clube CréditosCLUBE CRÉDITOS
 
Redexpt
RedexptRedexpt
Redexptbfbs
 
Apresentação Plano de Marketing ALIA AD
Apresentação Plano de Marketing ALIA ADApresentação Plano de Marketing ALIA AD
Apresentação Plano de Marketing ALIA ADbuscapremiada
 
APRESENTAÇÃO ALIA AD
APRESENTAÇÃO ALIA ADAPRESENTAÇÃO ALIA AD
APRESENTAÇÃO ALIA ADGcm Prezotto
 
Apresentação Plano de Marketing Alia Ad
Apresentação Plano de Marketing Alia AdApresentação Plano de Marketing Alia Ad
Apresentação Plano de Marketing Alia Adbuscapremiada
 
ARES CRUZEIRO AINDA NO PRE-LANÇAMENTO
ARES CRUZEIRO AINDA NO PRE-LANÇAMENTOARES CRUZEIRO AINDA NO PRE-LANÇAMENTO
ARES CRUZEIRO AINDA NO PRE-LANÇAMENTOandre luiz
 
Apresentação geteasy brasil
Apresentação geteasy brasilApresentação geteasy brasil
Apresentação geteasy brasilRangel Raquel
 

Ähnlich wie Redis Aplicações Críticas (20)

Apresentação prask's
Apresentação prask'sApresentação prask's
Apresentação prask's
 
Apresentação Prasks- Atualizada
Apresentação Prasks- AtualizadaApresentação Prasks- Atualizada
Apresentação Prasks- Atualizada
 
Apresentacao prasks
Apresentacao prasksApresentacao prasks
Apresentacao prasks
 
Apresentacao prasks 2014
Apresentacao prasks 2014Apresentacao prasks 2014
Apresentacao prasks 2014
 
Apresentação PRASKS - NOROESTE PAULISTA
Apresentação PRASKS - NOROESTE PAULISTAApresentação PRASKS - NOROESTE PAULISTA
Apresentação PRASKS - NOROESTE PAULISTA
 
Prasks apresentação
Prasks apresentaçãoPrasks apresentação
Prasks apresentação
 
Net Vision Global
Net Vision Global Net Vision Global
Net Vision Global
 
Webinar - Como deixar seu consumidor mais confortável para comprar no seu e-c...
Webinar - Como deixar seu consumidor mais confortável para comprar no seu e-c...Webinar - Como deixar seu consumidor mais confortável para comprar no seu e-c...
Webinar - Como deixar seu consumidor mais confortável para comprar no seu e-c...
 
QUESTNET by SAMBIASE
QUESTNET by SAMBIASEQUESTNET by SAMBIASE
QUESTNET by SAMBIASE
 
Seminário de E-commerce ACSP - 30.10.09
Seminário de E-commerce ACSP - 30.10.09Seminário de E-commerce ACSP - 30.10.09
Seminário de E-commerce ACSP - 30.10.09
 
Lancamento Novo Plano Apresentação Oficial Clube Créditos
Lancamento Novo Plano Apresentação Oficial Clube CréditosLancamento Novo Plano Apresentação Oficial Clube Créditos
Lancamento Novo Plano Apresentação Oficial Clube Créditos
 
Redexpt
RedexptRedexpt
Redexpt
 
LLE360
LLE360LLE360
LLE360
 
Apresentação Plano de Marketing ALIA AD
Apresentação Plano de Marketing ALIA ADApresentação Plano de Marketing ALIA AD
Apresentação Plano de Marketing ALIA AD
 
APRESENTAÇÃO ALIA AD
APRESENTAÇÃO ALIA ADAPRESENTAÇÃO ALIA AD
APRESENTAÇÃO ALIA AD
 
Apresentação Plano de Marketing Alia Ad
Apresentação Plano de Marketing Alia AdApresentação Plano de Marketing Alia Ad
Apresentação Plano de Marketing Alia Ad
 
ARES CRUZEIRO AINDA NO PRE-LANÇAMENTO
ARES CRUZEIRO AINDA NO PRE-LANÇAMENTOARES CRUZEIRO AINDA NO PRE-LANÇAMENTO
ARES CRUZEIRO AINDA NO PRE-LANÇAMENTO
 
Chip livre
Chip livreChip livre
Chip livre
 
Apresentação geteasy brasil
Apresentação geteasy brasilApresentação geteasy brasil
Apresentação geteasy brasil
 
grana2plus7
grana2plus7grana2plus7
grana2plus7
 

Redis Aplicações Críticas

  • 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.
  • 3. is a Movile company
  • 5. SALDO BANCARIO Conta: X3254 Saldo: R$1,564.20 100852 Você acabou de receber um deposito no valor de R$1000 reais na sua conta X3254
  • 7. PLAYKIDS 685-63 Você gostaria de assinar o PlayKids por R$ 9,99 por mês. Envie SIM se deseja confirmar a assinatura.
  • 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
  • 15. Redis como Cache Vamos experimentar o Redis como um cache de alta performance?
  • 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!
  • 26. Redis como Database Vamos experimentar o Redis como um banco de dados?
  • 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
  • 33. Arquitetura da Solução Atual - Redis como Banco de Dados
  • 34. Arquitetura da Solução Atual - Redis como Banco de Dados
  • 35. Por que Usamos Redis Nesse Cenário? Persistência Configurável Diferentes Estratégias de Replicação Dados em memória - Acesso Muito Rápido!
  • 36. Setup Redis Aplicação Aplicação Aplicação Aplicação Aplicação Aplicação DATACENTER 1 DATACENTER 2 Leitura Escrita
  • 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
  • 40. Condições Normais Instância Instância Operadora SMPP / BIND 1 SMPP / BIND 2 WAVY DATACENTERS INTERNET
  • 41. Cenário de Falhas Instância Instância Operadora SMPP / BIND 1 SMPP / BIND 2 WAVY DATACENTERS INTERNET
  • 42. O Que Esperamos? Instância Instância Operadora SMPP / BIND 1 SMPP / BIND 2 WAVY DATACENTERS INTERNET
  • 43. Solução Instância Instância Operadora SMPP / BIND 1 SMPP / BIND 2 WAVY DATACENTERS INTERNET
  • 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
  • 48. O que aprendemos usando Redis em Produção?
  • 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 :-(