Arquitetura MEAN Stack: Angular, Node, Express e MongoDB

MEAN Stack

MEAN Stack é um software livre de código aberto em linguagem JavaScript usado para desenvolver sites dinâmicos e aplicativos, ou podemos dizer que o MEAN Stack é uma coleção de tecnologias baseadas em JavaScript usadas para desenvolver aplicativos. MEAN é um acrônimo para MongoDB, Express, Angular e Node.

  • M = MongoDB, um banco de dados popular de alta performance que implementa uma estrutura NoSQL.
  • E = Express, um framework com grandes recursos que agilizam o desenvolvimento com Node.js.
  • A = Angular, também um framework para contruir aplicativos web e inclusive para dispositivos mõveis. Ele segue uma estrutura de HTML e Javascript derivando para o aplicativo.
  • N = Node.js, a jóia da coroa. É uma linguagem interpretada em tempo de execução que roda do lado do servidor, ou seja, ele funciona no back-end, longe dos olhos do usuário para buscar dados relevantes ou executar operações no mesmo.

O MongoDB oferece uma camada extremamente flexível para o armazenamento de dados. O Node.js por sua vez é o responsável pela execução do lado servidor integrando as regras de negócio com o banco de dados, enquanto que o Express ajuda a padronizar a codificação do back-end. Do lado cliente, o Angular fornece uma maneira limpa de adicionar funções interativas e componentes avançados fundamentalmente baseados em AJAX. Colocando tudo junto criamos uma poderosa arquitetura para o desenvolvimento de sites e sistemas web.

Recursos do MEAN Stack

  • Um dos benefícios mais importantes é que permite ao desenvolvedor escrever todo o código em JavaScript; do cliente para o servidor. Isso é como uma bênção para os desenvolvedores de JavaScript pois além de ser uma linguagem relativamente simples de aprender é muito popular estando presente praticamente em todos os sites.
  • Suporta a arquitetura MVC (Model View Controller).
  • Os componentes MEAN são de código aberto; oque significa que há atualizações regulares. Além disso, é fácil e flexível de entender e usar o que ajuda os desenvolvedores dando muito mais agilidade e qualidade.
  • Uma outra vantagem é a enorme quantidade de bibliotecas do Node e não menos importante, o uso do JSON para toda a comunicação entre front-end e back-end.
  • Não é apenas uma plataforma para amadores e entusiastas, grandes corporações como Walmart, PayPal, Yahoo!, Netflix, Uber, LinkedIn entre inúmeras outras utilizam amplamente o Node.js.

Arquitetura do MEAN Stack

MEAN é uma plataforma de código aberto, como dito antes. MEAN é muito simples e fácil de usar tanto para back-end quanto para o front-end. Existem outras boas linguagens para o desenvolvimento de ambos os lados (front e back), mas nenhuma delas tem a grande vantagem de usar a mesma linguagem dos dois lados. O funcionamento do MEAN Stack é melhor explicado abaixo na figura:

Arquitetura MEAN Stack

 

Explicando a arquitetura do MEAN Stack

  1. Quando o cliente faz qualquer pedido, ele é primeiramente processado pelo Angular. Lembrando que o Angular é uma linguagem que roda do lado do cliente.
  2. Em seguida, a requisição chega ao Node.js. Lembrando que o Node.js é o responsável pelo processamento do lado servidor.
  3. Na fase 3, os dados dentro do Node.js são processados pela camada do Express, que liga a camada de negócio com a camada de persistência no banco de dados.
  4. Chegando no MongoDB os dados são recuperados e retornam ao Express para serem finalizados e respondidos ao cliente.
  5. Finalmente o Express formata a resposta para o Node.js e, em seguida, retorna para o Angular que faz a leitura e imprime o conteúdo.

Angular

O Angular é um belíssimo framework para aplicativos web com grande conteúdo dinâmico. Ele mantém a programação da camada de visão (chamadas Views) com codificação em HTML e cria uma elegante distribuição em forma de componentes que podem ser otimizados e reaproveitados com o bônus de facilitar a organização do código pelo programador. A vinculação de dados e a injeção de dependência são recursos fundamentais do Angular que reduzem dramaticamente a codificação. E com tudo acontecendo dentro do navegador do cliente, tornando-o um parceiro ideal com qualquer tecnologia de servidor.

  1. O Angular é uma poderosa estrutura de desenvolvimento baseada em JavaScript para criar o RICH Internet Application (RIA).
  2. O Angular fornece opções aos desenvolvedores para escrever aplicativos do lado do cliente em um MVC (Model View Controller) limpo.
  3. O Angular é de código aberto, totalmente gratuito e usado por milhares de desenvolvedores em todo o mundo. Ele é licenciado sob a licença Apache versão 2.0.

