Why one of the world's largest digital banks chose Clojure and Datomic
Neste vídeo, Lucas Cavalcanti, Distinguished Software Engineer e Senior Architect, e Edward Wible, co-fundador e primeiro CTO do Nubank, discutem as razões pelas quais o banco digital escolheu Clojure e Datomic como suas principais tecnologias de backend. Eles explicam a filosofia por trás da decisão, focando na escalabilidade, gerenciamento de complexidade e requisitos de auditoria de um banco.
A Escolha do Clojure
- Linguagem Principal: O Nubank utiliza Clojure como sua principal linguagem de backend. Também é empregado em scripts (como Babashka) e como linguagem de descrição para infraestrutura.
- Programação Funcional: A escolha foi influenciada pelo artigo "Out of the Tar Pit", que destaca que o estado mutável e os efeitos colaterais são as principais fontes de complexidade acidental em grandes sistemas. A programação funcional, dados imutáveis e o isolamento de efeitos colaterais nas bordas do sistema são técnicas eficazes para gerenciar essa complexidade.
- Experiências Anteriores: Edward Wible menciona que suas experiências anteriores com Java e Ruby resultaram em bases de código que "envelhecem como leite", tornando a adição de novas funcionalidades cada vez mais difícil e levando à reescrita ou criação de sistemas concorrentes.
- Ecossistema Java: Clojure, construído sobre a JVM, permite acesso a todo o ecossistema maduro de bibliotecas Java. Isso foi crucial para o Nubank, pois evitou a necessidade de desenvolver bibliotecas básicas do zero, permitindo que a equipe se concentrasse no problema de negócio em vez de na complexidade acidental da pilha de tecnologia.
A Escolha do Datomic
- Banco de Dados Imutável: A busca por aplicações reais dos princípios de imutabilidade levou Edward Wible ao Datomic, que se comercializa como um banco de dados imutável. Isso significa que, embora os dados mudem, o histórico dos estados anteriores é preservado.
- Requisitos Bancários: Para um banco, com suas rigorosas exigências de auditoria e regulamentação, a capacidade de "voltar no tempo" e examinar a evolução do estado dos dados, com snapshots imutáveis, foi vista como um "superpoder inacreditável".
- Vantagem Competitiva: Essa característica oferece uma vantagem significativa sobre bancos construídos com tecnologias legadas, que não conseguiriam oferecer tal capacidade a engenheiros, clientes e reguladores.
Implicações
- Foco no Negócio: A escolha de Clojure e Datomic permitiu ao Nubank focar na construção do negócio bancário, em vez de gastar tempo significativo com a linguagem, tecnologia, dependências ou problemas de performance. A tecnologia "simplesmente funcionou", liberando a equipe para resolver problemas de negócio.
- Escalabilidade e Manutenibilidade: As decisões tecnológicas foram tomadas com a visão de construir um banco que seria grande, evitando os problemas de escalabilidade e complexidade que outras tecnologias poderiam apresentar a longo prazo. A imutabilidade e a programação funcional são vistas como chaves para gerenciar a complexidade ao longo do tempo.
- Auditoria e Conformidade: A natureza imutável do Datomic é fundamental para atender aos requisitos de auditoria e regulamentação, fornecendo um registro histórico completo e inalterável de todas as transações e estados do sistema.
