Construindo a NuConta. Gustavo Bicalho Maurício Verardo

Documentos relacionados
PAPO SMS MANUAL DE INTEGRAÇÃO DO DESENVOLVEDOR VERSÃO 1.0.1

Manual SIGOSMS Aplicação de Gerenciamento e Envio SMS

Sincronização em Sistemas Distribuídos

BEM-VINDO À REVOLUÇÃO!

Guia de Implantação Bluesoft ERP Tesouraria Menu Rápido

Sistemas Distribuídos Capítulo 8 - Aula 14

IPNv2 - Integração da Pós Negociação

Rede de computadores Cliente- servidor. Professor Carlos Muniz

Estruturas de Comunicação de Dados Aula 3 Camadas de Aplicação e Transporte

Redes de Computadores e Aplicações Camada de aplicação IGOR ALVES

Redes de Computadores

Câmara de Ativos. Fluxo de Mensagens - Garantias

Cartão Reconhecimento Conta Um Manual do Portador

As mensagens HL7 de confirmação, ou ACK, são fundamentais para garantir que a comunicação HL7 em andamento seja continua e sem problemas.

Aplicativo Mobile Usuário e Credenciada

APLICATIVO ADP MOBILE SOLUTIONS PARA CONSULTA DE DADOS DO COLABORADOR

Conta Um Manual do Portador

Como Fazer Renegociação de Parcelas (Contas a Receber)? FS136

Bruno Antunes da Silva UFSCar - Sorocaba

Acesso ao Sistema Usuário: MASTER Senha : MASTER (maiúsculo ou minúsculo)

MANUAL VTWEB CLIENT URBANO

Bem-vindo ao tópico sobre devoluções da nota fiscal de saída.

Diagrama Funcional das Informações

Sistemas Distribuídos. Professora: Ana Paula Couto DCC 064

Agenda. Contexto histórico. Portfólio atual de Serviços. Conclusão

Manual do Usuário. EACLIENTE (Android e ios)

Transferência de Arquivo: Protocolo FTP

A Empresa TELCRED ( AlôSaldo )

Bem-vindo ao tópico sobre pedido de vendas ao pagamento.

Sistema de Solicitação de Certidões. Manual do Usuário

Plataforma Corporativa Conta Um Manual do Gestor CNPJ Ativação e Cartões

Cartão BNDES. Guia Cartão BNDES

Bem-vindo ao tópico sobre o processo de suprimento.

Manual de utilização do Portal Rio 2016 Envio de Propostas. Técnicas e Comerciais

MTA Monitor. Manual de Usuário. Transferência de Arquivos. Versão: Última modificação: 11/11/2014

[Abertura e Fechamento de caixa] Focus 10

Esta é sua tela inicial. A configuração dela é bem simples, basta seguir os passos.

FECHAMENTO DE CAIXA. Menu: PDV > FECHAMENTO DE CAIXA

Ajuste de Títulos Cartões de Crédito

Fluxo operacional COOPHEMG / BANCO UAI. Libera vale caixas

MANUAL MÓDULO PESSOA FÍSICA

Cartão Reconhecimento Conta Um Manual do Portador

Processo: Compras. Acesso. Motivação. Parâmetros. Nome do Processo: Cotação de compras. Pendências Versão 2009 Release 2 Autor Francisca

Alteração de nome de operador de registro Como enviar uma solicitação

Orientar a equipe de atendimento na resolução de erros referente ao status das transações

NoSQL Apache Cassandra para DBAs. Conceitos básicos que todo DBA deve conhecer sobre Apache Cassandra.

Bem-vindo ao tópico sobre a compra de itens.

TOTVS Integrações com o Contas a Receber

Sistemas Distribuídos. Professora: Ana Paula Couto DCC 064

Redes de Computadores

Manual Direct100 API V2 RICCARDO BARANA

Alterar Encaminhamento de Processo

Especificação de Requisitos

TOTVS Gestão Hospitalar Manual Ilustrado - Controle de Documentos e Pendência de Conta. 11.8x. março de 2015 Versão: 2.0

Bem-vindo ao tópico sobre automação do processo de vendas.

Manual de Integração

Sincronização em Sistemas Distribuídos

Quiz baseado em localização para Symbian OS

Seminário apresentado em 29/06/2017 Disciplina: Sistemas Distribuídos Professora: Noemi Rodriguez Aluno: Ricardo Dias

