Giter Site home page Giter Site logo

django-poc's Introduction

Preparando o ambiente

Após clonar este repositório, execute os comandos abaixo:

Compilar estress test

Baixe este repositório e compile ele por meio de um make https://github.com/wg/wrk

# Cria virtual env na pasta corrente
python3 -m venv .venv
# Ativa ambiente python
source .venv/bin/activate
# Instala dependências
pip install -r requirements.txt

Testando modelo sync

Iniciar primeiro terminal e executar make run.gunicorn

Apos o serviço esta pronto, abra um novo terminal na raiz onde o wrk foi compilado e execute: ./wrk -t 8 -c 500 -d 10 --latency http://localhost:8000/sync_sleep/\?sleep\=0.1

Testando modelo async

Iniciar primeiro terminal e executar make run.uvicorn

Apos o serviço esta pronto, abra um novo terminal na raiz onde o wrk foi compilado e execute: ./wrk -t 8 -c 500 -d 10 --latency http://localhost:8000/sync_sleep/\?sleep\=0.1

Ambos os servidores irão utilizar apenas um processo ou uma thread, a ideia é testar o cenário de exaustão sem esforço, apenas precisamos entender quais situações estão críticas para o nosso cenário e onde precisaremos de correções para adotar o modelo async.

Testes com sujeira

Inicie o serviço com make run.uvicorn

Abra um navegador para o endpoint http://localhost:8000/dirty/?sleep=0.3&email=dev

Abra outro navegador para o endpoint http://localhost:8000/dirty/?sleep=7&email=test

Realize algumas atualizações de página no primeiro navegador que tem o tempo mais curto.

Ambas as páginas retornarão um conteúdo simples, porém o email do primeiro navegador estranhamente veio parar no segundo, o que era esperado de se acontecer.

Embora esse seja um cenário que não esperamos ter no nosso contexto, é extremamente crucial realizar uma validação criteriosa.

Considerações finais

  • Quanto mais baixo o sleep time, menos sentido faz termos o uvicorn com handles async, o contrário também é verdadeiro.
  • Um bom teste de experiência de usuário final é abrir dois navegadores e realizar no modelo sync e async os testes nos mesmos endpoints.
  • Se formos adotar uma abordagem de reescrita dos handles http + metódos que já usamos hoje, precisamos entender e investigar bem todos os lugares para que não caiamos em comportamento inesperado.
  • Varrer e revisar corretamente os testes de sujeira de memória, ou seja em que ponto um dado valor que estava dentro de um objeto foi parar na execução de outra tarefa async, ver seção testes com sujeira.

django-poc's People

Contributors

lpj145 avatar rodrigondec avatar

Watchers

 avatar Alvaro Portela avatar  avatar João Santana avatar  avatar

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.