Monografia apresentada ao Curso de Ciência da Computação da Universidade Federal de Ouro Preto como parte dos requisitos para obtenção do título de Bacharel em Ciência da Computação. Monografia apresentada ao Curso de Ciência da Computação da Universidade Federal de Ouro Preto como requisito parcial para obtenção do título de Bacharel em Ciência da Computação. Primeiramente, gostaria de agradecer à Universidade Federal de Ouro Preto, por todo apoio e ensino de qualidade, e ao meu orientador Carlos Frederico, que sempre acreditou em mim.
Neste trabalho foi implementado o design de uma plataforma de e-commerce integralmente, utilizando a arquitetura de microsserviços, que contém três APIs REST diferentes, uma para o cliente, uma para o vendedor e uma para realizar a transação entre os dois. Use TypeScript , ReactJS e NextJS para escrever o código. Neste trabalho foi implementada a concepção de uma plataforma de e-commerce integralmente, utilizando a arquitetura de microsserviços, que contém três APIs REST diferentes, uma para o cliente, uma para o vendedor e uma para realizar a transação entre os dois, no criação do frontend TypeScript, ReactJS e NextJS foram usados para escrever o código. Para os três backends dos diversos microsserviços citados acima, foi escolhido o NodeJS, por possuir fácil integração, velocidade e bom acoplamento.
Justificativa
Usamos três microsserviços diferentes, um para nossos vendedores de comércio eletrônico, outro para usuários finais e, finalmente, um para as transações entre os dois.
Objetivos
Também fizemos um estudo sobre virtualização de máquinas e uma comparação entre máquinas virtuais de implantação1i e implantação em um servidor local. O segundo objetivo é verificar o desempenho de um servidor local e de um servidor Amazon alugado, ou seja, um servidor no modelo IaaS onde será testado o mesmo código em ambos os ambientes.
Fundamentação Teórica
Arquitetura de Software: Segundo (BALDISSERA) Um modelo arquitetural é uma solução já estudada, testada e documentada para um problema recorrente. Em dois livros, o autor descreve um método de documentação do modelo, que, apesar de ser destinado à arquitetura, foi adaptado para a área de software e tornou-se popular na década de 1990. Banco de Dados Relacional: Segundo (ORACLE) Um banco de dados relacional é um banco de dados usado para armazenar e fornecer acesso a pontos de dados conectados.
Bancos de dados relacionais são baseados no modelo relacional, que é uma forma intuitiva e simples de representar dados em tabelas."
Organização do Trabalho
Estrutura da Monografia
Nesse cenário, surgiu a demanda por uma arquitetura de software com menor acoplamento entre componentes e maior facilidade de manutenção. Portanto, o software desenvolvido e mostrado neste documento é dividido em módulos funcionais desta forma utilizando a arquitetura de microsserviços. Desta forma, o front-end (parte visual e interação com o usuário) é desconectado do back-end (servidor), que foi dividido em três back-ends diferentes que são mencionados no corpo deste documento.
Na parte front-end da aplicação foi utilizado o React junto com o Next.js com typescript para que o código seja digitado corretamente e seja mais fácil de entender. Utiliza a linguagem de programação Javascript para tornar cada vez mais fácil a conexão entre HTML, CSS e todos os componentes da página. Os chamados "componentes" facilitam o funcionamento da página, como atualizar as variáveis de uma determinada página.
O DOM virtual ou VDOM é a representação na memória do DOM real (Document Object Model) da interface. Para deixar isso mais claro, imagine o seguinte processo: Para atualizar a página, o React primeiro armazena suas alterações na memória, em um ambiente chamado de DOM virtual. Isso ocorre porque manipular o DOM virtual é muito mais rápido do que manipular o DOM real - ou seja. a página é atualizada.
No front-end, as atualizações de DOM são muito comuns, pois atualizam efetivamente as páginas de um site ou aplicativo. Muitos recursos são mais perceptíveis em nossas aplicações de produção porque o NextJS tem dois pontos principais em seu objetivo: melhorar o desempenho de nossas aplicações React e o problema dos mecanismos de busca indexarem o conteúdo da página.
Trabalhos Relacionados
Javascript é uma das linguagens de programação mais comuns e populares do mundo, com um grande número de bibliotecas e outros usuários que a utilizam. Esses suportes são objetos com diferentes informações, que podem ser de diversos tipos, como funções, números ou strings. Como atributos, estados ou estados, eles também são objetos ou informações, mas em vez de serem passados para o componente, são criados dentro do componente.
Esse NextJS adiciona alguns recursos ao React, como renderização estática e do lado do servidor. É importante ter em mente os principais princípios da arquitetura orientada a microsserviços, como elasticidade, componibilidade, elasticidade e assim por diante; caso contrário, você pode acabar com um aplicativo monolítico dividido em diferentes máquinas que produz problemas em vez de uma solução elegante.
Banco de dados
- KnexJS
- Endpoints
- Middlewares
- Express
- CORS
- Node.js
Em protocolos de comunicação, por exemplo, endpoints referem-se aos terminais de conexão entre a API/backend e o lado do cliente, que neste caso seria o front-end. Por exemplo, os produtos que devem aparecer na página inicial são as informações que o front-end recebe do back-end. Express é uma estrutura de aplicativo da web Node.js mínima e flexível que fornece um poderoso conjunto de recursos para o desenvolvimento de aplicativos da web e móveis.
Promove o rápido desenvolvimento de aplicações web baseadas em Node.js, pois permite a configuração de middleware para responder a requisições HTTP, permite a criação de tabelas de roteamento para realizar diversas operações baseadas em métodos HTTP e URLs/HTTPS, e ainda permite renderização de páginas HTML com base na passagem de parâmetros para o modelo. Por exemplo, apenas domínios permitidos podem acessar arquivos localizados no servidor, como folhas de estilo, imagens ou scripts. Por exemplo, quando você ainda estiver em desenvolvimento, se usar o React para seu front-end, seu aplicativo de front-end será servido em http://localhost:3000.
Por exemplo, a rota de login do usuário é http://localhost:3030/login, envia o usuário e a senha na própria requisição, e recebe de volta os dados do usuário logado (menos a senha por questões de segurança) e o token de acesso que dura, como já mencionado, 24 horas. Os sistemas Node.js não sofrem de dead-locks porque o Node.js só funciona em single-threading (single thread por processo). Outra coisa interessante que podemos ver em (PEREIRA, 2014) é que o Node.js é orientado a eventos e segue a mesma filosofia de orientação a eventos do lado Javascriptclient.
Portanto, o Node.js possui um event loop, que é o agente responsável por escutar e emitir eventos no sistema. Ainda em (PEREIRA, 2014) observamos que o Node.js possui o design do event driver que foi inspirado nos frameworks Event Machine (Ruby) e Twisted (Python), mas o event loop é mais performático porque seu mecanismo é executado naturalmente em " modo não bloqueante".
- TypeScript
- React
- Componentes
- Contextos
- NextJS
- Serviços
- Axios
Um dos maiores problemas é encontrar erros no processo de execução, pois o Intellisense IDE pode ser utilizado para visualizar os pontos de melhoria e problemas de compilação. A Figura 3.4 (GACKENHEIMER, 2015) mostra o básico de cada componente na arquitetura MVC. Esse é um dos principais fatores que fazem os frameworks se destacarem entre dezenas de frameworks existentes no mundo competitivo.
Como os dados fluem apenas em uma direção, é mais fácil depurar e manter-se atualizado sobre onde está o problema no aplicativo, portanto, as informações atribuídas nos contextos são o que importa. Desta forma todas as páginas passam a ter a informação de quem está logado e o token de acesso. Este ID é sempre incluído nas solicitações ao back-end para receber informações sobre o usuário ou comerciante logado.
O AppContext armazena as informações do usuário que está navegando no e-commerce, e assim armazena no carrinho de compras os itens que o usuário deslogado deseja comprar. CHU,2020) afirma que o Next.js é um framework React com uma estrutura que permite construir um aplicativo front-end React e lida de forma transparente com a renderização do lado do servidor. Next.js fornece renderização do lado do servidor, o que permite que o aplicativo exiba seu estado inicial antes que qualquer script Javascript seja carregado.
Dessa forma, o fluxo de renderização das informações do servidor para o front-end fica transparente para o usuário, tornando a experiência mais limpa e agradável. Dessa forma, todas as requisições feitas a qualquer um dos três backends são feitas através do Axios a partir do frontend, onde cada url retorna as informações atuais dos endpoints informados.
Deploy
- Panorama na área de TI
- Virtualização
- Datacenters e Nuvem
- O aspecto PERFORMANCE
- Aspectos indiretos consideráveis
- Topologia e Deploy Local
Os núcleos são os processadores físicos que estão dentro da estrutura do chip, enquanto os threads são as filas de processamento simultâneo que executam o processador lógico. Dada a ideia de dividir os recursos de uma máquina física entre várias instâncias virtuais simultâneas, é natural que o desempenho de instâncias individuais sofra uma queda de desempenho sob cargas de trabalho mais intensivas. Embora CPU Share e Compute sejam termos vagos que podem significar qualquer plataforma interna, RAM, Dedicated e Sleep são termos universais.
Nas tecnologias atuais, 512 MB de RAM limitarão o desempenho em uma variedade de novos compiladores e linguagens. Se assumirmos que o CPU Share 1x 1 thread de um processador com Dedicated significa "não", consideramos que todo o processamento da tarefa estará sujeito a um processamento sequencial dividido numa única fila, num típico servidor processador que normalmente não 'a relógio alto. Todas as plataformas de computação em nuvem possuem investimentos constantes na segurança geral da plataforma, firewalls e outros mecanismos para evitar qualquer tipo de invasão ou exposição dos dados nelas hospedados.
Em um ambiente local, mesmo que medidas sejam tomadas, é muito difícil atingir indicadores de redundância e segurança semelhantes aos alcançados por data centers dedicados a esses segmentos. O Firewall está devidamente configurado de acordo com a política de todas as portas serem fechadas para acesso, exceto aquelas necessárias para o funcionamento do serviço configurado no Deploy. Qualquer coisa acima de 2 núcleos de processador e 4 GB de RAM será suficiente para melhorar os benchmarks de desempenho.
Os resultados obtidos pela combinação de todas essas tecnologias foram satisfatórios, pois todas as funções do e-commerce funcionam e funcionam de forma independente, garantindo assim o conceito de microsserviços. A maior desvantagem da implantação em uma única máquina, em que todos os serviços de back-end e front-end estão no mesmo host, é que, se cair por qualquer motivo, todos os serviços serão interrompidos.
Estudos em bancos de dados com servidor local e online
Testes de performance
Conclusão
O modelo de microsserviços permite que os desenvolvedores dividam os componentes de uma infraestrutura de aplicativos maior.
Heroku - Inserção
Local - Inserção