1

Мы создаем приложение, которое использует тяжелые серверные задачи (очереди задач), И в каждой задаче - мы делают ввод/вывод в Google Cloud SQL.Целевые очереди заканчиваются на «(2062,« Сбой кластера облачного SQL с ошибкой: нет такого файла или каталога »)«

В GAE есть ограничение на 12 одновременных подключений (не уверен, является ли это проблема? Я видел в https://stackoverflow.com/a/26155819/687692)

«» Каждый экземпляр App Engine работает в стандартной среде или с использованием Standard-совместимых API, не может иметь более 12 одновременных подключений к экземпляру Google Cloud SQL. "- https://cloud.google.com/sql/faq"

Из-за этой проблемы из-за этой проблемы мои основные задачи (100-500 задач в секунду) не работают.

Failing tasks

Кроме того, я проверил активное соединение за последние 4 дня: Я не вижу какой-либо из соединения будет более 12 соединений.

Last 4 days - GCS

Итак, что подход я должен предпринять, чтобы исправить это? Пул соединений (как это сделать в GAE с GCS?)? или какое-то другое исправление?

Любая помощь - руководство очень ценится. Дайте мне знать, если кому-то нужна дополнительная информация.

Спасибо,

+0

Ошибка вы упоминаете это обычно означает, что предел 12 соединение было достигнуто. Обратите внимание, что ограничение составляет 12 одновременных подключений в/экземпляр Engine Engine /, а не для всего приложения. Знаете ли вы, сколько запросов очереди задач обрабатывает каждый экземпляр App Engine в вашем приложении? Установил бы максимальный max_concurrent_requests для вас в соответствии с связанной записью? (Обратите внимание, что установка более низкого значения max_concurrent_requests может привести к увеличению числа экземпляров App Engine для обработки запросов). – Vadim

+0

max_concurrent_requests предназначены для интерфейсных экземпляров. В очереди «Мои задачи» запускается 100-500 задач за одну секунду. (Я надеюсь, что это не огромные числа для больших проектов) –

+0

max_concurrent_requests применяется к любому модулю с использованием автоматического масштабирования. Можете ли вы описать свою настройку немного больше? Используете ли вы бэкэнд (https://cloud.google.com/appengine/docs/python/backends/) или отдельный модуль для ваших обработчиков задач? Сколько задач - обработка каждого экземпляра в секунду (не общее количество задач)? – Vadim

ответ

1

Это не вероятно, что вы бы превысить предел 12 соединения со стандартными настройками масштабирования Engine Python App, если соединения обрабатываются должным образом.

Чтобы продемонстрировать, я создал small application, в котором перечислены многие задачи, при этом каждая задача получает соединение с базой данных и выполняет некоторую работу. Я могу запустить этот тест, не затрагивая проблемы подключения.

Необходимо удостовериться, что вы не испытываете утечки каких-либо подключений (т. Е. Не закрываете соединение в некоторых местах или когда происходят исключения).

Для MySQLdb, вы можете гарантировать, что вы не утечка соединений с помощью closingcontextlib из:

from contextlib import closing 

def getDbConnection(): 
    return MySQLdb.connect(unix_socket='/cloudsql/instance_name', db='db', user='user', charset='utf8') 

with closing(getDbConnection()) as db: 
    # do stuff, database is guaranteed to be closed 
+0

Я думаю, похоже, что это исправило мою проблему: но теперь вместо этого - я получаю новую ошибку: ** OperationalError: (2013, «Потерянное подключение к MySQL-серверу при чтении исходного пакета связи», системная ошибка: 38 ») **. Связано ли это с этим? –

+0

Как часто это происходит? – Vadim

+0

один раз трижды в день. –

Смежные вопросы