WEB3DEV

Cover image for Repensando arquitetura de software com web3
Daniel Cukier
Daniel Cukier

Posted on • Atualizado em

Repensando arquitetura de software com web3

Quem desenvolve software há muitos anos sabe que (quase) todo software possui um (bom) banco de dados por trás. Se você quer, de alguma maneira, guardar o estado de uma aplicação, vai precisar de um banco de dados.

Um site de e-commerce tem, inevitavelmente, uma tabela de pedidos, uma tabela de clientes, uma tabela de produtos e por aí vai. Se o seu software foi feito para uma rede de hospitais, provavelmente terá um banco de dados de pacientes, outro de médicos e talvez um de consultas, prontuários ou exames.

Mesmo que hoje aplicações em blockchain já estejam disseminadas, muita gente da engenharia de software ainda resiste ao dizer que "blockchain não tem nada de especial, é só um tipo diferente de banco de dados". Esses críticos têm toda razão! Uma blockchain não é nada além de um banco de dados. Fato. Mas vamos olhar a evolução dos sistemas de bancos de dados em retrospectiva?

Quando eu comecei a programar, no início da década de 90, na era pré-internet, os sistemas eram feitos utilizando bancos de dados locais. Pra quem lembra, Foxpro, MSAccess ou DBase são alguns exemplos. Os dados eram salvos em arquivos locais e cópias de segurança eram feitas em disquetes ou fitas magnéticas. Nessa épica época, apenas grandes empresas como bancos, grandes indústrias ou governos utilizavam sistemas de bancos de dados em rede. Também era preciso ter acesso a computadores proibitivamente caros para rodar essas aplicações.

No início dos anos 2000 começamos a usar banco de dados relacionais. Nessa época, os dados não ficavam mais armazenados no mesmo computador que rodava a aplicação, mas sim em servidores remotos. Para consultar ou alterar os dados nesses bancos de dados utilizávamos conectores de rede e a linguagem padrão SQL. Os dados eram armazenados em formato de tabelas, ou seja, possuíam um esquema de dados pré-definido em colunas (parecido com o que temos em uma planilha de Excel). Esse padrão de banco de dados é usado até hoje em vários tipos de aplicação. Os mais famosos são MySQL, Postgres, Oracle, Microsoft SQL, entre outros.

Com o passar do tempo e a evolução da Internet, esse tipo de bancos de dados começou a demonstrar suas limitações. A quantidade de pessoas online cresceu exponencialmente e, com isso, mais demanda por processamento e armazenamento de dados. Quem já trabalhou com MySQL, por exemplo, sabe o que acontece quando a tabela de dados começa a chegar na casa das centenas de milhões ou bilhões de linhas: backups demoram horas ou dias, consultas travam, inserções e exclusões de dados se tornam lentas. Ou seja, para o volume de dados da Internet, não rola.

Então, o que seria possível fazer em tais situações? Foi quando emergiram os bancos de dados NoSQL, como Cassandra, MongoDB, CouchDB, entre outros. Diferentemente dos bancos de dados relacionais, os NoSQL não possuem um esquema fixo de dados. Isso proporciona flexibilidade para manipular diferentes tipos de dados, de acordo com a necessidade. Além disso, esses bancos de dados foram projetados para suportar uma grande quantidade de dados distribuídos em muitos servidores, tornando-os mais resilientes a falhas e proporcionando alta escalabilidade.

Agora, estamos vivenciando a era do Web3 e das blockchains, que estão se tornando cada vez mais importantes no cenário atual da engenharia de software. Mas o que é o Web3 e como ele está redefinindo a maneira como pensamos e construímos software?

O termo "Web3" refere-se à próxima geração da Internet, onde a tecnologia blockchain, a criptografia e os contratos inteligentes estão no centro. Em comparação com a Web2, que é centralizada e dominada por algumas grandes empresas, a Web3 é descentralizada, permitindo que os usuários mantenham o controle de seus próprios dados e transações.

Com a ascensão da Web3 e da blockchain, os desenvolvedores enfrentam um novo conjunto de desafios e oportunidades. Vamos considerar algumas mudanças práticas na vida de um desenvolvedor quando se passa de bancos de dados centralizados para descentralizados:

Imutabilidade: Em bancos de dados tradicionais, as atualizações e exclusões são comuns. No entanto, em blockchains, uma vez que um registro (ou transação) é adicionado, ele não pode ser alterado. Esta característica exige uma reestruturação do pensamento – um erro em um contrato inteligente, por exemplo, pode ser permanente se não houver mecanismos de atualização embutidos.

Transações Transparentes: Com a blockchain, todas as transações são transparentes para todos os participantes da rede. Para os desenvolvedores, isso significa que privacidade e confidencialidade devem ser tratadas de maneira diferente, muitas vezes usando técnicas de ofuscação ou camadas de privacidade, como zk-SNARKs.

Consistência vs. Disponibilidade: Bancos de dados centralizados normalmente seguem o teorema CAP, que equilibra consistência, disponibilidade e tolerância a partição. Com blockchains, devido à natureza descentralizada, a consistência pode ser sacrificada em favor da disponibilidade e segurança.

Interoperabilidade: Em bancos de dados tradicionais, migrar ou integrar-se entre diferentes sistemas pode ser um desafio. Com blockchains, como Ethereum, vemos a ascensão de padrões (por exemplo, tokens ERC-20 ou ERC-721) que permitem a interoperabilidade entre diferentes aplicativos e serviços.

Exemplos práticos de aplicações no novo paradigma:

Finanças Descentralizadas (DeFi): Plataformas como Uniswap ou Aave que permitem empréstimos, trocas e outras operações financeiras sem intermediários. Para os desenvolvedores, isso implica em lidar com contratos inteligentes, garantindo a segurança das transações e otimizando para custos de gás.

Arte e Colecionáveis: CryptoKitties ou NBA Top Shot, onde ativos digitais únicos são comercializados na blockchain. Para os desenvolvedores, o desafio é garantir a autenticidade e a singularidade desses ativos, usando padrões como ERC-721 (tokens não fungíveis).

Identidade Digital: Projetos como o uPort oferecem soluções de identidade digital auto-soberanas. Os desenvolvedores, neste caso, estão criando sistemas que permitem que os usuários provem sua identidade sem renunciar à posse de seus dados pessoais.

Os problemas que essas inovações buscam resolver variam desde a falta de transparência em sistemas financeiros tradicionais até a monopolização dos dados do usuário por grandes empresas. Ao se mover para um paradigma descentralizado, os desenvolvedores estão na vanguarda, moldando um futuro em que o poder e o controle retornam ao usuário.

Concluindo, ao nos aventurarmos na era da Web3, não estamos apenas adotando uma nova tecnologia. Estamos redefinindo a estrutura fundamental de como os aplicativos são criados e interagem. Enquanto as possibilidades são vastas, é imperativo que os desenvolvedores estejam equipados com um entendimento sólido desta nova arquitetura, suas implicações e suas melhores práticas.

Latest comments (0)