TOTVS - Microsiga Protheus Comércio Exterior

INFORMAÇÕES PESSOAIS Atualmente você esta ( ) Sim ( ) Não.

Projeto MyHonda. Versão Nossa tecnologia para o seu sucesso

Visa Vale Pedágio Agilidade e segurança. Guia rápido Visa Vale Pedágio

Passo a Passo Google Meu Negócio

PLATIN INFORMÁTICA. SIAD SNGPC Sistema Integrado de Automação de Drogarias Módulo Gestão de Medicamentos Controlado e Antimicrobianos

IPN - Integração da Pós Negociação

Amadeus Touchless Queue Dispatch

Manual da Turma Virtual: NOTÍCIAS e TWITTER. Para acessar a turma virtual com o perfil Docente, siga o caminho indicado abaixo:

Manual de Utilização do Web Service

Sumário. Introdução a Transações

Formas de Pagamento Como usar formas de pagamento em um fluxo de caixa Planilha de fluxo de caixa 3.5 (com controle de formas de pagamento)

PROJETO DE INTEGRAÇÃO DAS CLEARINGS FASE 2

MANUAL MÓDULO CHECKOUT CIELO (VERSÃO 1.0.0) QUERY COMMERCE

Guia Rápido do Usuário Caderno de dicas práticas para trazer mais eficiência no uso da nova ferramenta

1º passo) Acesse o Portal Estrela Guia no caminho: Menu Completo > Consulta > Status do contrato.

INFORMATIVO VERSÃO

INTERNAL ACESSO AO PORTAL

Volpe Enterprise Resource Planning

*** COMO SE TORNAR UM MOTORISTA UBER ***

ORIENTAÇÕES PARA MOVIMENTAÇÃO CADASTRAL. Fevereiro/2011

Tópico: Devoluções e trocas

Área Restrita de Usuário

Camada de Enlace. OSI x IEEE. Arquitetura IEEE 802. Redes. Nível de Enlace: Controle de Erros e Fluxo Multiplexação

ÁREA DE FORMAÇÃO: FAZER PAGAMENTOS MOVIMENTAÇÃO DE CONTA

MANUAL DE PROCEDIMENTOS OPERACIONAIS DA CBLC DA OFERTA VAREJO

Como configurar a sua loja online?

Dicas 01. Contabilidade Geral. Professores: Gustavo Jubé e Vicente Chagas. Profs. Gustavo e Vicente 1

Guia do usuário Módulo Cielo 3.0 Magento 1

ATIVAR MINHA CONTA. Portal Minhas Operações do BID

INFORMATIVO DE RELEASE MASTERSAF DFE VERSÃO

Guia de Implantação Bluesoft ERP Tesouraria Cheques

MANUAL CDL CÂMARA DE DIRIGENTES LOJISTAS

Tire todas as suas dúvidas quanto à movimentação (e custos) da conta-salário

EQUIPAMENTOS DESBLOQUEIO GRATUITO

MANUAL DE PAGAMENTOS ROYAL CARIBBEAN CRUZEIROS

Importação de Extrato Eletrônico EEFI Operadora de Cartão de Crédito REDECARD

RECE7000 Emissão de recibos de Adiantamentos. RECE7000 Emissão de Recibos de Adiantamentos 1 / 12

INSTRUÇÃO DE TRABALHO SKY ABERTURA DE OCORRÊNCIAS VIA PENDENTE ONLINE SINAIS E TRATAMENTO DE OS.

Área Restrita de Usuário COMPRAR RESIDENCIAL

Transcrição:

Construindo a NuConta Gustavo Bicalho Maurício Verardo

Agenda NuConta Microsserviços no Nubank Transferindo dinheiro entre NuContas Event-sourcing: Modularidade e Escalabilidade Consistência em sistemas distribuídos O feed de movimentações Backend for Frontends com GraphQL

NuConta

NuConta

NuConta

NuConta

NuConta

NuConta

NuConta

NuConta https://nubank.design/

Microsserviços

Microsserviços Fatura Faturas Saldo Antecipação Saldos Antecipações

Microsserviços Fatura Load Balancer Faturas Saldo Load Balancer Saldos Antecipação Load Balancer Antecipações

Microsserviços Serviço A HTTP Serviço B

Microsserviços Serviço A Serviço B Tópico do Kafka

