Esqueça, adoro os limites de tempo de solicitação do AppEngine

Estou executando aplicativos no Google AppEngine há quase três anos e, até agora, o limite de tempo de solicitação de 30 segundos é um incômodo ocasional, uma “limitação” da plataforma GAE a ser tratada de tempos em tempos.

Migrando activityinfo.org do Amazon Beanstalk para o AppEngine, entendi: é um recurso!

Finalmente, com fácil registro por solicitação e métricas no AppEngine, ficou claro que havia algumas consultas monstruosas que estavam sabotando seriamente o aplicativo conforme o número de usuários simultâneos explodia.

Um manipulador estava contando com o Hibernate para obter a lista de sites que foram atualizados desde a última sincronização, que pode ser na casa dos milhares, e o Hibernate estava felizmente emitindo uma consulta para buscar uma entidade relacionada PARA CADA LINHA – resultando em milhares de viagens de ida e volta para o servidor de banco de dados. Fácil de consertar, mas também fácil de perder quando o servidor não tem muito o que fazer.

No Beanstalk, essas consultas abaixo do ideal funcionam alegremente, martelando o servidor de banco de dados e monopolizando threads escassos no servidor de aplicativos, empurrando todos os outros para fora.

No AppEngine, essas consultas cancerosas são desligadas após 30 segundos, o erro é registrado e detectamos o problema durante os testes iniciais, não quando 50 pessoas estão em treinamento esperando que o servidor funcione.