SlideShare uma empresa Scribd logo
1 de 50
Baixar para ler offline
Arquitetando uma instituição financeira moderna
SOUTHEAST BRAZIL REGION FROM SPACE
CARTÃO DE CRÉDITO
Setembro de 2014
1,3
2,5
3,8
5,0
Set-14 Fev-15 Jul-15 Dez-15 Mai-16 Out-16 Mar-17 Ago-17 Jan-18 Jun-18
CRESCENDO RAPIDAMENTE NUM DOMÍNIO COMPLEXO
# de clientes (M)
Cartão de Crédito
Clientes Cartão
5M
Países
200
Pedidos únicos
20M
Compras
700M
Deploys por dia
10s
Microservices
200
Engineers
180
Clientes NuConta
2.5M
IMUTABILIDADE NA NOSSA STACK
LISP rodando na JVM
Funcional (opinionated), immutable
data structures
Simples, concisa, rápida,
concorrente
Ciclos rápidos de feedback no REPL
Tipagem opcional (schemas)
CLOJURE
DATOMIC
CLOUD
KAFKA
IMUTABILIDADE NA NOSSA STACK
para os dados
CLOJURE
DATOMIC
CLOUD
KAFKA
Sempre acumula
Transações ACID reificadas,
preserva o que mudou e quando
Queries usando estruturas de
dados (Datalog)
Cloud nativo com cache integrado
e leitura escalável
IMUTABILIDADE NA NOSSA STACK
Log particionado, persistente e
imutável
Desacoplamento lógico entre serviços
Desacoplamento temporal, útil para
cargas de trabalho assimétricas
Isolamento entre falhas e recuperação
(circuit breakers, dead letters)
Processamento financeiro em batches
expressado como um stream de
mensagens
CLOJURE
DATOMIC
CLOUD
KAFKA
IMUTABILIDADE NA NOSSA STACK
Infra as code (AWS)
Imutável após o provisionamento
(Docker)
Blue-Green deploys a nível de
serviço e de empresa
Kubernetes para velocidade de
deploy e escalabilidade
CLOJURE
DATOMIC
CLOUD
KAFKA
BENEFÍCIOS FUNCIONAIS
CONTRATAÇÃO
SELEÇÃO NATURAL POSITIVA
< 1 MÊS JÁ PRODUTIVOS
SIMPLICIDADE
FUNÇÕES PURAS PEQUENAS
FÁCIL DE DESACOPLAR
CONSISTÊNCIA
COMPOSIÇÃO DE UM NÚMERO
PEQUENO DE FUNCIONALIDADES
IDIOMÁTICAS DA LINGUAGEM
Nubank HQ
São Paulo, Brazil
Diplomat architecture (Ports & adapters enhanced by Nubank)
Lógica de negócio em funções puras (verde)
Controller com lógica que liga o fluxo entre as portas (amarelo)
Uma Port é uma das entradas da aplicação (azul)
Um adapter é a ponte entre a port e o controller (vermelho)
ARQUITETURA DO CARTÃO DE CRÉDITO
Greenfield MVP
Anti-fraud
Collections
General
Ledger
Phone + Chat
Authorizer
Securitization ETL
Credit
Scoring
Customer
Acquisition
(KYC)
Credit Limits
Logistics
Card
Origination
Billing
Installment
Purchases
FX
Backoffice
(CRM)
Notification
Chargeback
Bill Pay
Infosec
Rewards +
Merchants
Marketing
NUCONTA
Outubro de 2017
13
ARQUITETURA NÚCLEO BANCÁRIO + CARTÃO DE CRÉDITO
INFRAESTRUTURA
Rewards +
Merchants
Marketing
Investment
Management
Treasury +
Risk
Realtime
Transfers
Lending +
Interest
Rates
Tax
Anti-fraud
Collections
General
Ledger
Phone + Chat
Authorizer
Securitization ETL
Customer
Acquisition
(KYC)
Credit
Scoring
Logistics
Card
Origination
Billing
Installment
Purchases
Credit Limits
FX
Backoffice
(CRM)
Notification
Chargeback
Bill Pay
Infosec
AUTORIZAÇÃO DE COMPRAS
Customer
Acquisition
(KYC)
Credit
Scoring
Logistics
Anti-fraud
Card
Origination
Authorizer Billing
Installment
Purchases
Credit Limits
Investment
Management
FX
Collections
Treasury +
Risk
Rewards +
Merchants
Realtime
Transfers
Backoffice
(CRM)
Lending +
Interest
Rates
Notification
General
Ledger
Securitization
Marketing
Chargeback
Tax
Bill Pay
Phone + Chat
Infosec
ETL
INFRAESTRUTURA
LOJA
ADQUIRENTE
BANDEIRA
EMISSOR
CADEIA DE AUTORIZAÇÃO DE COMPRAS
CLIENTE
BANDEIRA
EMISSOR
AUTORIZAÇÃO NO EMISSOR
MASTERCARD INTERFACE DEVICE
AUTHORIZER
AUTORIZAÇÃO NO EMISSOR
1 Estabelece uma conexão
2 Recebe pedidos de autorização
MASTERCARD INTERFACE DEVICE
AUTHORIZER
AUTORIZAÇÃO NO EMISSOR: ISO-8583
ISO-8583 Binary Message
HARDWARE SECURITY MODULE
MASTERCARD INTERFACE DEVICE
AUTHORIZER
AUTORIZAÇÃO NO EMISSOR: REQUISITOS
ISO-8583 Binary Message
HARDWARE SECURITY MODULE (HSM)
1.Altamente disponível

