Introdução

O que é o Cloudsupport?

A Arquitetura de Referência Cloudsupport é um conjunto de tecnologias (linguagens de programação, bibliotecas, frameworks, ferramentas) e padrões técnicos (protocolos, regras, convenções) para o desenvolvimento de aplicações web e móveis baseadas em microsserviços. As linguagens principais são Java e JavaScript e os frameworks de base são Spring Boot, React e React Native.

Premissas

São premissas adotadas na elaboração da arquitetura Cloudsupport:

  1. Prover durabilidade e segurança nas aplicações desenvolvidas através da adoção de tecnologias padrões de mercado, maduras e com grande suporte da comunidade.

  2. Prover manutenibilidade por meio da definição de padrões técnicos e aplicação de boas práticas que viabilizam código-fonte de baixo acoplamento, alta coesão, modular e de boa legibilidade.

  3. Prover resiliência à rotatividade de profissionais, fruto da alta manutenibilidade, que facilita a compreensão do código-fonte em razão de sua homogeneidade entre os vários projetos desenvolvidos.

  4. Prover alta produtividade através da disponibilização de bibliotecas que fornecerão configurações padrões e componentes comuns às aplicações.

  5. Permitir alta disponibilidade com zero downtime durante a atualização de versões da aplicação através da integração com Kubernetes.

  6. Permitir escalabilidade pela adoção de patterns relacionados à abordagem de desenvolvimento por microsserviços.

  7. Reduzir custo com licenças atráves da utilização tecnologias opensource.

Escopo

O manual do desenvolvedor (a presente documentação) descreve os padrões técnicos, regras e convenções adotadas na arquitetura de referência Cloudsupport.

São oferecidos, adicionalmente, na forma de código-fonte opensource e gratuito:

  • Biblioteca cloudsupport, para backend, que contém os frameworks e módulos comuns aos microsserviços, com destaque a:

    • Complementos que facilitam o desenvolvimento de webservices.

    • Motor de execução de rotinas em background com suporte multihreading, padrão Produtor-Consumidor, agendamentos, monitoramento, gerenciamento via Java e via endpoints Actuator, persistência e controle de falhas.

    • Padrões e boas práticas para garantir um código-fonte documentado, coeso e bem encapsulado, em especial a abordagem de implementação orientada ao requisito funcional.

    • Integração com Kubernetes para provimento de alta disponibilidade.

  • Biblioteca react-cloudsupport, para frontend web, que contém os frameworks e módulos comuns aos aplicativos web, com destaque a:

    • Módulo para gerenciamento de configurações por ambiente (profile) em tempo de execução.

    • Complementos para facilitar a gestão de atualizações da aplicação client-side.

    • Integração OIDC, com suporte a renovação automática de JWT, injeção automática do token nas requisições para o backend via API nativa do JavaScript, configuração facilitada de redirects pós-login e pós-logoff do SSO OIDC e componentes React para proteger o acesso a páginas que requerem autenticação.

    • Componentes de UI e Hooks suplementares para maior produtividade.

  • Biblioteca react-native-cloudsupport, para frontend mobile, que contém os frameworks e módulos comuns aos aplicativos móveis (OS e Android), com destaque a:

    • Suite com mais de 50 componentes de UI, que inclui tipografia, campos de entrada, menus, overlays, mídias, gráficos, etc, com suporte a temas e framework de validação de formularios, extensível.
  • Biblioteca react-native-cloudsupport-storage, que oferece uma solução simplificada para persistência de dados em apps móveis.

  • Arquétipos ou templates, que são exemplos simples e funcionais de aplicações desenvolvidas em Cloudsupport. Podem ser clonados como ponto de partida para novos projetos.

Além disso, em consonância com os padrões estabelecidos nesta arquitetura, sugere-se:

  • Adotação do fluxo de trabalho baseado em branches, conforme capítulo Git Workflow desta documentação.

  • Infraestrutura e ambiente DevOps, baseados em Kubernetes.

  • Metodologia de desenvolvimento ágil.

Solicite o link de download das bibliotecas e arquétipos via bernardo.dias@gmail.com. Política de Privacidade e Termos de Uso são aplicados.