Model View Controller

  1. Model
    • É o nível mais baixo do padrão responsável pela manutenção de dados.
    • O modelo é responsável pelo gerenciamento dos dados do aplicativo. Ele responde à solicitação da view e às instruções do controller para se atualizar.
  2. View
    • É responsável por exibir todos ou parte dos dados para o usuário.
    • Uma apresentação de dados em um formato específico, acionada pela decisão do controller de apresentar os dados. Eles são sistemas de templates baseados em script, como JSP, ASP, PHP e muito fáceis de integrar com a tecnologia AJAX.
  3. Controller
    • É um código de software que controla as interações entre o modelo e a visualização.
    • O controller responde à entrada do usuário e realiza interações nos objetos do modelo de dados. O controller recebe a entrada, valida-a e executa operações de negócios que modificam o estado do modelo de dados.

Node

O Node.js é uma plataforma do lado do servidor interpretada em tempo de execução. A codificação é em linguagem JavaScript e utiliza o engine do Chrome criando facilmente aplicativos rápidos e escalonáveis. O Node.js usa um modelo de IO sem bloqueio orientado a eventos que o torna leve e eficiente, perfeito para aplicativos em tempo real que usam muitos dados e que são executados em dispositivos distribuídos.

  1. Assíncrono e baseado em eventos
    • Todas as APIs da biblioteca Node.js são assíncronas, isto é, sem bloqueio. Essencialmente, um servidor baseado em Node.js nunca espera por uma API para retornar dados. O servidor passa para a próxima API depois de chamá-lo e um mecanismo de notificação de Eventos do Node.js ajuda o servidor a obter uma resposta da chamada da API anterior.
  2. Muito Rápido
    • Sendo construída no Mecanismo JavaScript V8 componente do Google Chrome, a biblioteca Node.js é muito rápida na execução de códigos.
  3. Único roscado mas altamente escalável
    • O Node.js usa um único modelo encadeado com loop de eventos. O mecanismo de eventos ajuda o servidor a responder de maneira não-blocante e torna o servidor altamente escalável, ao contrário dos servidores tradicionais, que criam encadeamentos limitados para lidar com solicitações. O Node.js usa um único programa encadeado e o mesmo programa pode fornecer serviço para um número muito maior de solicitações do que os servidores tradicionais, como o Apache HTTP Server.

Threading

O Node.js opera em um único thread, usando chamadas de IO assíncronas, permitindo que ele suporte dezenas de milhares de conexões simultâneas sem incorrer no custo da comutação de contexto de threads. O design de compartilhar um único encadeamento entre todas as solicitações que usam o padrão observador é destinado a construir aplicativos altamente simultâneos, em que qualquer função que executa IO deve usar um único retorno de chamada. Para acomodar o loop de eventos de encadeamento único, o Node.js utiliza a biblioteca libuv que, por sua vez, usa um conjunto de encadeamentos de tamanho fixo que é responsável por algumas das operações de IO assíncronas (sem bloqueio).

Descrição da Arquitetura

  • Aqui “n” número de pedidos de envio de clientes para o servidor web. Supondo que eles acessem o aplicativo simultaneamente.
  • Supondo que os clientes são cliente-1, cliente-2 e cliente-n.
  • Web Server internamente mantém um pool de segmentos limitados. Supondo agora que “m” é o número de segmentos contido no pool de segmentos.
  • O servidor da Web recebe essas solicitações uma a uma.
    • Servidor Web pega Cliente-1 Requisição-1, captura um Thread T-1 do pool correspondente e atribui essa solicitação à Thread T-1
      • O Thread T-1 lê o Cliente-1 Requisição-1 e o processa
      • Solicitação-1 do Cliente-1 não requer operações de IO Bloqueadas
      • O encadeamento T-1 realiza as etapas necessárias e prepara o Response-1 e o envia de volta ao servidor
      • O Web Server por sua vez envia esta Resposta-1 para o Cliente-1
    • Servidor Web pega outro Client-2 Requisição-2, seleciona um Thread T-2 do pool e atribui este pedido ao Thread T-2
      • O Thread T-2 lê o Cliente-2 Requisição-2 e o processa
      • Solicitação-2 do Cliente-2 não requer operações de IO Bloqueadas
      • O encadeamento T-2 realiza as etapas necessárias e prepara o Response-2 e o envia de volta ao servidor
      • O Web Server por sua vez envia esta Resposta-2 para o Cliente-2
    • Servidor Web pega outro Cliente-n Requisição-n, seleciona um Thread T-n do Thread pool e atribui este pedido ao Thread T-n
      • O Thread T-n lê o Cliente-n Requisição-n e o processa
      • Cliente-n Requisição-n requer operações de IO e computação de bloqueio pesadas
      • O encadeamento T-n leva mais tempo para interagir com sistemas externos, executa as etapas necessárias e prepara a Resposta-n e o envia de volta ao servidor
      • O Web Server por sua vez envia esta Resposta-n para o Cliente-n

