Программно предотвращает исчерпание выделенных квот Google App Engine - PullRequest
5 голосов
/ 08 февраля 2011

Я работаю над приложением gae, использующим python. Приложение включает в себя некоторую систему сбора данных с использованием краудсорсинга, и данные, используемые в приложении, предоставляются пользователями по всей стране. Сейчас я использую квоты по умолчанию (бесплатно), но столкнулся с проблемой обеспечения как минимум 99% времени безотказной работы моего приложения.

Сложность состоит в том, что Google блокирует любые дальнейшие запросы, направляемые в ваше приложение, после того, как вы исчерпали свои выделенные квоты, и во время недавнего увеличения объема тестирования один человек смог создать сценарий автоматической публикации, который быстро исчерпал квоту ЦП - после , приложение будет обслуживать только HTTP 403 Forbidden status code for the request instead of calling a request handler. Теперь я исправил систему, чтобы не разрешать автоматические публикации, но как я могу гарантировать, что пользователи не будут вызывать подобное «отключение» во время производства?

Я знаю об API квоты, но думаю, что он может дать мне только информацию о профилировании для моего приложения. Мне нужен способ замедления скорости запросов (например, за минуту для поминутных квот) без показа страниц ошибок или отключения электроэнергии.

Есть предложения?

1 Ответ

5 голосов
/ 08 февраля 2011

Одним из распространенных решений этой проблемы является делегирование задач с ограниченной скоростью taskqueue .

Например:

queue:
- name: mail-throttle
  rate: 2000/d
  bucket_size: 10
- name: background-processing-throttle
  rate: 5/s

Таким образом, вы можете контролировать использование всех частей вашего приложения, заставляя их оставаться в диапазоне доступных квот.

Несколько предостережений:
1. Очереди доставляют максимум усилий по заказу FIFO
2. Постановка / выполнение задачи засчитывается в несколько квот

...