Recarregar o aplicativo da web gracioso

1

Eu tenho um aplicativo WSGI Python em execução no Gunicorn:

CONFIG = {
    'bind': "unix:{}".format(os.path.join(RUN_DIR, "brain.sock")),
    'preload_app': False,
    # supervisord requires that the child process runs in foreground
    'daemon': False,
    ...
}

Recebe solicitações HTTP por meio de um arquivo de soquete do Nginx:

server {
    ...
    location / {
        proxy_pass                  http://unix:$root/run/brain.sock:;
        ...
    }

O Gunicorn é executado via Supervisord:

[program:myapp]
command = venv/bin/gunicorn -c gunicorn.conf.py myapp.wsgi:application
...

Estou pensando em uma maneira de implantar meu aplicativo sem tempo de inatividade e tempo de espera. Cada trabalhador pode levar até 30 segundos para preencher o cache.

Minha ideia é implantar assim:

  1. Inicie um segundo Gunicorn com um novo código que escute outro arquivo de soquete.

  2. Aguarde até que o aplicativo seja iniciado com todos os caches preenchidos.

  3. Renomeie o arquivo de soquete para apontar para o local usado pelo Nginx. O Nginx ainda enviaria solicitações para o soquete antigo.

  4. Encerre o antigo Gunicorn com a versão antiga do aplicativo. Nginx verá que o soquete está fechado e reabrirá um novo soquete do mesmo local.

Isso funcionará?

Estou reinventando a roda?

    
por warvariuc 24.10.2017 / 21:26

2 respostas

1

Isso é Padrão de implantação azul-verde .

Em vez de renomear soquetes (etapa 3), você pode ter duas configurações nginx (diretiva de arquivo ou servidores de site com nome diferente), azul e verde, apontando para cada uma das instâncias do gunicorn. Então, quando você quiser implantar, basta ativar um e desativar o outro. Finalmente, o nginx reload lidará com todas as conexões ativas.

Aqui está um exemplo disso.

    
por 27.10.2017 / 12:19
0

Em vez de gunicorn, talvez você queira dar uma olhada em uwsgi , que

aims at developing a full stack for building hosting services.

Application servers (for various programming languages and protocols), proxies, process managers and monitors are all implemented using a common api and a common configuration style.

Thanks to its pluggable architecture it can be extended to support more platforms and languages.

Currently, you can write plugins in C, C++ and Objective-C.

The “WSGI” part in the name is a tribute to the namesake Python standard, as it has been the first developed plugin for the project.

Versatility, performance, low-resource usage and reliability are the strengths of the project (and the only rules followed).

Um de seus recursos é o recarregamentos agradáveis .

    
por 24.10.2017 / 21:51