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
:
-
Prover
durabilidade
esegurança
nas aplicações desenvolvidas através da adoção de tecnologias padrões de mercado, maduras e com grande suporte da comunidade. -
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. -
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. -
Prover alta
produtividade
através da disponibilização de bibliotecas que fornecerão configurações padrões e componentes comuns às aplicações. -
Permitir
alta disponibilidade
com zero downtime durante a atualização de versões da aplicação através da integração com Kubernetes. -
Permitir
escalabilidade
pela adoção de patterns relacionados à abordagem de desenvolvimento por microsserviços. -
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:
-
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 peloCNCF
(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
:
-
Common Resources
: São os recursos corporativos comuns a todos os ambientes, seja produção, teste ou desenvolvimento. Sugere-se oGitLab
como ferramenta deSCM
eCI/CD
, oNexus Repository
como repositório de bibliotecas compartilhadas (Maven
eNPM
) e de imagens Docker (Docker Registry
). -
Cluster
Kubernetes
: Podendo ser a distribuição oficial, composta peloCalico
como driver de rede eNGINX
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
.