Почему в Google App Engine стоит ограничение на 100 одновременных соединений с одного сервера к инстансу MySQL?

На этой странице написано: "Each App Engine instance running in a standard environment cannot have more than 100 concurrent connections to an instance". С чем связано такое ограничение и как его обойти?

Каждый MySQL-инстанс моего проекта хранит ровно 10 000 пользователей. Система распределяет пользователей по их ID. То есть: если ID пользователя равен 17 829, то информация о нем будет храниться во втором инстансе. Если ID равен 44 925, то в пятом и тд.

Если предположить что одновременно на один и тот же PHP-сервер пришло 400 запросов на выдачу информации о профилях пользователей, чей ID ниже 10 000, то будет выдана ошибка из-за упомянутого выше ограничения. Если это действительно так, то как можно обойти это ограничение? Я думал о создании несколько реплик чтения и просто распределять запросы, но это экономически невыгодно.

Благодарю


Ответы (1 шт):

Автор решения: Morewind

В таком случае делается очередь. Одна часть программы складывает запросы в список, другая часть берет запрос из списка и создает новый процесс с функцией обращения к БД которой передает запрос. Создает новые процессы пока не достигнет какого-то количества одновременно работающих процессов. Как только достигла, ждет пока их количество не уменьшится, в это время в список продолжают складыватся новые запросы.

Что бы не изобретать велосипед, можно взять готовую. Например -https://www.rabbitmq.com/tutorials/tutorial-one-php.html

Там принцип немного другой. Есть очередь и куча "слушателей" готовых выполнить запрос что попадает в очередь. Ограничив число "слушателей" ограничиваем число подключений к БД.

→ Ссылка