Se “n” for maior que “m” (na maioria das vezes, é verdade), o servidor atribui Threads às solicitações do cliente até os threads disponíveis. Depois de todos os Threads serem utilizados, a Solicitação do Cliente restante deverá aguardar na Fila até que alguns Threads ocupados concluam o Trabalho de Processamento de Solicitação e sejam gratuitos para atender à próxima Solicitação. Se esses encadeamentos estiverem ocupados com Tarefas de E / S de Bloqueio (Por exemplo, interagindo com Banco de Dados, sistema de arquivos, Fila JMS, serviços externos, etc.) por mais tempo, os clientes restantes deverão aguardar mais tempo.

Express

O Express oferece uma interface mínima para que possamos construir nossos aplicativos. É mínimo, proporcionando-nos as ferramentas absolutamente necessárias para construir o nosso aplicativo e flexível, existem inúmeros módulos disponíveis no npm para express, que podem ser diretamente conectados em expresso.

Ao contrário de seus concorrentes como o Rails e o Django, que possuem uma forma opinativa de construir aplicativos, o Express não tem “o melhor jeito” de fazer alguma coisa. É muito flexível e conectável.

Descrição da Arquitetura

Quando o usuário envia uma solicitação para o AngularJS, essa solicitação é primeiramente acessada pelo thread do NodeJS, que é feita no NodeJS e, em seguida, enviada para o ExpressJS para criar, ler, atualizar e excluir a API da solicitação. A ExpressJs hospeda o site para o NodeJS. Tanto o NodeJS quanto o ExpressJS são linguagens do lado do servidor. Após o CURD, os dados da API são recuperados do anúncio do MongoDB e, em seguida, enviados para o usuário.

  • Criação (POST) – Faz alguma coisa
  • Leitura (GET)_- Lê alguma coisa
  • Atualização (PUT) – Muda alguma coisa
  • Deleta (DELETE)- Remove alguma coisa

MongoDB

O MongoDB (do humongous) é um programa de banco de dados orientado a documentos de plataforma aberta e gratuito. Classificado como um programa de banco de dados NoSQL, o MongoDB usa documentos semelhantes a JSON com esquemas. O MongoDB é o banco de dados dos aplicativos de hoje, permitindo que você:

  • Alavancar dados e tecnologia para maximizar a vantagem competitiva
  • Reduza o risco de implantações de missão crítica
  • Acelerar o tempo de retorno
  • Custo total de hospedagem drasticamente menor

Podemos construir aplicativos usando o banco de dados MongoDB sem usar as tradicionais relações de banco de dados (MYSQL). Os recursos do MongoDB estão abaixo.

1) Desenvolvimento Rápido e Iterativo

A flexible data model coupled with dynamic schema and idiomatic drivers make it fast for developers to build and evolve applications.

2) Modelagem de Dados Flexível

O modelo de dados de documentos do MongoDB facilita o armazenamento e a combinação de dados de qualquer estrutura, sem abrir mão de regras sofisticadas de validação, acesso a dados e funcionalidade rica de indexação.

3) Escalabilidade Multi-Datacenter

À medida que suas implantações crescem em termos de volume de dados e taxa de transferência, o MongoDB é dimensionado facilmente sem tempo de inatividade e sem alterar seu aplicativo.

4) Conjunto de Recursos Integrados

Análise e visualização de dados, pesquisa de texto, processamento de gráficos, geoespacial, desempenho na memória e replicação global permitem que você forneça uma ampla variedade de aplicativos em tempo real em uma tecnologia, de forma confiável e segura.

5) Baixo TCO

TCO (Total Cost of Ownership) – As equipes de desenvolvimento de aplicativos são mais produtivas quando usam o MongoDB. Gerenciamento de clique único. As equipes de operações do MEAN também são. O MongoDB é executado em hardware de commodity, reduzindo drasticamente os custos.

Recursos do MongoDB

  • No MongoDB, os dados representam uma coleção de documentos JSON.
  • A consulta do MongoDB é orientada a objetos, o que significa que pode-se passar o MongoDB a um documento explicando o que está consultando. O MongoDB não suporta articulações, ele suporta tipos de dados multidimensionais, como outros documentos e matrizes.
  • MongoDB, tem apenas um array de comentários e uma coleção de posts dentro de um post
  • Uma das melhores coisas sobre o MongoDB é que não há necessidade por definir o esquema

*** A OctalMind é uma empresa especializada no desenvolvimento de sistemas de alta tecnologia.