Como configurar solicitações de aquecimento para melhorar o desempenho

Use as solicitações de aquecimento para reduzir a latência da solicitação e da resposta enquanto o código do aplicativo é carregado em uma instância recém-criada.

No App Engine, há uma necessidade constante de carregar o código do aplicativo em uma nova instância. O carregamento de uma instância pode acontecer nas seguintes situações:

  • Quando você reimplanta uma versão do aplicativo.
  • Quando novas instâncias são criadas devido ao carregamento de solicitações que excedem a capacidade do conjunto atual de instâncias em execução.
  • Quando ocorre manutenção e reparo da infraestrutura subjacente ou do hardware físico.

O carregamento do código do aplicativo em uma nova instância pode resultar em solicitações de carregamento. As solicitações de carregamento podem resultar em maior latência das solicitações para seus usuários. Para evitar isso, use as solicitações de aquecimento. Com elas, o código do aplicativo é carregado para uma nova instância antes que as solicitações ativas cheguem a essa instância.

Se as solicitações de aquecimento estiverem ativas no seu aplicativo, ocorrerá uma tentativa de detectar quando o aplicativo precisará de uma nova instância e de uma solicitação de aquecimento para que a inicialização dessa instância seja gerada. No entanto, essas tentativas de detecção não funcionam em todos os casos. Como resultado, é possível encontrar solicitações de carregamento, mesmo que as solicitações de aquecimento estejam ativas. Por exemplo, se o aplicativo não atender ao tráfego, a primeira solicitação para o aplicativo será sempre de carregamento e não de aquecimento.

Nas solicitações de aquecimento, como em qualquer outra solicitação para seu aplicativo do App Engine, são usadas as instâncias/hora. Na maioria dos casos em que as solicitações de aquecimento estão ativadas, você não notará um aumento na instância/hora porque o aplicativo está apenas sendo inicializado em uma solicitação de aquecimento, e não de carregamento. O uso de instância/hora aumentará se você decidir executar mais operações, como realizar o pré-armazenamento em cache durante uma solicitação de aquecimento. Se você definir um número mínimo de instâncias ociosas, poderá encontrar solicitações de aquecimento quando essas instâncias forem iniciadas pela primeira vez, mas elas permanecerão disponíveis após esse período.

Como ativar solicitações de aquecimento

As solicitações de aquecimento são usadas pelo programador do App Engine, em que é feito o controle do escalonamento automático de instâncias com base na configuração definida pelo usuário. Com as solicitações de aquecimento ativadas, o App Engine envia solicitações GET para /_ah/warmup. É possível implementar gerenciadores nessa solicitação para realizar tarefas específicas do aplicativo, como pré-armazenar dados em cache.

O programador inicia instâncias quando determina que mais instâncias são necessárias. As solicitações de aquecimento podem resultar em registros ainda que estejam desativadas porque são usadas pelo programador para iniciar instâncias.

Não há garantias de chamada das solicitações de aquecimento. Em algumas situações, solicitações de carregamento são enviadas no lugar delas, por exemplo, se a instância a ser iniciada for a primeira ou se houver um grande aumento no tráfego. No entanto, haverá uma tentativa de enviar solicitações para instâncias já aquecidas se as solicitações de aquecimento estiverem ativadas.

Para ativar as solicitações de aquecimento, adicione o elemento warmup à diretiva inbound_services do arquivo app.yaml. Por exemplo:

inbound_services:
- warmup

Como registrar o gerenciador

É possível registrar o script que processa solicitações de aquecimento no arquivo app.yaml do projeto. Por exemplo:

inbound_services:
- warmup

handlers:
- url: /_ah/warmup
  script: main.py
  login: admin

Este exemplo registra um gerenciador para escutar solicitações de aquecimento do caminho de solicitação /_ah/warmup com o arquivo main.py.

Como criar o gerenciador

Crie um gerenciador que processará as solicitações enviadas para /_ah/warmup. Ele precisa executar qualquer lógica de aquecimento que o aplicativo necessitar. O exemplo a seguir se baseia no exemplo anterior:

import webapp2

class MyWarmUpCode(webapp2.RequestHandler):
  """
  This class handles the warmup request. You should add any code that you
  need to execute in the `get` method, such as populating caches, and ensure
  that you return a successful HTTP response.
  """

  def get(self):

      # Your warmup logic goes here.

      # Return a successful response to indicate the logic completed.
      self.response.headers['Content-Type'] = 'text/plain'
      self.response.write('Warmup successful')

  # ...

application = webapp2.WSGIApplication(
    [
        ('/_ah/warmup', MyWarmUpCode),
        # Other handlers
        # ...
    ]
)

Próximas etapas

Guarde valores em um armazenamento de dados em memória, como o Memcache, assim, você garante ao aplicativo acesso rápido aos dados sem precisar de consultas.

Por exemplo, se você guarda uma lista dos artigos em alta atuais do seu site, é possível criá-la no aquecimento e armazená-la no Memcache. Quando uma solicitação de usuário é recebida, o App Engine não precisa realizar consultas de armazenamento de dados, e o aplicativo atende à solicitação com mais rapidez.

Esta página foi útil? Conte sua opinião sobre:

Enviar comentários sobre…

Ambiente padrão do App Engine para Python 2