GithubHelp home page GithubHelp logo

devops-vaga's Introduction

Vaga Devops - SpaceTime Labs

Esse projeto contém uma mini aplicação desenvolvida em Python. Nós esperamos que você complete ela fazendo algumas atividades de desenvolvimento e infraestrutura.

Estrutura da Aplicação

A aplicação consiste de uma API HTTP escrita em Flask, um REDIS sendo usado como fila de tarefas e um "worker" responsável por receber as tarefas, processa-lás e devolver o resultado.

.
├── http_api
│   ├── http_api
│   │   ├── config.py
│   │   ├── __init__.py
│   │   └── tasks.py
│   ├── Pipfile
│   ├── Pipfile.lock
│   └── wsgi.py
└── worker
    ├── Pipfile
    ├── Pipfile.lock
    └── worker
        ├── config.py
        ├── __main__.py
        └── tasks.py

Visão geral da aplicaçãozinha:

+------------+      +------------+                  +--------+
|  cliente   |<---->|  API HTTP  |<->[ redis ]<---->| worker |
|   HTTP     |      +------------+              \   +--------+
+------------+                                   \   +---------+
                                                  \->| worker  |
                                                     +---------+

A API têm três endpoints que estão documentados no arquivo ./http_api/openapi.yml.

O worker é um mini-projeto Python que fica aguardando mensagens em uma lista do Redis, as processa, e retorna o resultado (ou o erro).

Exemplo de Funcionamento

Você pode iteragir com a API usando o cURL (ou com qualquer outro programa que gostar).

Para enviar uma imagem para processamento:

Arquivo ./cat.png

Gato

Fonte: https://www.pexels.com/photo/orange-tabby-cat-near-window-2071873/

$ curl -H 'Content-Type: image/png' \
    --data-binary @./cat.png \
    http://localhost:5000/randomize
{"token":"b27f6016f9cf46a6baaddf09d2e5b221"}

Para consultar o status de um processamento:

$ curl http://localhost:5000/randomize/<token>/status
{"status":"requested"}

Para pegar o resultado de uma tarefa:

$ curl http://localhost:5000/randomize/<token>/result > ./out.png

Gato Aleatório

Mão na Massa!

Faça um fork do projeto para seu GitHub antes de começar. Se tiver qualquer tipo de dúvida sobre as atividades é só mandar uma mensagem pra gente.

Sua primeira missão é melhorar o ambiente de desenvolvimento! Adicione Dockerfile's nos componentes API HTTP e worker e um docker-compose.yml para subir o REDIS e os componentes de forma coordenada, rodando tudo dentro do Docker.

Nós presamos muito por uma pipeline de CI/CD funcionando. Sua segunda tarefa é criar um travis-ci.yaml que execute os testes da aplicação.

O desenvolvedor esqueceu de colocar algumas métricas importantes no código. Altere a aplicação para registrar o tempo de execução da tarefa no worker e o "lead-time" (tempo entre o pedido do usuário e o término do processamento). Você pode registrar nos logs e mandar o output pra gente.

Alguns problemas são maiores que outros, e a arquitetura pode precisar de algumas mudanças. Crie uma nova tarefa que receba um arquivo de texto com número aleatoŕios e retorne a soma dos números pares existentes no arquivo. A tarefa deve funcionar tanto para arquivos com 100MB quanto para arquivos maiores, com 5GB de números.

Descreva como você implantaria essa solução (de preferência na AWS). Leve em conta que vários clientes vão usar o sistema ao mesmo tempo e que, idealmente, o processamento feito por um cliente não deve interferir (muito) no tempo de processamento do outro cliente.

Links Úteis

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.