Skip to content

gabrielrodriguesrocha/challenge-bravo

This branch is 6 commits ahead of, 15 commits behind hurbcom/challenge-bravo:main.

Folders and files

NameName
Last commit message
Last commit date

Latest commit

author
Gabriel Rodrigues Rocha
Sep 13, 2019
b27fd39 · Sep 13, 2019

History

22 Commits
Sep 13, 2019
Sep 5, 2019
Nov 10, 2017
Sep 5, 2019
Sep 5, 2019
Nov 10, 2017
Sep 5, 2019
Sep 5, 2019
Sep 5, 2019
Aug 15, 2019
Sep 5, 2019

Repository files navigation

HU Desafio Bravo

Este repositório contém uma prova de conceito de uma API para conversão monetária. A API é implementada em Node.js através do framework Express, com alguns outros detalhes de infraestrutura.

Endpoints

  • /api: retorna, em JSON, a conversão de um valor em determinada moeda para outra. O único método deste endpoint é GET. É preciso passar os seguintes parâmetros:
    • from: código da moeda de origem;
    • to: código da moeda de destino;
    • amount: valor a ser convertido.
  • /currencies: Utilizado para inserir e remover moedas do serviço de conversão. Métodos disponíveis:
    • GET: retorna todas as moedas suportadas;
    • PUT: insere uma nova moeda através do parâmetro currency;
    • DELETE: remove a moeda passada pelo parâmetro currency.

Execução

O serviço pode ser executado de diversas maneiras: localmente, através de containers Docker e através do orquestrador Kubernetes (sobre containers Docker). Este repositório possui scripts para as duas últimas opções.

Docker

Supondo que a ferramenta Docker já está instalada em sua máquina, basta executar docker-compose up.

Há três containers: um que propriamente executa o servidor em Node.js, outro que executa o data store Redis e outro que executa servidor NGINX como proxy reverso.

Com a finalidade de deixar o serviço mais escalável, é possível executá-lo dentro de um stack Docker (e posteriormente entre outras máquinas):

  1. Inicialize o swarm com docker swarm init --advertise-addr=<endereco>;
  2. Faça o deploy do stack com docker stack deploy --compose-file docker-compose.yml web;

Kubernetes

Supondo que o Kubernetes já está instalado em sua máquina (e.g. Minikube), basta executar:

  1. sudo mkdir -p /k8s/nginx && sudo cp ../nginx.conf /k8s/nginx/nginx.conf;
  2. cd k8s && sudo kubectl create -f .

Por conveniência, este repositório também fornece um arquivo para criar automaticamente uma máquina virtual com Vagrant de forma a instalar todos os pré-requisitos para executar o serviço em Kubernetes. Caso deseje utilizar este arquivo, basta instalar o Vagrant e executar vagrant up. Os endpoints ficarão acessíveis no endereço 192.168.50.2.

Detalhes de funcionamento

O serviço tem um modo de funcionamento muito simples. O NGINX mapeia solicitações para o servidor Node.js, que recebe solicitações de conversão e verifica se a taxa de conversão está disponível em um cache fornecido pelo Redis. Se a taxa está no cache, ela é recuperada e a operação de conversão é realizada. Caso contrário, a taxa e sua inversa são recuperadas de forma assíncrona de uma API externa e inseridas no cache, com tempo de expiração de uma hora.

Este é um exercício interessante de integração de tecnologias. Embora a prova de conceito desenvolvida obviamente não esteja pronta para produção, ela utiliza alguns elementos que são práticas comuns no mercado.

About

Desafio de back-end

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • JavaScript 68.5%
  • Shell 29.9%
  • Dockerfile 1.6%