Transferindo dinheiro entre NuContas SOUTHEAST BRAZIL REGION FROM SPACE

Transferindo dinheiro entre NuContas Envios Recebimentos Pedido de envio Recebimento Envio Saldos Depósito Liquidação

Transferindo dinheiro entre NuContas Recebimentos Envios Pedido Pedido de envio Envio Solicitado Saldos

Transferindo dinheiro entre NuContas Recebimentos Envios Pedido Pedido de envio Envio Solicitado Liquidação efetuada Saldos Liquidação

Transferindo dinheiro entre NuContas Recebimentos Envios Pedido Dinheiro enviado para NuConta Pedido de envio Envio Envio Solicitado Liquidação efetuada Saldos Liquidação

Transferindo dinheiro entre NuContas Recebimentos Envios Pedido Dinheiro enviado para NuConta Pedido de envio Recebimento Envio Envio Solicitado Dinheiro Recebido Liquidação efetuada Saldos Liquidação

Transferindo dinheiro entre NuContas Recebimentos Envios Pedido Dinheiro enviado para NuConta Pedido de envio Recebimento Envio Envio Solicitado Dinheiro Recebido Liquidação efetuada Saldos Depósito Liquidação

Características interessantes desse fluxo Recebimentos Envios Pedido Dinheiro enviado para NuConta Pedido de envio Recebimento Envio Envio Solicitado Dinheiro Recebido Liquidação efetuada Saldos Depósito Liquidação

Event Sourcing

E se o cliente quiser enviar transferências para outra instituição financeira? Recebimentos Envios Pedido Dinheiro enviado para NuConta Pedido de envio Recebimento Envio Envio Solicitado Dinheiro Recebido Liquidação efetuada Saldos Depósito Liquidação

E se o cliente quiser enviar transferências para outra instituição financeira? Envios Pedido Dinheiro enviado para outra instituição Pedido de envio Envio Envio Solicitado Liquidação efetuada Saldos Depósito Liquidação Integração com o banco central

E se o cliente receber transferências de outra instituição financeira? Recebimentos Envios Pedido Dinheiro enviado para NuConta Pedido de envio Recebimento Envio Envio Solicitado Dinheiro Recebido Liquidação efetuada Saldos Depósito Liquidação

E se o cliente receber transferências de outra instituição financeira? Integração com o Banco Central Recebimentos Dinheiro recebido do Banco Central Recebimento Dinheiro Recebido Saldos Depósito Liquidação

E se o cliente quiser pagar a fatura do cartão de crédito? Recebimentos Envios Pedido Dinheiro enviado para NuConta Pedido de envio Recebimento Envio Envio Solicitado Dinheiro Recebido Liquidação efetuada Saldos Depósito Liquidação

E se o cliente quiser pagar a fatura do cartão de crédito? Pedido Cartão de crédito Pagamento de Fatura Pagamento de fatura Pedido de Pagamento Pagamento Pagamento Solicitado Liquidação efetuada Saldos Depósito Liquidação

Event Sourcing Sald o no mês pas sad o Saldo hoje Saldos u q o m e v e o d l Sa n a no Depósito Liquidação

Event Sourcing Pedido Recebimentos Envios Dinheiro enviado para NuConta Pedido de envio Recebimento Envio Envio Solicitado Dinheiro Recebido Liquidação efetuada Saldos Depósito Liquidação

Consistência em sistemas distribuídos

O que pode dar errado? Recebimentos Envios Dinheiro enviado para NuConta Pedido Recebimento Pedido de envio Envio Envio Solicitado Dinheiro Recebido Liquidação para envio Saldos Depósito Liquidação

O que pode dar errado? Recebimentos Envios Dinheiro enviado para NuConta Pedido Recebimento Pedido de envio Envio Envio Solicitado Dinheiro Recebido Liquidação para envio Saldos Depósito Liquidação

Primeiro requisito: Processamento at-least-once Todo evento publicado é recebido e processado completamente pelos consumidores pelo menos uma vez

Primeiro requisito: Processamento at-least-once MSG MSG MSG OK! :) MSG

Primeiro requisito: Processamento at-least-once Mensagens são persistidas e replicadas no Kafka cluster, podendo ser consumidas a qualquer momento Próxima mensagem da fila será entregue de novo até que consumidor confirme que completou seu processamento Consumidor só deve confirmar o processamento depois que completar todos os efeitos colaterais

