Slide 1

Slide 1 text

Arquiteturas Resilientes em Java TDC Business 2022 Leonardo Piedade Solutions Architect, AWS

Slide 2

Slide 2 text

War Room!? +20 pessoas: ▸ Reportando status ▸ Recuperando o sistema ▸ Analisando a causa raiz ▸ Espalhando desinformação Quando fica pior? ▸ Não tem café ▸ Fora do horário ▸ Final de semana

Slide 3

Slide 3 text

Resiliência 1

Slide 4

Slide 4 text

“ Resiliência é a habilidade de um sistema se recuperar e continuar operando mesmo quando uma falha ocorre. 4

Slide 5

Slide 5 text

5 Resiliência Disponibilidade Prevenção Recuperação de desastres (DR) Remediação

Slide 6

Slide 6 text

Disponibilidade em 9's 6 Disponibilidade Indisponibilidade Máxima Anual Tipos de aplicação (Exemplos) 99% 3 dias e 15 horas Processamento em lote, ETL’s, transferência de arquivos 99,9% 8 horas e 45 minutos Sistemas internos (Backoffice) 99,99% 52 minutos E-commerce, POS Entrega de vídeos 99,999% 5 minutos Gateways de pagamento, equipamentos de telefonia

Slide 7

Slide 7 text

Como medimos? 7 Availability = 𝑈𝑝𝑡𝑖𝑚𝑒 𝑈𝑝𝑡𝑖𝑚𝑒 + (𝐷𝑜𝑤𝑛𝑡𝑖𝑚𝑒 − 𝑀𝑎𝑖𝑛𝑡𝑒𝑛𝑎𝑛𝑐𝑒 𝑊𝑖𝑛𝑑𝑜𝑤) Availability!"#$% = 𝐴𝑣𝑎𝑖𝑙&'' × 𝐴𝑣𝑎𝑖𝑙()'* × 𝐴𝑣𝑎𝑖𝑙()'+ Availability!"#$% = 99,9% × 95% × 95% = 90%

Slide 8

Slide 8 text

Além dos 9’s Outras métricas ▸ Tempo de resposta (latência esperada) ▸ Taxa de erros ▸ Qualquer métrica que esteja no contrato! 8

Slide 9

Slide 9 text

Resilience Patterns 2

Slide 10

Slide 10 text

Timeouts Cenários mais comuns ▸ Operações de banco de dados ▸ Requisições de API’s (privadas ou públicas) 10 D etect

Slide 11

Slide 11 text

Timeouts Solução para... ▸ Evitar esperas desnecessárias ▸ Economizar recursos em busy_wait ▸ Evitar falhas em cascata 11 D etect

Slide 12

Slide 12 text

Retry 12 Cenários mais comuns ▸ Falhas de redes ▸ Tratamento de exceções R ecover Source: https://blog.codecentric.de/en/2019/06/resilience-design-patterns-retry-fallback-timeout-circuit-breaker/

Slide 13

Slide 13 text

Retry 13 R ecover

Slide 14

Slide 14 text

Retry - Failsafe 14 R ecover

Slide 15

Slide 15 text

Exponential Backoff 15 R ecover Source: https://www.jawahar.tech/blog/handling-transient-faults/

Slide 16

Slide 16 text

Circuit Breaker 16 D etect Source: https://www.jawahar.tech/blog/handling-transient-faults/

Slide 17

Slide 17 text

Circuit Breaker – Resilience4j 17 D etect

Slide 18

Slide 18 text

Fallback 18 M itigate Source: https://blog.codecentric.de/en/2019/06/resilience-design-patterns-retry-fallback-timeout-circuit-breaker/ Fallbacks podem ser técnicos ou funcionais!

Slide 19

Slide 19 text

Circuit Breaker + Fallback 19

Slide 20

Slide 20 text

Failsafe 20

Slide 21

Slide 21 text

Rate Limit – Resilience4j 21 Prevent

Slide 22

Slide 22 text

Resilience by Design

Slide 23

Slide 23 text

