Skip to content

Arquitetura

Pablo Diego Silva da Silva edited this page Dec 14, 2017 · 10 revisions

Arquitetura do Projeto

1. Introdução

O documento visa apresentar as principais características arquiteturais da aplicação QueroCultura, com intuito de esclarecer como será modelada a arquitetura do sistema.

2. Diagrama

2.1 Nginx

O Nginx é um servidor web rápido, leve, e com inúmeras possibilidades de configuração, ele é utilizado no projeto para redirecionamento das portas, como um proxy reverso utilizado pelo metabase e pelo django fazendo com que ambos utilizem a mesma porta 80, possibilitando o link dos gráficos do metabase em IFrame no Django.

2.2 API connection

Cuida da comunicação com a API Mapas Culturais, gerando encapsulamento das transações e disponibilizando as outras partes do sistema os dados provenientes da API Mapas Culturais que necessitam para realizar suas funções dentro do contexto de processamento de dados, geração de indicadores e afins.

2.3 Metabase & Postgres

O Metabase é a parte responsável por processar as informações que são salvas no MongoDB e gerar gráficos com esses dados. Para a utilização do metabase temos um banco postgres para salvar as informações respectivas à ele. Após serem criados os gráficos é gerado um embedding, que é uma forma de utilizar o gráfico em outras aplicações através de um IFrame, utilizado por nós django na camada template.

2.4 Celery & Redis

Celery é uma ferramenta utilizada para agendar tarefas em determinados períodos de tempo, é responsável por chamar as funções que fazem as requisições, populam e atualizam o banco de marcadores do mapa e dados dos indicadores da página. Ele utiliza o banco Redis para salvar seu funcionamento.

2.5 Django & Mongo

O padrão arquitetural da aplicação será o MVT(Model - View - Template) tendo em vista que ela será implementada através do framework Django que é escrito e faz uso da linguagem de programação Python, contando também com um "API connection" responsável pela comunicação com a API Mapas Culturais que fornecerá dados para alimentação da aplicação QueroCultura. O banco de dados usado será o MongoDB que é NoSql e orientado a documentos, que tem o propósito de salvar os dados necessários para utilização no Metabase, sendo processados para gerar os gráficos da aplicação. O Django é responsável pela exibição das páginas de indicadores e do mapa de atualizações da aplicação, além de também conter os métodos que são chamados através do Celery para popular o banco e atualizar os dados nos momentos adequados.

2.5.1 Models

Uma model é onde fazemos a modelagem e a persistência dos dados. Como o mongoDB não possui esquemas então é possível fazer a remodelagem dos dados quando necessário, por isso usamos a MongoEngine que faz com que classes das models se tornem uma coleção do Mongo.

2.5.2 Views

A camada de views é a responsável por popular o banco, para que as informações da página estejam sempre atualizadas é necessário que o celery faça periodicamente a chamada da função que popula o banco com os novos registros e atualizações da plataforma, assim o site se mantém atualizado.

2.5.3 Django ORM

ORM (object relational mapping) é uma técnica utilizada para automatizar a transferência de dados, transformando classes em tabelas e os objetos em uma tupla do banco de dados. As vantagens do ORM está no poder de abstração, pois permite o programador desenvolver em python e não se preocupar com as instruções SQL.

2.5.4 Mongoengine

O mongo engine é uma Object-Document Mapper, é como uma ORM porém é usada para banco de dados orientados a documentos, o mongoDB não precisa de esquemas, ou seja você pode adicionar ou remover campos sem que o banco de erros. Do mesmo jeito de uma ORM o mongoengine cria "documentos" de acordo com a classe e esses dados são salvos em coleções. A grande facilidade de usar uma ORM é que não é passado nenhum esquema para o banco, será tudo modelado no nível de aplicação.

2.5.5 Mongo DB

Mongo DB é um banco de dados orientado a documentos, isso quer dizer que o banco não usa esquemas, e sim coleções e documentos. Um documento guarda todas as informações de um objeto em uma única instancia, em vez de separar em tabelas como bancos relacionais, outra diferença do mongo e outros bancos não relacionais é que ele guarda os dados em um formato de json, chave e valor.

Clone this wiki locally