1 of 50

2 of 50

2

Servindo 1MM de mensagens simultâneas com RabbitMQ

01

3 of 50

3

DevOps Especialista na�Boticário

�Ele/Dele

@claydeveloper

Clayton

Cavaleiro

4 of 50

4

Quem é o Grupo Boticário?

GRUPO BOTICÁRIO

5 of 50

5

Somos o maior ecossistema de beleza da américa latina

HASHITALKS 2024

6 of 50

6

O time que trabalho é responsável pelas lojas de e-commerce de Beleza na Web, Boticário e demais lojas da holding do Grupo.

HASHITALKS 2024

7 of 50

7

Recebemos a missão de trocar o RabbitMQ dos nossos e-commerces e vou explicar pra vocês o desafio que foi…

HASHITALKS 2024

8 of 50

8

Antes…

  • As filas por não trabalharem nem com Mirror e nem Quorum.
  • Muitas vezes não era simplesmente recuperar o nó
  • A queda de um nó representava perda de no mínimo 1/3 das aplicações.

HASHITALKS 2024

9 of 50

9

HASHITALKS 2024

10 of 50

10

  • ~60 serviços
  • ~1200 filas
  • ~900 exchanges
  • ~20k mensagens por segundo em um dia normal
  • ~6 anos sem atualizar
  • sem monitoramento

HASHITALKS 2024

11 of 50

11

01

Estabelecendo as Constraints

HASHITALKS 2024

12 of 50

12

  • Reduzir ao máximo participação de Orquestradores na solução
  • Devemos manter suporte ao plugin de delayed messages

HASHITALKS 2024

13 of 50

13

HASHITALKS 2024

14 of 50

14

  • Cluster altamente disponível e com capacidade de tolerância a queda de ao menos uma zona de disponibilidade.
  • zerar incidentes de estouro de disco, mesmo com operações errôneas como uma fila crescer muito durante algum tempo
  • Operações de mudança no cluster precisam ser feitas sem indisponibilidade de nenhum serviço durante o processo

ZERO DOWNTIME

HASHITALKS 2024

15 of 50

15

02

Primeiro modelo

HASHITALKS 2024

16 of 50

16

HASHITALKS 2024

17 of 50

17

HASHITALKS 2024

18 of 50

18

HASHITALKS 2024

19 of 50

19

  • Delayed message não é efêmero.
  • Nodename mudava todo instante

HASHITALKS 2024

20 of 50

20

03

Corrigindo falhas do primeiro modelo

HASHITALKS 2024

21 of 50

21

Mantendo as informações não efêmeras em um cluster de rabbitMQ�

  • EBS.
  • EFS

HASHITALKS 2024

22 of 50

22

HASHITALKS 2024

23 of 50

23

Evitando troca de nomes do nó do cluster de RabbitMQ na troca de instâncias

HASHITALKS 2024

24 of 50

24

HASHITALKS 2024

25 of 50

©2024 HASHICORP

26 of 50

26

  • Pequeno e eficaz
  • Pode compartilhar mesma disponibilidade
  • Tem a api em REST e DNS
  • Plugin nativo no RabbitMQ

HASHITALKS 2024

27 of 50

27

/ INICIA O CONSUL /

Através do discovery da AWS ele descobre os demais nós e forma seu cluster, e com isso também é formado seu dns interno

1

2

3

Linha do Tempo

/ INICIA O RABBITMQ /

O rabbitMQ inicia com o plugin do consul e faz a consulta nele perguntando aonde estão os outros rabbitmqs.

/ OS NÓS ENTRAM NO CLUSTER /

Uma vez que está dentro do cluster, o próprio consul pode cair que os nós existentes não saem do cluster.

HASHITALKS 2024

28 of 50

28

HASHITALKS 2024

29 of 50

29

04

Segundo modelo

HASHITALKS 2024

30 of 50

30

HASHITALKS 2024

31 of 50