Sistemas dentro de um banco Serviço de Extrato Serviço PIX Serviço de Notificação Serviço de Análise de Fraude Serviço de Empréstimo Serviço de Seguro Serviço de Login Serviço de Agendamento de Pagamento Serviço de Previdência Privada Serviço de backoffice

Slide 24

Slide 24 text

Pensando em tiers 24 Classe 1 Classe 2 Classe 3 Classe 4 Aplicações de pagamento Sistemas de riscos Site público Intranet Aplicações de compensação Sistemas regulatórios Ferramentas internas Plataformas de backoffice Aplicações de liquidação E-mail e comunicação ERP Armazenamento (backup) Plataformas de negociação na bolsa CRM Sites internos

Slide 25

Slide 25 text

Classificando em tiers Serviço de Extrato Serviço PIX Serviço de Notificação Serviço de Antifraude Serviço de Empréstimo Serviço de Seguro Serviço de Login Serviço de Agendamento de Pagamento Serviço de Wiki Interno Classe 1 Classe 2 Classe 2 Classe 1 Classe 3 Classe 2 Serviço de backoffice Classe 4 Classe 3 Classe 2 Classe 4

Slide 26

Slide 26 text

Serviços e suas dependências Serviço de Extrato Serviço PIX Serviço de Notificação Serviço de Antifraude Serviço de Empréstimo Serviço de Seguro Serviço de Login Serviço de Agendamento de Pagamento Classe 1 Classe 2 Classe 2 Classe 1 Classe 3 Classe 2 Classe 3 Classe 2 Serviço de Wiki Interno Classe 4 Serviço de backoffice Classe 4

Slide 27

Slide 27 text

Dependências entre tiers Serviço PIX Serviço de Notificação Serviço de Antifraude Classe 1 Classe 2 Classe 2

Slide 28

Slide 28 text

Desacoplamento 28

Slide 29

Slide 29 text

Dependências internas Serviço PIX Classe 1 Serviço de Notificação Classe 2 Serviço de Antifraude Classe 2 HTTP

Slide 30

Slide 30 text

Dependências internas Publish-Subscribe Serviço PIX Classe 1 Serviço de Notificação Classe 2 Serviço de Antifraude Classe 2 Topic

Slide 31

Slide 31 text

Dependências internas Fan-out Pattern Amazon SNS Serviço PIX Classe 1 Serviço de Notificação Classe 2 Serviço de Antifraude Classe 2 Amazon SQS Amazon SQS Queue Queue Topic

Slide 32

Slide 32 text

“ Desacoplamento adiciona complexidade... Use com moderação. 32

Slide 33

Slide 33 text

Usando contingências Cliente Serviço TED Serviço de PIX Serviço de Transferência Serviço DOC

Slide 34

Slide 34 text

Autorização em confiança Cliente Serviço Antifraude Serviço PIX Valor <= 100?

Slide 35

Slide 35 text

Caching 35

Slide 36

Slide 36 text

Cache 36 M itigate

Slide 37

Slide 37 text

Cache 37 M itigate Frameworks: Ehcache, Caffeine, Redisson, Hazelcast, Ignite

Slide 38

Slide 38 text

Backpressure 38 M itigate Source: https://dzone.com/articles/backpressure-in-akka-streams

Slide 39

Slide 39 text

Backpressure 39 M itigate Source: https://dzone.com/articles/backpressure-in-akka-streams

Slide 40

Slide 40 text

Backpressure - Akka 40 M itigate

Slide 41

Slide 41 text

Backpressure - Akka 41 M itigate

Slide 42

Slide 42 text

Considerações Finais Desenvolva pensando em: ▸ Quais falhas podem ocorrer? ▸ Como devo testar esse componente? ▸ Qual a experiência do usuário quando um componente falha? ▸ Se a falha ocorrer, deve ter um alerta? Para quem? Como alertar? ▸ Como eliminar atividades manuais na operação dos sistemas? 42

Slide 43

Slide 43 text

We are here!

Slide 44

Slide 44 text

44 Outros recursos…

Slide 45

Slide 45 text

45 Se quiser saber mais... https://bit.ly/tdcsp-2022

Slide 46

Slide 46 text

46 Obrigado! linkedin.com/in/leoap github.com/lpiedade Please give me your feedback