2.Infraestrutura física
LAYOUT DOS SERVIÇOS DE AUTORIZAÇÃO
fraud fraud
HSMHSM
crypto crypto
• Poucos serviços altamente
disponíveis
• No mesmo local da
máquina da MasterCard
• Isolada: fluxo de
autorização não precisa de
comunicação com a nuvem
• Ativo-ativo para
recuperação de desastres
Thrift
Finagle Server
authorizer authorizer authorizer authorizer
Finagle Client
router
ISO 8583
router
Proprietary
protocol
“neverland”
(nubank datacenter)
kafka
“the real world”
(AWS VPC)
100+ microservices
KAFKA COMO A LIGAÇÃO ENTRE OS AMBIENTES
CONTABILIDADE DE PARTIDAS DOBRADAS
Customer
Acquisition
(KYC)
Credit
Scoring
Logistics
Anti-fraud
Card
Origination
Authorizer Billing
Installment
Purchases
Credit Limits
Investment
Management
FX
Collections
Treasury +
Risk
Rewards +
Merchants
Realtime
Transfers
Backoffice
(CRM)
Lending +
Interest
Rates
Notification
General
Ledger
Securitization
Marketing
Chargeback
Tax
Bill Pay
Phone + Chat
Infosec
ETL
INFRAESTRUTURA
Compras Pagamentos Contestações Juros Faturas
Devemos…
autorizar a compra?
bloquear o cartão?
cobrar juros?
LÓGICA DE NEGÓCIO DEPENDE DE DADOS DE VÁRIOS SERVIÇOS
Double Entry
DOUBLE ENTRY: O MODELO
ENTRADA CONTA CRÉDITO
CONTA DÉBITO
$
= 𝚺SALDO $
O saldo de uma conta é a soma de
seus créditos e débitos
O balancete do cliente é uma
função cumulativa do histórico
completo do cliente
DOUBLE ENTRY: ROTEIROS CONTÁBEIS
ENTRADA CONTA CRÉDITO
CONTA DÉBITO
$
NOVA-COMPRA
NOVO-PAGAMENTO
…
ENTRADA 2 CONTA CRÉDITO
CONTA DÉBITO
$
ENTRADA 3 CONTA CRÉDITO
CONTA DÉBITO
$
MOVIMENTAÇÃO
(def unsettled-purchase
[{:entry/debit-account :book-account-type.asset/unsettled
:entry/credit-account :book-account-type.liability/unsettled-counterparty
:entry/amount #'transaction-amount
:entry/post-date #'produced-date}
{:entry/debit-account :book-account-type.liability/current-limit-counterparty
:entry/credit-account :book-account-type.asset/current-limit
:entry/amount #'transaction-amount
:entry/post-date #'produced-date}])
DOUBLE ENTRY: EXEMPLO DE MOVIMENTAÇÃO
ordem importa (i.e. movimentações não são comutativas)

eventos atrasados (ex. um pagamento feito há 3 dias)

Correção de invariantes
Vazão de escrita
DOUBLE ENTRY: DESAFIOS
(def loss-property
(prop/for-all [events (gen/vector (gen/one-of [gen-adjustment gen-payment gen-tx])
1 10)
initial-state (->> rbh/initial-state-gen
(gen/such-that (comp not #{:late :pre-loss} :state)))
loss-event (tg/make-generator {:event (s/enum :pre-loss
:credit-loss
:id-fraud-loss)
:post-date LocalDate
:produced-at LocalDateTime})]
(check-properties events initial-state loss-event)))
DOUBLE ENTRY: TESTES GENERATIVOS DE INVARIANTES
INFRAESTRUTURA TOLERANTE A FALHAS, COM SHARDS
Customer
Acquisition
(KYC)
Credit
Scoring
Logistics
Anti-fraud
Card
Origination
Authorizer Billing
Installment
Purchases
Credit Limits
Investment
Management
FX
Collections
Treasury +
Risk
Rewards +
Merchants
Realtime
Transfers
Backoffice
(CRM)
Lending +
Interest
Rates
Notification
General
Ledger
Securitization
Marketing
Chargeback
Tax
Bill Pay
Phone + Chat
Infosec
ETL
INFRAESTRUTURA
GARGALOS DE ESCALABILIDADE
# de clientes (M)
Cartão de Crédito
1. limites de vazão do
banco de dados causam
throttling de escrita
2.latência de batches
impactam a experiência
do usuário

1,3
2,5
3,8
5,0
Set-14 Fev-15 Jul-15 Dez-15 Mai-16 Out-16 Mar-17 Ago-17 Jan-18 Jun-18
Necessidade de dividir a carga
Dados de clientes estão espalhados
entre vários serviços
Interações entre clientes são mínimas
É seguro particionar a base de
usuários
PLANEJANDO PARA ESCALAR
Escritas no banco eram o pior
dos gargalos
Opção: particionar
horizontalmente cada base de
dados
Mudar cada um dos serviços
para rotear escritas e leituras
pro shard apropriado
db shard s0 db shard s1 db shard s2
OPÇÃO #1: PARTITION SERVICE DATABASES
backend service
Esforço gigante pra mudar todos
os serviços
Não resolve os gargalos que não
são do banco de dados
Risco de poluir a lógica de
negócio com código de
infraestrutura
OPÇÃO #1: PROBLEMAS
OPÇÃO #2: UNIDADES DE ESCALA
SERVIÇO 1 SERVIÇO 2
SERVIÇO 3
SERVIÇO 1 SERVIÇO 2
SERVIÇO 3
SERVIÇO 1 SERVIÇO 2
SERVIÇO 3
shard S0 shard S1 shard s2 . . .
OPÇÃO #2: UNIDADES DE ESCALA + ROTEAMENTO GLOBAL
shard S1 shard s2
SERVIÇO 4 SERVIÇO 5
global
SERVIÇO 6
compra depósito
shard S0
SERVIÇO 1 SERVIÇO 2
SERVIÇO 3
SERVIÇO 1 SERVIÇO 2
SERVIÇO 3
SERVIÇO 1 SERVIÇO 2
SERVIÇO 3
OPTION #2: HIPERMÍDIA PARA INTERAÇÕES
shard S1
global
login
{"_links":
{"account": “https://s1-service2…”}}
{"_links":
{"account": “https://s1-service3…”}}
SERVIÇO 4 SERVIÇO 5 SERVIÇO 6
SERVIÇO 1 SERVIÇO 2
SERVIÇO 3
LIÇÕES APRENDIDAS AO ESCALAR
funcionam na prática, mas foi muito difícil mover
incrementalmente nessa direção
UNIDADES FUNCIONAM
sharding foi um projeto complexo
crescimento exponencial derrota intuição: use
modelos reais de crescimento para planejar
COMEÇAR CEDO
geram uma flexibilidade muito importante para o
roteamento dos shards
MENSAGERIA E HIPERMÍDIA
tornou o processo muito mais viável
INFRA IMUTÁVEL AUTOMATIZADA
lógica de negócio pode criar hot spots
reativação de leads antigos lotou o s0
CUIDADO COM HOTSPOTS
é estupidamente difícil (a gente conseguiu
praticamente evitar)
DIVISÃO DE DADOS EXISTENTES
PADRÕES DE TOLERÂNCIA A FALHAS
Padrões simples para isolamento das falhas e sua recuperação
CLIENT
HTTP
SERVER
SERVER
SERVER
SERVER
FINAGLE
PADRÕES DE TOLERÂNCIA A FALHAS
Padrões simples para isolamento das falhas e sua recuperação
PRODUCER
CONSUMER
1 Publica
2 Consome
TOPIC
DEADLETTER-TOPIC
MORTICIAN
4 Salva
5 Republica
DEADLETTERS CIRCUIT BREAKERS
SERVICE
1 Consome
3 Circuit breaker
ativa!
3 Exception!
Produz deadletter
2 Serviço
indisponível
4 Pausa o consumo
KAFKA
ETL + O AMBIENTE ANALÍTICO
Customer
Acquisition
(KYC)
Credit
Scoring
Logistics
Anti-fraud
Card
Origination
Authorizer Billing
Installment
Purchases
Credit Limits
Investment
Management
FX
Collections
Treasury +
Risk
Rewards +
Merchants
Realtime
Transfers
Backoffice
(CRM)
Lending +
Interest
Rates
Notification
General
Ledger
Securitization
Marketing
Chargeback
Tax
Bill Pay
Phone + Chat
Infosec
ETL
INFRAESTRUTURA
01 NOV 10:00
Robô 437aae3 aprova R$3 mil de limite01 NOV 11:00
Compra Mastercard, Starbucks, R$10009 NOV 08:00
Atendente aumenta o limite para R$5 mil15 NOV 15:00
Cliente bloqueia o cartão15 NOV 17:05
Cliente entra na lista de espera do cartão
DATOMIC PRIMER: EVENTOS ATRAVÉS DO TEMPO
01 NOV 10:00
01 NOV 11:00
09 NOV 08:00
15 NOV 15:00
15 NOV 17:05
[<customer> :customer/id #uuid “b2c90…” 1]
[<account> :account/customer <customer> 2]
[<account> :account/limit 3000 2]
[<card> :card/account <account> 2]
[<card> :card/status :card.status/active 2]
[<purchase> :purchase/card <card> 3]
[<purchase> :purchase/amount 100 3]
[<purchase> :purchase/merchant “Starbucks” 3]
[<account> :account/limit 5000 4]
[<account> :account/limit 3000 4]
[<card> :card/status :card.status/blocked 5]
[<card> :card/status :card.status/active 5]
DATOMIC PRIMER: FATOS ATRAVÉS DO TEMPO
entidade atributo valor tx
“The DAG”
Funções puras (Scala SQL)
Recebe datasets, retorna
dataset
Metadados (schema,
partitions, path on S3,
performance)
Roda no Spark
DB1
Log S0
DB1
Log S1
DB2
Log S0
Dataset
Series
Kafka
topics
Datomic
DB logs
EXTRACTOR
Captura mudanças
Agrupamento
Conversão de formatos
Auto-correção
S3
contract 1
contract 2
dataset 1
dataset 2
policy
model
Logs do Datomic e do Kafka são extraídos para nosso data lake (S3) em
tempo real
Schemas analíticos (“contratos”) gerados a partir das entidades do Datomic
Shards recombina dos em uma única tabela lógica por entidade incremental
EXTRACT, TRANSFORM, LOAD
EXEMPLO ETL: MARGEM DE CONTRIBUIÇÃO
do double entry
do ERP
estamos lucrando?
TRANSFERÊNCIAS EM TEMPO REAL
Customer
Acquisition
(KYC)
Credit
Scoring
Logistics
Anti-fraud
Card
Origination
Authorizer Billing
Installment
Purchases
Credit Limits
Investment
Management
FX
Collections
Treasury +
Risk
Rewards +
Merchants
Realtime
Transfers
Backoffice
(CRM)
Lending +
Interest
Rates
Notification
General
Ledger
Securitization
Marketing
Chargeback
Tax
Bill Pay
Phone + Chat
Infosec
ETL
INFRASTRUCTURE
TRANSFERÊNCIAS EM TEMPO REAL
1 Pedido de
transferência
In-shard
Transfers 3 Inicia transferência
Investments
2 Liquida investimento
Global
Transfers
4 Processa
transferência
(global)
Ledger
4 Débitos +
créditos SPB Client
EXTERNO
5 Kafka <> SOAP
5
INTERNO
Roteamento de
Shard
RSFN (XML)
SITRAF (TED)
Centenas de
bancos
6 Liquidação em
tempo real
RSFN (XML)
SITRAF (TED)
Centenas de
bancos
6 Liquidação em
tempo real
SISTEMA DE PAGAMENTOS BRASILEIRO
Modelo Hub and spoke para pagamentos nacionais
SPB Client
5 Kafka <> SOAP
Liquidação bruta, irrevogável e incondicional
de quantias ilimitadas
~R$1 trilhão transferidos por dia
06:30 - 18:30 dias úteis
Protocolo XML proprietário, mensageria IBM
MQ Series
Veja: https://www.bcb.gov.br/htms/novaPaginaSPB/VisaoGeralDoSPB.asp
RESUMO DO MODELO DE DOMÍNIO
Customer
Acquisition
(KYC)
Credit
Scoring
Logistics
Anti-fraud
Card
Origination
Authorizer Billing
Installment
Purchases
Credit Limits
Investment
Management
FX
Collections
Treasury +
Risk
Rewards +
Merchants
Realtime
Transfers
Backoffice
(CRM)
Lending +
Interest
Rates
Notification
General
Ledger
Securitization
Marketing
Chargeback
Tax
Bill Pay
Phone + Chat
Infosec
ETL
INFRASTRUCTURA
Estamos contratando
https://sou.nu/vagasnu
São Paulo, Brazil
Obrigado!
Lucas Cavalcanti
@lucascs
https://sou.nu/vagasnu

Mais conteúdo relacionado

Mais procurados

소프트웨어 개발 트랜드 및 MSA (마이크로 서비스 아키텍쳐)의 이해
소프트웨어 개발 트랜드 및 MSA (마이크로 서비스 아키텍쳐)의 이해소프트웨어 개발 트랜드 및 MSA (마이크로 서비스 아키텍쳐)의 이해
소프트웨어 개발 트랜드 및 MSA (마이크로 서비스 아키텍쳐)의 이해Terry Cho
 
Working with JSON Data in PostgreSQL vs. MongoDB
Working with JSON Data in PostgreSQL vs. MongoDBWorking with JSON Data in PostgreSQL vs. MongoDB
Working with JSON Data in PostgreSQL vs. MongoDBScaleGrid.io
 
Moving from SQL Server to MongoDB
Moving from SQL Server to MongoDBMoving from SQL Server to MongoDB
Moving from SQL Server to MongoDBNick Court
 
How Financial Services Organizations Use MongoDB
How Financial Services Organizations Use MongoDBHow Financial Services Organizations Use MongoDB
How Financial Services Organizations Use MongoDBMongoDB
 
ITLC HN 14 - Bizweb Microservices Architecture
ITLC HN 14  - Bizweb Microservices ArchitectureITLC HN 14  - Bizweb Microservices Architecture
ITLC HN 14 - Bizweb Microservices ArchitectureIT Expert Club
 
우아한테크세미나-우아한멀티모듈
우아한테크세미나-우아한멀티모듈우아한테크세미나-우아한멀티모듈
우아한테크세미나-우아한멀티모듈용근 권
 
[pgday.Seoul 2022] PostgreSQL with Google Cloud
[pgday.Seoul 2022] PostgreSQL with Google Cloud[pgday.Seoul 2022] PostgreSQL with Google Cloud
[pgday.Seoul 2022] PostgreSQL with Google CloudPgDay.Seoul
 
Real-time Analytics with Presto and Apache Pinot
Real-time Analytics with Presto and Apache PinotReal-time Analytics with Presto and Apache Pinot
Real-time Analytics with Presto and Apache PinotXiang Fu
 
Advanced Model Inferencing leveraging Kubeflow Serving, KNative and Istio
Advanced Model Inferencing leveraging Kubeflow Serving, KNative and IstioAdvanced Model Inferencing leveraging Kubeflow Serving, KNative and Istio
Advanced Model Inferencing leveraging Kubeflow Serving, KNative and IstioAnimesh Singh
 
Time series Analytics - a deep dive into ADX Azure Data Explorer @Data Saturd...
Time series Analytics - a deep dive into ADX Azure Data Explorer @Data Saturd...Time series Analytics - a deep dive into ADX Azure Data Explorer @Data Saturd...
Time series Analytics - a deep dive into ADX Azure Data Explorer @Data Saturd...Riccardo Zamana
 
BigQuery implementation
BigQuery implementationBigQuery implementation
BigQuery implementationSimon Su
 
이벤트 기반 분산 시스템을 향한 여정
이벤트 기반 분산 시스템을 향한 여정이벤트 기반 분산 시스템을 향한 여정
이벤트 기반 분산 시스템을 향한 여정Arawn Park
 
Custom DevOps Monitoring System in MelOn (with InfluxDB + Telegraf + Grafana)
Custom DevOps Monitoring System in MelOn (with InfluxDB + Telegraf + Grafana)Custom DevOps Monitoring System in MelOn (with InfluxDB + Telegraf + Grafana)
Custom DevOps Monitoring System in MelOn (with InfluxDB + Telegraf + Grafana)Seungmin Yu
 
Netflix Recommendations Using Spark + Cassandra (Prasanna Padmanabhan & Roopa...
Netflix Recommendations Using Spark + Cassandra (Prasanna Padmanabhan & Roopa...Netflix Recommendations Using Spark + Cassandra (Prasanna Padmanabhan & Roopa...
Netflix Recommendations Using Spark + Cassandra (Prasanna Padmanabhan & Roopa...DataStax
 
Raffi Krikorian, Twitter Timelines at Scale
Raffi Krikorian, Twitter Timelines at ScaleRaffi Krikorian, Twitter Timelines at Scale
Raffi Krikorian, Twitter Timelines at ScaleMariano Amartino
 
深入淺出 AWS 大數據工具
深入淺出 AWS 大數據工具深入淺出 AWS 大數據工具
深入淺出 AWS 大數據工具Amazon Web Services
 
(BDT403) Best Practices for Building Real-time Streaming Applications with Am...
(BDT403) Best Practices for Building Real-time Streaming Applications with Am...(BDT403) Best Practices for Building Real-time Streaming Applications with Am...
(BDT403) Best Practices for Building Real-time Streaming Applications with Am...Amazon Web Services
 
PolygonID Zero-Knowledge Identity Web2 & Web3
PolygonID Zero-Knowledge Identity Web2 & Web3PolygonID Zero-Knowledge Identity Web2 & Web3
PolygonID Zero-Knowledge Identity Web2 & Web3SSIMeetup
 

Mais procurados (20)

소프트웨어 개발 트랜드 및 MSA (마이크로 서비스 아키텍쳐)의 이해
소프트웨어 개발 트랜드 및 MSA (마이크로 서비스 아키텍쳐)의 이해소프트웨어 개발 트랜드 및 MSA (마이크로 서비스 아키텍쳐)의 이해
소프트웨어 개발 트랜드 및 MSA (마이크로 서비스 아키텍쳐)의 이해
 
Working with JSON Data in PostgreSQL vs. MongoDB
Working with JSON Data in PostgreSQL vs. MongoDBWorking with JSON Data in PostgreSQL vs. MongoDB
Working with JSON Data in PostgreSQL vs. MongoDB
 
Moving from SQL Server to MongoDB
Moving from SQL Server to MongoDBMoving from SQL Server to MongoDB
Moving from SQL Server to MongoDB
 
How Financial Services Organizations Use MongoDB
How Financial Services Organizations Use MongoDBHow Financial Services Organizations Use MongoDB
How Financial Services Organizations Use MongoDB
 
ITLC HN 14 - Bizweb Microservices Architecture
ITLC HN 14  - Bizweb Microservices ArchitectureITLC HN 14  - Bizweb Microservices Architecture
ITLC HN 14 - Bizweb Microservices Architecture
 
우아한테크세미나-우아한멀티모듈
우아한테크세미나-우아한멀티모듈우아한테크세미나-우아한멀티모듈
우아한테크세미나-우아한멀티모듈
 
[pgday.Seoul 2022] PostgreSQL with Google Cloud
[pgday.Seoul 2022] PostgreSQL with Google Cloud[pgday.Seoul 2022] PostgreSQL with Google Cloud
[pgday.Seoul 2022] PostgreSQL with Google Cloud
 
Real-time Analytics with Presto and Apache Pinot
Real-time Analytics with Presto and Apache PinotReal-time Analytics with Presto and Apache Pinot
Real-time Analytics with Presto and Apache Pinot
 
Advanced Model Inferencing leveraging Kubeflow Serving, KNative and Istio
Advanced Model Inferencing leveraging Kubeflow Serving, KNative and IstioAdvanced Model Inferencing leveraging Kubeflow Serving, KNative and Istio
Advanced Model Inferencing leveraging Kubeflow Serving, KNative and Istio
 
Time series Analytics - a deep dive into ADX Azure Data Explorer @Data Saturd...
Time series Analytics - a deep dive into ADX Azure Data Explorer @Data Saturd...Time series Analytics - a deep dive into ADX Azure Data Explorer @Data Saturd...
Time series Analytics - a deep dive into ADX Azure Data Explorer @Data Saturd...
 
BigQuery implementation
BigQuery implementationBigQuery implementation
BigQuery implementation
 
이벤트 기반 분산 시스템을 향한 여정
이벤트 기반 분산 시스템을 향한 여정이벤트 기반 분산 시스템을 향한 여정
이벤트 기반 분산 시스템을 향한 여정
 
Custom DevOps Monitoring System in MelOn (with InfluxDB + Telegraf + Grafana)
Custom DevOps Monitoring System in MelOn (with InfluxDB + Telegraf + Grafana)Custom DevOps Monitoring System in MelOn (with InfluxDB + Telegraf + Grafana)
Custom DevOps Monitoring System in MelOn (with InfluxDB + Telegraf + Grafana)
 
Netflix Recommendations Using Spark + Cassandra (Prasanna Padmanabhan & Roopa...
Netflix Recommendations Using Spark + Cassandra (Prasanna Padmanabhan & Roopa...Netflix Recommendations Using Spark + Cassandra (Prasanna Padmanabhan & Roopa...
Netflix Recommendations Using Spark + Cassandra (Prasanna Padmanabhan & Roopa...
 
Raffi Krikorian, Twitter Timelines at Scale
Raffi Krikorian, Twitter Timelines at ScaleRaffi Krikorian, Twitter Timelines at Scale
Raffi Krikorian, Twitter Timelines at Scale
 
深入淺出 AWS 大數據工具
深入淺出 AWS 大數據工具深入淺出 AWS 大數據工具
深入淺出 AWS 大數據工具
 
BigQuery for Beginners
BigQuery for BeginnersBigQuery for Beginners
BigQuery for Beginners
 
Neo4J 사용
Neo4J 사용Neo4J 사용
Neo4J 사용
 
(BDT403) Best Practices for Building Real-time Streaming Applications with Am...
(BDT403) Best Practices for Building Real-time Streaming Applications with Am...(BDT403) Best Practices for Building Real-time Streaming Applications with Am...
(BDT403) Best Practices for Building Real-time Streaming Applications with Am...
 
PolygonID Zero-Knowledge Identity Web2 & Web3
PolygonID Zero-Knowledge Identity Web2 & Web3PolygonID Zero-Knowledge Identity Web2 & Web3
PolygonID Zero-Knowledge Identity Web2 & Web3
 

Semelhante a Arquitetando uma instituição financeira moderna

Autorização de transações no Nubank
Autorização de transações no NubankAutorização de transações no Nubank
Autorização de transações no NubankLuiz Alberto Hespanha
 
TDC2018FLN | Trilha Arquitetura - Architecting for Resilience
TDC2018FLN | Trilha Arquitetura - Architecting for ResilienceTDC2018FLN | Trilha Arquitetura - Architecting for Resilience
TDC2018FLN | Trilha Arquitetura - Architecting for Resiliencetdc-globalcode
 
Architecting For Resilience
Architecting For ResilienceArchitecting For Resilience
Architecting For ResilienceFabiano Modos
 
WSO2 Novo Modelo de Subscrições e Produtos 2017
WSO2 Novo Modelo de Subscrições e Produtos 2017WSO2 Novo Modelo de Subscrições e Produtos 2017
WSO2 Novo Modelo de Subscrições e Produtos 2017Edgar Silva
 
140916 Conferência Blockchain RTM - Maurício Alban-Salas - Itaú Unibanco
140916 Conferência Blockchain RTM - Maurício Alban-Salas - Itaú Unibanco140916 Conferência Blockchain RTM - Maurício Alban-Salas - Itaú Unibanco
140916 Conferência Blockchain RTM - Maurício Alban-Salas - Itaú UnibancoRTM
 
Como criar um banco digital
Como criar um banco digitalComo criar um banco digital
Como criar um banco digitalAtar B2B
 
Blockchain - O Futuro da Economia P2P
Blockchain - O Futuro da Economia P2PBlockchain - O Futuro da Economia P2P
Blockchain - O Futuro da Economia P2PAndré Ferreira
 
Como o iFood usou CQRS para escalar a contabilização de +30M de pedidos por m...
Como o iFood usou CQRS para escalar a contabilização de +30M de pedidos por m...Como o iFood usou CQRS para escalar a contabilização de +30M de pedidos por m...
Como o iFood usou CQRS para escalar a contabilização de +30M de pedidos por m...Danilo Pereira De Luca
 
Arquitetura orientada a eventos em ambientes complexos tdc
Arquitetura orientada a eventos em ambientes complexos tdcArquitetura orientada a eventos em ambientes complexos tdc
Arquitetura orientada a eventos em ambientes complexos tdcPaula Santana
 
High availability e Disaster Recovery é o seguro de vida de todo DBA
High availability e Disaster Recovery é o seguro de vida de todo DBAHigh availability e Disaster Recovery é o seguro de vida de todo DBA
High availability e Disaster Recovery é o seguro de vida de todo DBALuiz Henrique Garetti Rosário
 
Introdução Splunk Brasil
Introdução Splunk BrasilIntrodução Splunk Brasil
Introdução Splunk BrasilSplunk
 
HACKBCBR - RIPPEX - Rafael Pereira e Jan Schnurle
HACKBCBR - RIPPEX - Rafael Pereira e Jan SchnurleHACKBCBR - RIPPEX - Rafael Pereira e Jan Schnurle
HACKBCBR - RIPPEX - Rafael Pereira e Jan SchnurleVictor Cunha
 
HACKBCBR - RIPPEX - Rafael Pereira e Jan Schnurle
HACKBCBR - RIPPEX - Rafael Pereira e Jan SchnurleHACKBCBR - RIPPEX - Rafael Pereira e Jan Schnurle
HACKBCBR - RIPPEX - Rafael Pereira e Jan SchnurleVictor Cunha
 
Fundamentos de Sistemas de Informacao - Aula 14
Fundamentos de Sistemas de Informacao - Aula 14Fundamentos de Sistemas de Informacao - Aula 14
Fundamentos de Sistemas de Informacao - Aula 14Ismar Silveira
 
Quebrando o monolito com microserviços - TDC 2017
Quebrando o monolito com microserviços - TDC 2017Quebrando o monolito com microserviços - TDC 2017
Quebrando o monolito com microserviços - TDC 2017Rodrigo Stefani Domingues
 
Cellere - Fiscalizacao Inteligente.pdf
Cellere - Fiscalizacao Inteligente.pdfCellere - Fiscalizacao Inteligente.pdf
Cellere - Fiscalizacao Inteligente.pdfCellia2
 
[Workshops RoadShow ECBR - Edição Recife 2019] Cases e diferenciais da Plataf...
[Workshops RoadShow ECBR - Edição Recife 2019] Cases e diferenciais da Plataf...[Workshops RoadShow ECBR - Edição Recife 2019] Cases e diferenciais da Plataf...
[Workshops RoadShow ECBR - Edição Recife 2019] Cases e diferenciais da Plataf...E-Commerce Brasil
 
Banner fernando & everton 03-11
Banner   fernando & everton 03-11Banner   fernando & everton 03-11
Banner fernando & everton 03-11Everton Jean Moro
 

Semelhante a Arquitetando uma instituição financeira moderna (20)

Autorização de transações no Nubank
Autorização de transações no NubankAutorização de transações no Nubank
Autorização de transações no Nubank
 
TDC2018FLN | Trilha Arquitetura - Architecting for Resilience
TDC2018FLN | Trilha Arquitetura - Architecting for ResilienceTDC2018FLN | Trilha Arquitetura - Architecting for Resilience
TDC2018FLN | Trilha Arquitetura - Architecting for Resilience
 
Architecting For Resilience
Architecting For ResilienceArchitecting For Resilience
Architecting For Resilience
 
WSO2 Novo Modelo de Subscrições e Produtos 2017
WSO2 Novo Modelo de Subscrições e Produtos 2017WSO2 Novo Modelo de Subscrições e Produtos 2017
WSO2 Novo Modelo de Subscrições e Produtos 2017
 
140916 Conferência Blockchain RTM - Maurício Alban-Salas - Itaú Unibanco
140916 Conferência Blockchain RTM - Maurício Alban-Salas - Itaú Unibanco140916 Conferência Blockchain RTM - Maurício Alban-Salas - Itaú Unibanco
140916 Conferência Blockchain RTM - Maurício Alban-Salas - Itaú Unibanco
 
Como criar um banco digital
Como criar um banco digitalComo criar um banco digital
Como criar um banco digital
 
Blockchain - O Futuro da Economia P2P
Blockchain - O Futuro da Economia P2PBlockchain - O Futuro da Economia P2P
Blockchain - O Futuro da Economia P2P
 
Event source com Kafka em uma Fintech
Event source com Kafka em uma FintechEvent source com Kafka em uma Fintech
Event source com Kafka em uma Fintech
 
Como o iFood usou CQRS para escalar a contabilização de +30M de pedidos por m...
Como o iFood usou CQRS para escalar a contabilização de +30M de pedidos por m...Como o iFood usou CQRS para escalar a contabilização de +30M de pedidos por m...
Como o iFood usou CQRS para escalar a contabilização de +30M de pedidos por m...
 
Arquitetura orientada a eventos em ambientes complexos tdc
Arquitetura orientada a eventos em ambientes complexos tdcArquitetura orientada a eventos em ambientes complexos tdc
Arquitetura orientada a eventos em ambientes complexos tdc
 
High availability e Disaster Recovery é o seguro de vida de todo DBA
High availability e Disaster Recovery é o seguro de vida de todo DBAHigh availability e Disaster Recovery é o seguro de vida de todo DBA
High availability e Disaster Recovery é o seguro de vida de todo DBA
 
Introdução Splunk Brasil
Introdução Splunk BrasilIntrodução Splunk Brasil
Introdução Splunk Brasil
 
HACKBCBR - RIPPEX - Rafael Pereira e Jan Schnurle
HACKBCBR - RIPPEX - Rafael Pereira e Jan SchnurleHACKBCBR - RIPPEX - Rafael Pereira e Jan Schnurle
HACKBCBR - RIPPEX - Rafael Pereira e Jan Schnurle
 
HACKBCBR - RIPPEX - Rafael Pereira e Jan Schnurle
HACKBCBR - RIPPEX - Rafael Pereira e Jan SchnurleHACKBCBR - RIPPEX - Rafael Pereira e Jan Schnurle
HACKBCBR - RIPPEX - Rafael Pereira e Jan Schnurle
 
Fundamentos de Sistemas de Informacao - Aula 14
Fundamentos de Sistemas de Informacao - Aula 14Fundamentos de Sistemas de Informacao - Aula 14
Fundamentos de Sistemas de Informacao - Aula 14
 
Event-Driven SAGAs com Kafka
Event-Driven SAGAs com Kafka Event-Driven SAGAs com Kafka
Event-Driven SAGAs com Kafka
 
Quebrando o monolito com microserviços - TDC 2017
Quebrando o monolito com microserviços - TDC 2017Quebrando o monolito com microserviços - TDC 2017
Quebrando o monolito com microserviços - TDC 2017
 
Cellere - Fiscalizacao Inteligente.pdf
Cellere - Fiscalizacao Inteligente.pdfCellere - Fiscalizacao Inteligente.pdf
Cellere - Fiscalizacao Inteligente.pdf
 
[Workshops RoadShow ECBR - Edição Recife 2019] Cases e diferenciais da Plataf...
[Workshops RoadShow ECBR - Edição Recife 2019] Cases e diferenciais da Plataf...[Workshops RoadShow ECBR - Edição Recife 2019] Cases e diferenciais da Plataf...
[Workshops RoadShow ECBR - Edição Recife 2019] Cases e diferenciais da Plataf...
 
Banner fernando & everton 03-11
Banner   fernando & everton 03-11Banner   fernando & everton 03-11
Banner fernando & everton 03-11
 

Mais de Lucas Cavalcanti dos Santos

Mais de Lucas Cavalcanti dos Santos (6)

Complex made bearable Clojure conj 2019
Complex made bearable Clojure conj 2019Complex made bearable Clojure conj 2019
Complex made bearable Clojure conj 2019
 
Microservices in Clojure
Microservices in ClojureMicroservices in Clojure
Microservices in Clojure
 
Building a powerful double entry accounting system
Building a powerful double entry accounting systemBuilding a powerful double entry accounting system
Building a powerful double entry accounting system
 
Testando a integracao entre serviços - Agile Brazil 2014
Testando a integracao entre serviços - Agile Brazil 2014Testando a integracao entre serviços - Agile Brazil 2014
Testando a integracao entre serviços - Agile Brazil 2014
 
O poder da linguagem Ruby e as suas consequências
O poder da linguagem Ruby e as suas consequênciasO poder da linguagem Ruby e as suas consequências
O poder da linguagem Ruby e as suas consequências
 
Otimizacao prematura-agile-brazil-12
Otimizacao prematura-agile-brazil-12Otimizacao prematura-agile-brazil-12
Otimizacao prematura-agile-brazil-12
 

Arquitetando uma instituição financeira moderna

  • 1. Arquitetando uma instituição financeira moderna SOUTHEAST BRAZIL REGION FROM SPACE
  • 3. 1,3 2,5 3,8 5,0 Set-14 Fev-15 Jul-15 Dez-15 Mai-16 Out-16 Mar-17 Ago-17 Jan-18 Jun-18 CRESCENDO RAPIDAMENTE NUM DOMÍNIO COMPLEXO # de clientes (M) Cartão de Crédito Clientes Cartão 5M Países 200 Pedidos únicos 20M Compras 700M Deploys por dia 10s Microservices 200 Engineers 180 Clientes NuConta 2.5M
  • 4. IMUTABILIDADE NA NOSSA STACK LISP rodando na JVM Funcional (opinionated), immutable data structures Simples, concisa, rápida, concorrente Ciclos rápidos de feedback no REPL Tipagem opcional (schemas) CLOJURE DATOMIC CLOUD KAFKA
  • 5. IMUTABILIDADE NA NOSSA STACK para os dados CLOJURE DATOMIC CLOUD KAFKA Sempre acumula Transações ACID reificadas, preserva o que mudou e quando Queries usando estruturas de dados (Datalog) Cloud nativo com cache integrado e leitura escalável
  • 6. IMUTABILIDADE NA NOSSA STACK Log particionado, persistente e imutável Desacoplamento lógico entre serviços Desacoplamento temporal, útil para cargas de trabalho assimétricas Isolamento entre falhas e recuperação (circuit breakers, dead letters) Processamento financeiro em batches expressado como um stream de mensagens CLOJURE DATOMIC CLOUD KAFKA
  • 7. IMUTABILIDADE NA NOSSA STACK Infra as code (AWS) Imutável após o provisionamento (Docker) Blue-Green deploys a nível de serviço e de empresa Kubernetes para velocidade de deploy e escalabilidade CLOJURE DATOMIC CLOUD KAFKA
  • 8. BENEFÍCIOS FUNCIONAIS CONTRATAÇÃO SELEÇÃO NATURAL POSITIVA < 1 MÊS JÁ PRODUTIVOS SIMPLICIDADE FUNÇÕES PURAS PEQUENAS FÁCIL DE DESACOPLAR CONSISTÊNCIA COMPOSIÇÃO DE UM NÚMERO PEQUENO DE FUNCIONALIDADES IDIOMÁTICAS DA LINGUAGEM Nubank HQ São Paulo, Brazil
  • 9. Diplomat architecture (Ports & adapters enhanced by Nubank) Lógica de negócio em funções puras (verde) Controller com lógica que liga o fluxo entre as portas (amarelo) Uma Port é uma das entradas da aplicação (azul) Um adapter é a ponte entre a port e o controller (vermelho)
  • 10. ARQUITETURA DO CARTÃO DE CRÉDITO Greenfield MVP Anti-fraud Collections General Ledger Phone + Chat Authorizer Securitization ETL Credit Scoring Customer Acquisition (KYC) Credit Limits Logistics Card Origination Billing Installment Purchases FX Backoffice (CRM) Notification Chargeback Bill Pay Infosec Rewards + Merchants Marketing
  • 12. ARQUITETURA NÚCLEO BANCÁRIO + CARTÃO DE CRÉDITO INFRAESTRUTURA Rewards + Merchants Marketing Investment Management Treasury + Risk Realtime Transfers Lending + Interest Rates Tax Anti-fraud Collections General Ledger Phone + Chat Authorizer Securitization ETL Customer Acquisition (KYC) Credit Scoring Logistics Card Origination Billing Installment Purchases Credit Limits FX Backoffice (CRM) Notification Chargeback Bill Pay Infosec
  • 13. AUTORIZAÇÃO DE COMPRAS Customer Acquisition (KYC) Credit Scoring Logistics Anti-fraud Card Origination Authorizer Billing Installment Purchases Credit Limits Investment Management FX Collections Treasury + Risk Rewards + Merchants Realtime Transfers Backoffice (CRM) Lending + Interest Rates Notification General Ledger Securitization Marketing Chargeback Tax Bill Pay Phone + Chat Infosec ETL INFRAESTRUTURA
  • 16. MASTERCARD INTERFACE DEVICE AUTHORIZER AUTORIZAÇÃO NO EMISSOR 1 Estabelece uma conexão 2 Recebe pedidos de autorização
  • 17. MASTERCARD INTERFACE DEVICE AUTHORIZER AUTORIZAÇÃO NO EMISSOR: ISO-8583 ISO-8583 Binary Message HARDWARE SECURITY MODULE
  • 18. MASTERCARD INTERFACE DEVICE AUTHORIZER AUTORIZAÇÃO NO EMISSOR: REQUISITOS ISO-8583 Binary Message HARDWARE SECURITY MODULE (HSM) 1.Altamente disponível
 2.Infraestrutura física
  • 19. LAYOUT DOS SERVIÇOS DE AUTORIZAÇÃO fraud fraud HSMHSM crypto crypto • Poucos serviços altamente disponíveis • No mesmo local da máquina da MasterCard • Isolada: fluxo de autorização não precisa de comunicação com a nuvem • Ativo-ativo para recuperação de desastres Thrift Finagle Server authorizer authorizer authorizer authorizer Finagle Client router ISO 8583 router Proprietary protocol
  • 20. “neverland” (nubank datacenter) kafka “the real world” (AWS VPC) 100+ microservices KAFKA COMO A LIGAÇÃO ENTRE OS AMBIENTES
  • 21. CONTABILIDADE DE PARTIDAS DOBRADAS Customer Acquisition (KYC) Credit Scoring Logistics Anti-fraud Card Origination Authorizer Billing Installment Purchases Credit Limits Investment Management FX Collections Treasury + Risk Rewards + Merchants Realtime Transfers Backoffice (CRM) Lending + Interest Rates Notification General Ledger Securitization Marketing Chargeback Tax Bill Pay Phone + Chat Infosec ETL INFRAESTRUTURA
  • 22. Compras Pagamentos Contestações Juros Faturas Devemos… autorizar a compra? bloquear o cartão? cobrar juros? LÓGICA DE NEGÓCIO DEPENDE DE DADOS DE VÁRIOS SERVIÇOS Double Entry
  • 23. DOUBLE ENTRY: O MODELO ENTRADA CONTA CRÉDITO CONTA DÉBITO $ = 𝚺SALDO $ O saldo de uma conta é a soma de seus créditos e débitos O balancete do cliente é uma função cumulativa do histórico completo do cliente
  • 24. DOUBLE ENTRY: ROTEIROS CONTÁBEIS ENTRADA CONTA CRÉDITO CONTA DÉBITO $ NOVA-COMPRA NOVO-PAGAMENTO … ENTRADA 2 CONTA CRÉDITO CONTA DÉBITO $ ENTRADA 3 CONTA CRÉDITO CONTA DÉBITO $ MOVIMENTAÇÃO
  • 25. (def unsettled-purchase [{:entry/debit-account :book-account-type.asset/unsettled :entry/credit-account :book-account-type.liability/unsettled-counterparty :entry/amount #'transaction-amount :entry/post-date #'produced-date} {:entry/debit-account :book-account-type.liability/current-limit-counterparty :entry/credit-account :book-account-type.asset/current-limit :entry/amount #'transaction-amount :entry/post-date #'produced-date}]) DOUBLE ENTRY: EXEMPLO DE MOVIMENTAÇÃO
  • 26. ordem importa (i.e. movimentações não são comutativas)
 eventos atrasados (ex. um pagamento feito há 3 dias)
 Correção de invariantes Vazão de escrita DOUBLE ENTRY: DESAFIOS
  • 27. (def loss-property (prop/for-all [events (gen/vector (gen/one-of [gen-adjustment gen-payment gen-tx]) 1 10) initial-state (->> rbh/initial-state-gen (gen/such-that (comp not #{:late :pre-loss} :state))) loss-event (tg/make-generator {:event (s/enum :pre-loss :credit-loss :id-fraud-loss) :post-date LocalDate :produced-at LocalDateTime})] (check-properties events initial-state loss-event))) DOUBLE ENTRY: TESTES GENERATIVOS DE INVARIANTES
  • 28. INFRAESTRUTURA TOLERANTE A FALHAS, COM SHARDS Customer Acquisition (KYC) Credit Scoring Logistics Anti-fraud Card Origination Authorizer Billing Installment Purchases Credit Limits Investment Management FX Collections Treasury + Risk Rewards + Merchants Realtime Transfers Backoffice (CRM) Lending + Interest Rates Notification General Ledger Securitization Marketing Chargeback Tax Bill Pay Phone + Chat Infosec ETL INFRAESTRUTURA
  • 29. GARGALOS DE ESCALABILIDADE # de clientes (M) Cartão de Crédito 1. limites de vazão do banco de dados causam throttling de escrita 2.latência de batches impactam a experiência do usuário
 1,3 2,5 3,8 5,0 Set-14 Fev-15 Jul-15 Dez-15 Mai-16 Out-16 Mar-17 Ago-17 Jan-18 Jun-18
  • 30. Necessidade de dividir a carga Dados de clientes estão espalhados entre vários serviços Interações entre clientes são mínimas É seguro particionar a base de usuários PLANEJANDO PARA ESCALAR
  • 31. Escritas no banco eram o pior dos gargalos Opção: particionar horizontalmente cada base de dados Mudar cada um dos serviços para rotear escritas e leituras pro shard apropriado db shard s0 db shard s1 db shard s2 OPÇÃO #1: PARTITION SERVICE DATABASES backend service
  • 32. Esforço gigante pra mudar todos os serviços Não resolve os gargalos que não são do banco de dados Risco de poluir a lógica de negócio com código de infraestrutura OPÇÃO #1: PROBLEMAS
  • 33. OPÇÃO #2: UNIDADES DE ESCALA SERVIÇO 1 SERVIÇO 2 SERVIÇO 3 SERVIÇO 1 SERVIÇO 2 SERVIÇO 3 SERVIÇO 1 SERVIÇO 2 SERVIÇO 3 shard S0 shard S1 shard s2 . . .
  • 34. OPÇÃO #2: UNIDADES DE ESCALA + ROTEAMENTO GLOBAL shard S1 shard s2 SERVIÇO 4 SERVIÇO 5 global SERVIÇO 6 compra depósito shard S0 SERVIÇO 1 SERVIÇO 2 SERVIÇO 3 SERVIÇO 1 SERVIÇO 2 SERVIÇO 3 SERVIÇO 1 SERVIÇO 2 SERVIÇO 3
  • 35. OPTION #2: HIPERMÍDIA PARA INTERAÇÕES shard S1 global login {"_links": {"account": “https://s1-service2…”}} {"_links": {"account": “https://s1-service3…”}} SERVIÇO 4 SERVIÇO 5 SERVIÇO 6 SERVIÇO 1 SERVIÇO 2 SERVIÇO 3
  • 36. LIÇÕES APRENDIDAS AO ESCALAR funcionam na prática, mas foi muito difícil mover incrementalmente nessa direção UNIDADES FUNCIONAM sharding foi um projeto complexo crescimento exponencial derrota intuição: use modelos reais de crescimento para planejar COMEÇAR CEDO geram uma flexibilidade muito importante para o roteamento dos shards MENSAGERIA E HIPERMÍDIA tornou o processo muito mais viável INFRA IMUTÁVEL AUTOMATIZADA lógica de negócio pode criar hot spots reativação de leads antigos lotou o s0 CUIDADO COM HOTSPOTS é estupidamente difícil (a gente conseguiu praticamente evitar) DIVISÃO DE DADOS EXISTENTES
  • 37. PADRÕES DE TOLERÂNCIA A FALHAS Padrões simples para isolamento das falhas e sua recuperação CLIENT HTTP SERVER SERVER SERVER SERVER FINAGLE
  • 38. PADRÕES DE TOLERÂNCIA A FALHAS Padrões simples para isolamento das falhas e sua recuperação PRODUCER CONSUMER 1 Publica 2 Consome TOPIC DEADLETTER-TOPIC MORTICIAN 4 Salva 5 Republica DEADLETTERS CIRCUIT BREAKERS SERVICE 1 Consome 3 Circuit breaker ativa! 3 Exception! Produz deadletter 2 Serviço indisponível 4 Pausa o consumo KAFKA
  • 39. ETL + O AMBIENTE ANALÍTICO Customer Acquisition (KYC) Credit Scoring Logistics Anti-fraud Card Origination Authorizer Billing Installment Purchases Credit Limits Investment Management FX Collections Treasury + Risk Rewards + Merchants Realtime Transfers Backoffice (CRM) Lending + Interest Rates Notification General Ledger Securitization Marketing Chargeback Tax Bill Pay Phone + Chat Infosec ETL INFRAESTRUTURA
  • 40. 01 NOV 10:00 Robô 437aae3 aprova R$3 mil de limite01 NOV 11:00 Compra Mastercard, Starbucks, R$10009 NOV 08:00 Atendente aumenta o limite para R$5 mil15 NOV 15:00 Cliente bloqueia o cartão15 NOV 17:05 Cliente entra na lista de espera do cartão DATOMIC PRIMER: EVENTOS ATRAVÉS DO TEMPO
  • 41. 01 NOV 10:00 01 NOV 11:00 09 NOV 08:00 15 NOV 15:00 15 NOV 17:05 [<customer> :customer/id #uuid “b2c90…” 1] [<account> :account/customer <customer> 2] [<account> :account/limit 3000 2] [<card> :card/account <account> 2] [<card> :card/status :card.status/active 2] [<purchase> :purchase/card <card> 3] [<purchase> :purchase/amount 100 3] [<purchase> :purchase/merchant “Starbucks” 3] [<account> :account/limit 5000 4] [<account> :account/limit 3000 4] [<card> :card/status :card.status/blocked 5] [<card> :card/status :card.status/active 5] DATOMIC PRIMER: FATOS ATRAVÉS DO TEMPO entidade atributo valor tx
  • 42. “The DAG” Funções puras (Scala SQL) Recebe datasets, retorna dataset Metadados (schema, partitions, path on S3, performance) Roda no Spark DB1 Log S0 DB1 Log S1 DB2 Log S0 Dataset Series Kafka topics Datomic DB logs EXTRACTOR Captura mudanças Agrupamento Conversão de formatos Auto-correção S3 contract 1 contract 2 dataset 1 dataset 2 policy model Logs do Datomic e do Kafka são extraídos para nosso data lake (S3) em tempo real Schemas analíticos (“contratos”) gerados a partir das entidades do Datomic Shards recombina dos em uma única tabela lógica por entidade incremental EXTRACT, TRANSFORM, LOAD
  • 43. EXEMPLO ETL: MARGEM DE CONTRIBUIÇÃO do double entry do ERP estamos lucrando?
  • 44. TRANSFERÊNCIAS EM TEMPO REAL Customer Acquisition (KYC) Credit Scoring Logistics Anti-fraud Card Origination Authorizer Billing Installment Purchases Credit Limits Investment Management FX Collections Treasury + Risk Rewards + Merchants Realtime Transfers Backoffice (CRM) Lending + Interest Rates Notification General Ledger Securitization Marketing Chargeback Tax Bill Pay Phone + Chat Infosec ETL INFRASTRUCTURE
  • 45.
  • 46. TRANSFERÊNCIAS EM TEMPO REAL 1 Pedido de transferência In-shard Transfers 3 Inicia transferência Investments 2 Liquida investimento Global Transfers 4 Processa transferência (global) Ledger 4 Débitos + créditos SPB Client EXTERNO 5 Kafka <> SOAP 5 INTERNO Roteamento de Shard RSFN (XML) SITRAF (TED) Centenas de bancos 6 Liquidação em tempo real
  • 47. RSFN (XML) SITRAF (TED) Centenas de bancos 6 Liquidação em tempo real SISTEMA DE PAGAMENTOS BRASILEIRO Modelo Hub and spoke para pagamentos nacionais SPB Client 5 Kafka <> SOAP Liquidação bruta, irrevogável e incondicional de quantias ilimitadas ~R$1 trilhão transferidos por dia 06:30 - 18:30 dias úteis Protocolo XML proprietário, mensageria IBM MQ Series Veja: https://www.bcb.gov.br/htms/novaPaginaSPB/VisaoGeralDoSPB.asp
  • 48. RESUMO DO MODELO DE DOMÍNIO Customer Acquisition (KYC) Credit Scoring Logistics Anti-fraud Card Origination Authorizer Billing Installment Purchases Credit Limits Investment Management FX Collections Treasury + Risk Rewards + Merchants Realtime Transfers Backoffice (CRM) Lending + Interest Rates Notification General Ledger Securitization Marketing Chargeback Tax Bill Pay Phone + Chat Infosec ETL INFRASTRUCTURA