Tecnologias

São marcas importantes que proveem tecnologias alicerce da arquitetura:

Tecnologias

  • Spring Boot e suite de frameworks Spring, um dos maiores projetos enterprise para Java, mantido pela VMware.

  • Facebook React e React Native, frameworks de frontend mantidos pela Meta (anterior Facebook).

  • Google Kubernetes, ferramenta para orquestração de containers graduada pelo CNCF (Cloud Native Computing Foundation). O CNCF é um projeto membro da Linux Foundation criado por empresas como Google, Red Hat, Twitter, Intel, Cisco e IBM.

  • Uber Jaeger, uma solução de tracing distribuído para APM (Application Performance Management).

Todas as tecnologias utilizadas são opensource e permitem uso governamental e comercial.

A presente documentação é implementada utilizando o SSG (Static Site Generator) Jekyll, o mesmo utilizado por padrão no GitHub Pages e GitLab Pages, com tema adaptado do Docsy.

Visão Geral

Estes são os principais componentes de uma solução baseada em Cloudsupport:

Componentes

  • Common Resources: São os recursos corporativos comuns a todos os ambientes, seja produção, teste ou desenvolvimento. Sugere-se o GitLab como ferramenta de SCM e CI/CD, o Nexus Repository como repositório de bibliotecas compartilhadas (Maven e NPM) e de imagens Docker (Docker Registry).

  • Cluster Kubernetes: Podendo ser a distribuição oficial, composta pelo Calico como driver de rede e NGINX como proxy ingress. Outros clusters podem ser utilizados, como Amazon EKS, Google GKS e Azure AKS. Réplica do cluster pode existir para fins do ambiente de teste e homologação.

  • No ambiente do User estão as aplicações de frontend, sejam Web ou móveis.

  • DB: O banco de dados, preferencialmente clusterizado.

  • Storage: O storage, preferencialmente clusterizado.

  • Workstation: Estação de trabalho do desenvolvedor, composta essencialmente pelo IDE (Ambiente de Desenvolvimento Integrado).

As Gerações

O Websupport, geração anterior dessa arquitetura, foi base para muitos sistemas ao longo de quase duas décadas, sendo produzidos mais de 50 mil Pontos de Função com ele. Foi baseado em bibliotecas e tecnologias acertadas, as quais são mantidas até então. Entretanto, para novos projetos, indica-se a nova geração da arquitetura: Cloudsupport.

Abaixo tem-se um quadro resumo com as principais diferenças entre as duas gerações.

Característica Websupport Cloudsupport
Paradigma Monolítico Microsserviços
Camada de Persistência JPA (mapeamento) + Hibernate Apenas JPA
Camada de Negócio Spring e padrão “Feature Services” Spring e padrão “Feature Services”
Camada de Webservices Mapeamento por convenção, pouco aderente ao REST Mapeamento por anotações do Cloudsupport
Camada de Apresentação Web Server-side com JSF + PrimeFaces Client-side com React + opcionalmente Next.js e PrimeReact
Camada de Apresentação Mobile Não definda; requer implementação adicional de webservices React Native + suite de UI do Cloudsupport; backend nasce orientado a webservices
Trilha de Auditoria Via triggers de banco Via Spring JPA Auditing e, opcionalmente, complementada com triggers de banco
Processos Batch API da arquitetura com motor Spring Batch API da arquitetura com motor próprio e suporte a Processos Contínuos
Segurança Spring Security Spring Security com OIDC
Configuração por Ambiente Build-time (profiles Maven) Runtime (profiles Spring Boot + solução Cloudsupport para React)
Observabilidade Apenas logging Logging, tracing e métricas, integrados
Infraestrutura Recentemente adaptado para Kubernetes Projetado para Kubernetes
Escalabilidade Vertical Vertical e horizontal, com elasticidade
Alta Disponibilidade Limitada (requer sessão serializável + soluções de terceiros) Plena, 0 downtime em ambiente Kubernetes
Produtividade Esperada Alta Alta

Próximos Passos

O capítulo Como Começar contém as instruções para iniciar o projeto de aplicações usando o Cloudsupport.