Ограничения параллелизма Google Cloud SQL / App Engine
Я использую Google App Engine для размещения своих API и продолжаю бороться с ограничением одновременных подключений к базе данных. В документах говорится, что вы можете иметь до 12 одновременных подключений на "экземпляр механизма приложений" ( https://cloud.google.com/sql/faq), но я не совсем уверен, что это значит.
Я использую GoLang, и мое приложение является транзакционным, поэтому ограничение в 12 одновременных подключений к базе данных фактически означает менее 12 одновременных подключений API. Это действительно низко и кажется не в ногу с другими ограничениями скорости Google, которые довольно щедры.
Каждому отдельному процессу не требуется больше, чем одно соединение с базой данных, поэтому, если есть способ порождать несколько "экземпляров", все будет в порядке. Но я не совсем уверен, что это означает и относится ли это ко всем службам, объединенным в пул, каждому отдельному сервису, каждому обработчику и т. Д.
Заранее благодарю за любую помощь. Дэн
1 ответ
Экземпляр является базовым строительным блоком вашего приложения App Engine и относится к компьютеру, на котором выполняется версия вашего кода в одной из служб, составляющих ваше приложение App Engine. Одной из особенностей App Engine является возможность масштабировать ваше приложение вверх или вниз, чтобы удовлетворить спрос. Это достигается созданием и закрытием экземпляров в соответствии с конфигурацией масштабирования, выбранной вами при развертывании приложения.
Поскольку вы говорите, что работали с ограничением в 12 соединений на экземпляр, я предполагаю, что это означает, что App Engine определил, что ваш экземпляр должен обрабатывать более 12 запросов одновременно. Чтобы избежать этого сценария, вы должны установить max_concurrent_requests равным 12 или ниже в вашем app.yaml и обязательно завершить все соединения, как только вы закончите с ними. Таким образом, ни один экземпляр не должен пытаться использовать более 12 подключений к базе данных одновременно.
Обратите внимание, что это ограничение применяется только к стандартной среде App Engine, а это означает, что экземпляр, работающий в гибкой среде, не будет подвергаться этому ограничению для каждого экземпляра и может надлежащим образом обрабатывать подключения, пока приложение не сочтет необходимым создание другого экземпляра. Двигатель.