Aplicações MONOLÍTICAS, CLIENT/SERVER e MICROSERVIÇOS: Uma Breve História do Tempo

Há muito tempo atrás, na época do bit lascado e dos CPDs frios como geladeiras e imaculados como uma sala de cirurgia, surgiram as aplicações MONOLÍTICAS!

Em COBOL, NATURAL e outras linguagens menos conhecidas e mais esotéricas, o programador escrevia sua aplicação, que interagia com o usuário e conectava diretamente no banco de dados.

Esgueirando-se pela selva de pedra, pequenos animais admiravam a majestade dos grandes sistemas, invejando sua capacidade de processamento.

Para não ficarem para trás, desenvolveram a capacidade de se comunicar em rede – e surgiram novos animais: dBase, Clipper, FoxPro.

Ainda eram aplicações monolíticas, mas rodavam em PCs, onde alguns executavam a aplicação e um centralizador ficava com o banco de dados.

Os PCs evoluíram, criaram a GUI (vulgo interface gráfica) e evoluíram para novos sabores: Delphi.

Mas ainda monolíticas, cada PC onde era instalada a aplicação tinha de ter instalado também o DRIVER de comunicação com o banco de dados.

Atualizações de versão eram um pesadelo; orquestrar a parada de todos os usuários para que pegassem a versão mais atualizada da aplicação e garantir que apenas esta versão fosse utilizada por todos.

Em uma nova evolução, idealizaram a comunicação entre aplicações, onde uma seria responsável pela interação com o usuário (o cliente) e outra aplicação seria responsável pela comunicação com o banco de dados (o servidor): nascia o CLIENT/SERVER!

Os nomes CORBA, DCOM, ObjectBroker, MIDAS passaram a fazer parte do dia a dia dos desenvolvedores – e dos seus mais íntimos pesadelos!

Mas o mundo continuava evoluindo até que, em 94, um novo animal começou a andar por estes pastos: A INTERNET!

Ainda na infância, recém-saída dos laboratórios das universidades e aos poucos caminhando para se tornar uma plataforma comercial, era um brinquedo interessante – conteúdo institucional estático alimentado por eventuais conteúdos dinâmicos gerados via CGI (nada a ver com gráficos, mas com a Common Gateway Interface).

Mas alguns desenvolvedores perceberam que a internet poderia ser útil para a troca de informações, com sua capacidade de conectar redes distintas e a longa distância – faltava um protocolo comum: assim surgiu o SOAP e o XML!

O SOAP implementava a ideia de "mensagem", onde o envio de um dado poderia ser feito diretamente entre aplicações de diferentes plataformas e locais físicos, tudo via a novidade: WEB!

Mas o SOAP precisava de um formato aberto para que a mensagem pudesse ser envelopada e entendida facilmente: o XML!

O XML, apesar de algo confuso e denso, permitia que aplicações de diferentes desenvolvedores trocassem informações, bastando saber os campos e dados que tinham de ser enviados (independentemente da plataforma de origem e de destino) – era uma verdadeira revolução!

Mas, para tentar colocar ordem na casa e tentar facilitar a documentação das estruturas XML, surgiu o WSDL (Web Services Description Language), um descritivo que permitia aos desenvolvedores saber de antemão como o destino esperava a informação.

Apesar dos sistemas ainda serem, na sua maioria, monolíticos (localmente) e cliente-servidor (localmente), a semente da ideia de sistemas que pudessem ser separados geograficamente e ligados pela internet (web) já estava lançada.

A complexidade do SOAP e do WSDL, com suas inúmeras especificações e a verbosidade do XML, começou a mostrar suas desvantagens. A internet, agora uma adolescente irrequieta, exigia agilidade e leveza. Nesse cenário, um novo protocolo despontou, minimalista e elegante: o REST (Representational State Transfer).

Baseado no protocolo HTTP, já onipresente e bem compreendido, o REST utilizava verbos HTTP (GET, POST, PUT, DELETE) para interagir com recursos identificados por URIs. A troca de informações, antes presa ao rígido XML, ganhou flexibilidade com o JSON (JavaScript Object Notation), um formato leve, legível e de fácil manipulação.

A combinação REST e JSON simplificou drasticamente o desenvolvimento e a integração de sistemas. A necessidade de descrever detalhadamente cada serviço com WSDL tornou-se obsoleta; a própria URI e os verbos HTTP já indicavam a funcionalidade. Essa simplicidade impulsionou a criação de APIs (Application Programming Interfaces) RESTful, interfaces de acesso a funcionalidades de um sistema, expostas na web e prontas para serem consumidas por outras aplicações.

A popularização das APIs RESTful e a crescente demanda por escalabilidade e flexibilidade evoluíram para um novo animal nas pastagens: os microsserviços.

Em vez de gigantes monolíticos, os sistemas podem ser compostos por pequenos serviços independentes, cada um responsável por uma funcionalidade específica e comunicando-se entre si através de APIs RESTful.

Essa arquitetura permitiu o desenvolvimento e a implantação de cada microsserviço de forma independente, utilizando diferentes tecnologias e linguagens de programação, sem afetar os demais.

Isso matou os sistemas monolíticos? Não – mesmo hoje em dia, quando um desenvolvedor cria uma aplicação que se conecta diretamente com o banco de dados, ainda é, grosso modo, uma aplicação idêntica ao COBOL dos CPDs de décadas atrás.

Usar uma API já garante ser microsserviço? Não – mesmo hoje em dia, quando um desenvolvedor cria uma aplicação que se conecta a outra (ainda que via API), mas que esta final detém todas as regras de negócio e a comunicação com o banco de dados, acaba sendo uma aplicação cliente-servidor, só que usando API e AJAX.

Microsserviços implicam em: aplicações diferentes, no melhor estilo "caixa-preta", cada uma especializada – podendo ter seu próprio banco de dados e linguagem de programação.

Toda aplicação irá se beneficiar de microsserviços? Ainda é um pouco cedo para saber – afinal, desenvolver em microsserviços tem impactos e complexidades – que podem ser bem resolvidas por sistemas mais simples, monolíticos ou cliente/servidor.

Vamos ver que novos animais a evolução trará para estas paragens.

É bom saber da história e entender o porque de cada coisa e como foi a evolução até chegar no que é hoje.