Escrevendo Software que Escale, Além da Nuvem e Web
Bem, bem... parece que o mundo da programação gira em torno da web e da nuvem, né?
Acredite, ele não gira. E a própria web e nuvem são construídas em camadas muito mais baixas, com coisas que a maioria das pessoas que “escreve código para a nuvem” nunca viu e talvez nem queira ver. E tá tudo bem, tem espaço para todo mundo.
Mas não se engane, a verdade é simples: segurança, entrada e saída de dados, áudio, vídeo, matemática, gráficos, serialização, persistência, comunicação, compressão... Tudo isso é feito em alguma biblioteca obscura escrita antes da década 80. Em C ou Fortran. Ou algo do tipo,
Toda a moderna computação assíncrona, se resume basicamente a duas chamadas em C: epoll e pthread. E sim, Fortran! Achou que ele tinha morrido nos anos 70? Se nunca ouviu falar de BLAS (Basic Linear Algebra Subprograms) e LAPACK (Linear Algebra PACKage), agora sabe como são feitos os cálculos de machine learning com TensorFlow, PyTorch, ou qualquer outra biblioteca de IA bacaninha.
Mas, enfim, esse não é o assunto deste post. O ponto é que muitas dessas bibliotecas que mencionamos estão, de certa forma, paradas no tempo. Literalmente enxergam e interagem com o mundo como se ainda estivessem rodando em um processador single-core, com memória secundária de discos magnéticos, e, claro, alguns míseros megabytes de RAM.
Sim, você leu certo. A maioria dessas bibliotecas fundamentais ainda pensa que está vivendo nos anos 80. Elas não têm noção de múltiplos núcleos, SSD NVMe e 32 GB de RAM que você pode ter no seu laptop gamer. E quer saber o mais curioso? De alguma forma, isso funciona absurdamente bem. Esse software, otimizado para um mundo de processadores single-thread e discos que faziam mais barulho que a ventoinha da sua placa de vídeo, continua sendo a base de quase tudo que usamos hoje. Isso é incrível, mas também assustador. Mas como dizem por aí: "se não está quebrado, por que consertar?"
Mas, ei, estamos em 2024, e para novas infraestruturas, devemos e podemos fazer mais. Aqui está uma lista das ferramentas indispensáveis.
Comunicação: ZeroMQ (ZMQ)
Não precisa de middleware pesado para fazer o básico. O ZeroMQ entrega uma variedade de padrões de comunicação – publish/subscribe, request/reply, push/pull – de uma maneira que muitos protocolos só podem sonhar. ZMQ é como sockets, mas muito melhor. Ele permite a comunicação entre processos e máquinas de forma ágil e direta. Quer enviar dados com flexibilidade e velocidade entre dois sistemas em qualquer lugar do mundo ou até na mesma máquina? ZMQ é a resposta.
- Sabia que dá pra passar mensagens sem dar o deploy de um sistema inteiro né?
Serialização: Protocol Buffers (Protobuf)
Vamos falar de Protobuf. Enquanto você perde ciclos de CPU processando seu JSON pesado, o Protobuf já resolveu o problema. Criado pelo Google, ele permite que você serialize e compacte seus dados de forma absurdamente eficiente. Com Protobuf você ganha performance, redução de tamanho e um esquema claro. Se você precisa serializar grandes volumes de dados ou garantir alta performance, Protobuf é sua ferramenta.
- Precisa mesmo usar JSON para tudo?
Persistência: SQLite
Aqui vai uma verdade inquestionável: SQLite é o software mais usado no mundo. Ponto. E o segundo lugar nem chega perto. MacOS, iOS, Android, Python, PHP e todas as suas plataformas preferidas estão rodando dezenas ou até centenas de bancos de dados SQLite, enquanto você ainda não superou o mongo.
E se você ainda está pensando que o SQLite só serve para "projetinhos", pense de novo. Ao invés de pensar nele como substituto do Oracle, veja-o como a maneira mais sensata de persistir qualquer dado, localmente. Quer ver um exemplo curioso? O Grafana ingere dados de praticamente qualquer fonte imaginável, menos do SQLite... mas adivinha o que ele usa internamente para gerenciar suas próprias configurações? Sim, SQLite.
- Por que você ainda está escrevendo em arquivos?
Essas são as ferramentas indispensáveis para criar sistemas escaláveis e robustos nativas do século XXI, mas além da web e da cloud...Bom, alguém tem que construir as camadas de baixo, né? Então, cave fundo.
Um abraço e bons estudos.