A arte do desenvolvimento de software sempre possuiu um viés de mudança contínua ao longo dos anos dado ao surgimento de novas modalidades de negócios, com isso surgem novas definições de modelagem de dados e software buscando atender a um dos pilares da arquitetura, a performance. Nesta área o termo performance possui diferentes contextos, que vão desde o desempenho do time no desenvolvimento até o consumo equalizado dos recursos computacionais.
Na tentativa de alcançar o melhor desempenho de processamento e desenvolvimento ao mesmo tempo, muitas empresas estão adotando o uso da arquitetura de micro serviços, no qual consiste em dividir o software em peças menores, não somente ao nível de regras de negócios mas principalmente no nível de processamento de dados. No curso de IoT oferecido pela universidade Stanford, ‘micro serviços’ foi um dos termos mais utilizados para descrever diversos casos de uso deste contexto, porém em se tratando de IoT(Internet das coisas), a definição de micro é bem mais específica do que a praticada no mercado convencional. Em IoT, o termo micro está diretamente relacionado ao uso de funções ‘lambda’ e ‘fog computing’, ambos proporcionam a capacidade de interação e processamento de dados próximos aos dispositivos físicos sem manter o estado da operação. Para exemplificar, a tomada de decisão em veículos autônomos necessitam ser realizadas no menor intervalo de tempo possível a fim de evitar tragédias causadas pela latência na comunicação entre o automóvel e o servidor na nuvem.
Para adotar a arquitetura de micro serviços é necessário uma certa maturidade dos profissionais que irão modelar o software, por isso muitos desenvolvedores experientes recomendam o desenvolvimento no modelo tradicional (monolítico), principalmente para aqueles que estão implementando um projeto pela primeira vez, para então dividir o software de forma gradual em busca de melhorar a interoperabilidade, escalabilidade e entre outros atributos arquitetônicos. A tarefa de dividir o software requer um conhecimento profundo do ambiente onde o mesmo será hospedado, além do conhecimento nos conceitos básicos e um tanto avançados de redes de computadores. Uma vez divididos, os serviços passarão a comunicar-se por meio de sistemas de mensagerias que irão aumentar o tráfego de dados no sentido horizontal. Parâmetros como ‘jitter’ latência, localidade geográfica e a escolha dos protocolos de rede para a troca de mensagens (TCP/UDP) deverão ser categoricamente definidos antes mesmo de iniciar o desenvolvimento do(s) software(s) que irão compor o sistema.
A escolha do tipo de banco de dados e a modelagem do mesmo são fatores decisivos para o sucesso da implantação do modelo arquitetônico em questão, para isso é recomendado que os modelos de dados de entrada e saída de cada serviço estejam claras e individualizadas, desta forma diminuirá a interdependência, aumentando a escalabilidade da aplicação (principalmente na implantação). O livro ‘The Art of Unix Programming; RAYMOND, Eric S.’ debate sobre a filosofia do Unix e elenca nove regras que se encaixam perfeitamente no contexto de micro serviços, aqui estão algumas delas:
1. Pouco código é bonito
Quanto menor o serviço, mais fácil será para testar, manter e resolver erros.
2. Faça cada programa executar somente uma coisa bem feita
Cada serviço deverá ser responsável por somente uma função específica, com os dados de entrada e saída muito bem definidos diminuirá a complexidade e acoplamento do mesmo.
3. Construa protótipos o quanto antes
Desenvolvimento orientado a testes ou até mesmo a criação de provas de conceito são cruciais tanto para a validação do tipo de aplicação a ser desenvolvida, quanto para a implementação que irá para a produção.
4. Prefira portabilidade à eficiência.
A portabilidade está ligada diretamente à interoperabilidade e possui relação direta com os modelos de troca de mensagens entre os serviços.
É muito importante termos em mente que novas tecnologias sempre irão surgir, porém isso não implica a obrigatoriedade de migrar tudo o que foi desenvolvido, testado e utilizado ao longo dos anos puramente por vaidade. Novos métodos sempre surgirão para atender a novas demandas, o que em muitos casos aplicam-se somente a cenários específicos, e como iniciamos esta conversa caracterizando o desenvolvimento de software como uma arte, é preciso utilizar e conhecer as ferramentas certas para cada contexto e para cada artesão.
Por Yrineu Rodrigues, juazeirense, desenvolvedor de software. Atualmente morando em San Jose, CA
*Este texto é de inteira responsabilidade do autor e não reflete, necessariamente, a opinião do Revista Cariri