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 que você encontre solicitações de carregamento, mesmo que as solicitações de aquecimento estejam ativadas em seu aplicativo. 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
min_idle_instances
como maior que 0
, poderá encontrar solicitações de aquecimento quando essas instâncias
forem iniciadas, mas elas permanecerão disponíveis depois desse tempo.
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á garantia 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 solicitações de aquecimento, adicione o elemento warmup
à diretiva inbound_services
no arquivo app.yaml
, por exemplo:
inbound_services:
- warmup
Como registrar o gerenciador
É possível registrar o script que processa as 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 ouvir solicitações de aquecimento no
caminho da 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
.
Seu gerenciador precisa executar qualquer lógica de aquecimento necessária para seu aplicativo.
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
# ...
]
)
A seguir
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.