Segundo requisito: Idempotência Uma operação é idempotente se aplicá-la várias vezes é equivalente a aplicá-la uma vez Exemplos: Multiplicação por 0: 7*0 = 7*0*0 = 7*0*0*0 = 0 DELETE FROM users WHERE users.id = 186

Segundo requisito: Idempotência Cada evento em nossa arquitetura tem um UUID aleatório Cada evento derivado usa o UUID do evento anterior (origem) como chave única (chave de idempotência) Serviços garantem consistência interna: banco de dados local valida a chave única Resultado: Criar um evento a partir de outro é uma operação idempotente PedidoDeEnvio ID: 32 Liquidacao ID: 78 Origem: PedidoDeEnvio:32

Segundo requisito: Idempotência PedidoDeEnvio ID: 32 Deposito ID: 377 Origem: Recebimento:156 Liquidacao ID: 78 Origem: PedidoDeEnvio:32 Envio ID: 44 Origem: Liquidacao:78 Recebimento ID: 156 Origem: Envio:44

E quando um serviço cair? Envios Pedido Pedido de envio Envio Solicitado Saldos Liquidação

E quando um serviço cair? Envios Pedido Pedido de envio Envio Solicitado Saldos Liquidação

E se rolar um bug ou mensagem inválida? Deadletters: Tópico onde guardamos mensagens cujo processamento falhou (inclui metadados como stack-traces, timestamp, etc) Envio Pedido Pedido de envio Envio Solicitado Saldos Liquidação Deadletters xkcd.com (CC BY-NC 2.5)

E se rolar um bug ou mensagem inválida? Deadletters: Tópico onde guardamos mensagens cujo processamento falhou (inclui metadados como stack-traces, timestamp, etc) Envio Pedido Pedido de envio /dev/null Descartar Republicar Envio Solicitado Saldos Liquidação Deadletters xkcd.com (CC BY-NC 2.5)

Feed de movimentações

Dados distribuídos = muitos requests Envios Recebimentos Saldos Pedido de envio Envio Recebimento Depósito Liquidação

Modelo do backend!= visão do cliente Evento de envio no feed Valor Data Status: pendente falha sucesso Liquidação 404 Envios Pedido de envio Envio Envio 404 404 Saldos Liquidação

Ciclos de atualização lentos Lançar uma nova versão de um aplicativo numa app store pode demorar dias Muitos usuários continuam com versões antigas por muito tempo Bugfixes e otimizações demoram para chegar Frontend acoplado impede evoluções no backend

Backend For Frontend Envios BFF Recebimentos Saldos Pedido de envio Envio Recebimento Depósito Liquidação

"GraphQL is a query language designed to build client applications by providing an intuitive and flexible syntax and system for describing their data requirements and interactions." (GraphQL spec: http://facebook.github.io/graphql/)

Schema é o modelo disponível para o frontend schema { query: Query } type Query { saldo(accountid: ID!): Float feed(accountid: ID!): [Envio Recebimento] } type Recebimento { data: Date valor: Float } enum StatusEnvio { PENDENTE, FALHA, SUCESSO } type Envio { data: Date valor: Float status: StatusEnvio } Envios Recebimentos Saldos Pedido de envio Envio Recebimento Depósito Liquidação

Query define os campos que o client precisa query feedscreen($accountid: ID!) { schema { query: Query } feed(accountid: $accountid) {... on Envio { data valor status }... on Recebimento { data valor } } } type Query { saldo(accountid: ID!): Float feed(accountid: ID!): [Envio Recebimento] } POST /api/query type Recebimento { data: Date valor: Float } enum StatusEnvio { PENDENTE, FALHA, SUCESSO } type Envio { data: Date valor: Float status: StatusEnvio }

Query define os campos que o client precisa Client v1 query($accountid: ID!) { feed(accountid: $accountid) { } saldo(accountid: $accountid) } schema { query: Query } Client v2 query($accountid: ID!) { feed(accountid: $accountid) { } saldodetalhado(accountid: $accountid) { } } type Query { saldo(accountid: ID!): Float feed(accountid: ID!): [Envio Recebimento] saldodetalhado(accountid: ID!): SaldoDetalhado }

Recapitulando Event-sourcing Comunicação assíncrona via Kafka Backend for Frontend com GraphQL

Obrigado! Gustavo Bicalho Maurício Verardo https://sou.nu/vagasnu