У меня есть приложение, которое работает с 2015 года. Оно читает и записывает приблизительно в 16 календарей через служебную учетную запись, используя библиотеку Google node.js (calendar v3 API).У нас также есть G Suite for Education.
Общий процесс:
- Каждые 30 секунд он кэширует все данные календаря с помощью операции списка
- Периодически ученик будетзапрашивая «слот» встречи, он сначала проверяет, открыт ли слот (посредством вызова по списку), а затем вставку.
Это все, что он делает.Он работал нормально до последних нескольких дней, когда вызовы API insert
начали давать сбои:
{
"code": 403,
"errors": [{
"domain": "usageLimits",
"reason": "quotaExceeded",
"message": "Calendar usage limits exceeded."
}]
}
Это не так уж много особенного - в документации есть три "решения":
- Подробнее об ограничениях использования календаря в справке администратора G Suite.
- Если один пользователь делает много запросов от имени многих пользователей домена G Suite, рассмотрите возможность использования службы.Учетная запись с делегированием полномочий (установка параметра quotaUser).
- Использовать экспоненциальный откат.
- Я не превышаю ни одного из указанных пределов, насколько ямогу сказать.
- Хотя я использую служебную учетную запись, она не выполняет запрос от имени пользователя.Учетная запись службы имеет доступ для записи в календарь и добавляет пользователя в качестве участника
- Наконец, я не думаю, что экспоненциальный откат поможет, хотя я не реализовал это.Время между запросом на вставку и следующим вызовом вставки измеряется в секундах, а не в миллисекундах.Кроме того, просто выполнение вызовов непосредственно из командной строки с помощью простого скрипта приводит к той же проблеме.
Некоторые характеристики:
2015 - 2,466 inserts, 186 errors
2016 - 25,747 inserts, 237 errors
2017 - 42,815 inserts, 225 errors
2018 - 41,390 inserts, 1,074 errors (990 of which are in the past 3 days)
Я обновлял код за эти годы, ноэтот термин в значительной степени не затронутпоследующие вызовы задерживаются на секунды и обрабатываются в очереди, которая последовательно обрабатывает запросы.Единственными одновременными запросами будут операции со списком.