31

  • remover um nó aleatóriamente (o autoscaling repara).
  • remover 2 nós aleatoriamente em sequência, com intervalo suficiente para o nó removido recuperar (o autoscaling repara).
  • remover 3 nós aleatoriamente em sequência, com intervalo suficiente para o nó removido recuperar (o autoscaling repara).

Testes realizados no cluster

HASHITALKS 2024

32 of 50

32

  • remover dois nós simultaneamente (é necessário reparar o consul e reiniciar o rabbitmq em cada nó reparado).
  • remover três nós simultaneamente (é necessário reparar o consul e reiniciar o rabbitmq em cada nó reparado)

Testes realizados no cluster (com perda parcial)

HASHITALKS 2024

33 of 50

33

  • remover os 3 nós e forçar remoção dos dados no EFS

Testes realizados no cluster (com perda total)

HASHITALKS 2024

34 of 50

34

05

Bora migrar?

HASHITALKS 2024

35 of 50

35

Federation

HASHITALKS 2024

36 of 50

36

Federation

  • Se uma mensagem for enviada para uma exchange de upstream, ela é replicada para a mesma exchange de downstream.
  • Se uma mensagem for enviada para uma exchange de downstream, ela não é replicada.

HASHITALKS 2024

37 of 50

37

Shovel

HASHITALKS 2024

38 of 50

38

Shovel

  • Ele basicamente intervém coletando as mensagens da origem e aplica no destino, é como se tivesse uma aplicação constantemente coletando as mensagens.
  • Para filas ele concorre com uma aplicação que estiver escutando ela.

HASHITALKS 2024

39 of 50

39

NÃO!

HASHITALKS 2024

40 of 50

40

Classificar as Aplicações

  • consumidor: a aplicação somente reage nas filas como um simples worker e não realiza publicação de mensagens em nenhum lugar.
  • produtor: a aplicação somente escreve em exchanges, não consome nenhuma fila, ela simplesmente produz mensagens.
  • produtor-consumidor: a aplicação escreve e consome filas, muitas delas consomem o que ela mesmo produz

HASHITALKS 2024

41 of 50

41

/ LIGA O FEDERATION /

O federation é ativado

1

2

4

3

Linha do Tempo

/ CONSUMIDORAS NA FRENTE /

A federação já garante que a mensagem na origem está chegando no destino também

/ PRODUTORAS LOGO ATRÁS /

Conforme vai esvaziando, as mensagens na origem param de aumentar

/ SHOVEL NAS FILAS DE ORIGEM /

Shovel transfere mensagens remanescentes (muitas duplicadas na origem). O shovel deve permanecer até acabar as mensagens delayed na origem.

HASHITALKS 2024

42 of 50

42

E aí, perdemos requisição no processo?

GRUPO BOTICÁRIO

43 of 50

43

Mas caímos 3 dias depois!

HASHITALKS 2024

44 of 50

44

06

Teste de carga e Beauty Week

HASHITALKS 2024

45 of 50

45

Teste de carga

HASHITALKS 2024

46 of 50

46

Teste de carga

HASHITALKS 2024

47 of 50

47

Conclusão

  • Aprendemos a fundo todo funcionamento do rabbit, e indo além de sua infraestrutura para conduzir uma migração de sucesso, usamos todos os recursos possíveis dele a nosso favor e isso foi chave para o sucesso da migração.
  • Controlamos o processo conhecendo o fluxo de mensageria, o que não daria certo se não tivéssemos conhecimento sobre sistemas distribuídos.
  • Aprendemos também com os erros, e o EFS é muito bom sempre testar o seu TPS antes de homologar o ambiente pronto para produção.
  • Ainda quero saber qual o limite desse RabbitMQ!

HASHITALKS 2024

48 of 50

48

HASHITALKS 2024

49 of 50

49

HASHITALKS 2024

50 of 50

clayton@cavaleiro.dev | cavaleiro.dev | www.linkedin.com/in/claytoncavaleiro

Obrigado