Академический Документы
Профессиональный Документы
Культура Документы
no Nubank
Consumindo servios dos anos 80
com tecnologias atuais
Lucas Cavalcanti
Luiz Hespanha
@lucascs @luiz_hespanha
Contexto
Microservios
~120 servios
~80 desenvolvedores
~10 squads
3,5 anos
ARQUITETURA GERAL NUBANK
Tecnologias
Datomic
MOTIVAO
processo de compra com carto de crdito
Adquirente
Estabelecimento Bandeira
Link fsico
Cliente Processadora
Emissor
Mquinas fsicas
DESAFIOS
Mquinas fsicas
Protocolos no convencionais
Comunicao via Socket
Hardware de Criptografia
Baixa latncia
SO PAULO, BRASIL
MQUINAS FSICAS
Processadora
Prod S0
DMZ
MIP
Prod S1
switch
VPC
COMUNICAES
processo de compra com carto de crdito
Adquirente
Estabelecimento Bandeira
???
Cliente Processadora
Emissor
Kafka + JSON
Padro ISO que define o formato da
mensagem e o fluxo de comunicao
ISO 8583
ISO 8583
ISO 8583
SCODEC
Scala combinator library for working with binary data
scodec.org
SCODEC
//
SCODEC
de02 :: de03 :: de04 :: de05 :: de06 :: de07 :: de09 :: de10 :: de11 :: de12 ::
de13 :: de14 :: de15 :: de16 :: de18 :: de20 :: de22 :: de23 :: de26 :: de28 ::
de32 :: de33 :: de35 :: de37 :: de38 :: de39 :: de41 :: de42 :: de43 :: de44 ::
de45 :: de47 :: de48 :: de49 :: de50 :: de51 :: de52 :: de53 :: de54 :: de55 ::
se20 = Some(CardholderVerificationMethod("P")),
No cliente/servidor
Multiplex
Depois de 7s no adianta mais responder
FINAGLE
A Protocol-Agnostic RPC System
FINAGLE
Funcionalidades
Pool de conexo
Deteco de falhas
Retentativas
Circuit Breaker
Timeout
Load Balancer
Diversas monitorias
FINAGLE
Como funciona
Req
Cliente Future[Rep] Servidor
FINAGLE
Protocolos
FINAGLE
Protocolo ISO8583
pipeline
}
(defn decoder []
(proxy [OneToOneDecoder] []
(defn encoder []
(decode [ctx chan value]
(proxy [OneToOneEncoder] []
(let [counter (cmd/<-str value 4)
(encode [ctx chan value]
cmd (keyword (cmd/<-str value 2))
(if-let [[cmd params] (when (vector? value) value)]
return-code (cmd/<-str value 2)]
(-> (ChannelBuffers/dynamicBuffer)
(cond
(cmd/->str 4 "0001")
(#{"00" "02"} return-code)
(cmd/->str 2 (name cmd))
[:ok (cmd/decode value cmd)]
(cmd/encode cmd params))
value))))
(#{"01"} return-code)
[:nok])))))
FINAGLE
Futuros
Callbacks:
Router Router
Finagle Client Finagle Client
Thrift Thrift
Thrift Thrift
HSM HSM
BANCO DE DADOS
BANCO DE DADOS NA MEMRIA
Representao
Kafka topic
Mquinas fsicas
Protocolos no convencionais
Comunicao via Socket
Hardware de Criptografia
Baixa latncia
SO PAULO, BRASIL
TEMOS VAGAS
Devops
Engenheiro de Software