Оптимизация высоконагруженного сайта: ошибки 429 на шине сообщений — стоит ли беспокоиться?

Я работаю над сайтом с довольно высокой нагрузкой (>150 тыс. просмотров страниц в день). Я получаю ошибки 429, в основном на шине сообщений. Ранее у меня были проблемы из-за неправильной конфигурации set_real_ip_from, но это уже исправлено. Я также удалил (возможно, временно?) шаблон ограничения частоты запросов.

Я всё ещё наблюдаю около 0,5 ошибок 429 в секунду.

У меня 5 рабочих процессов Unicorn на процессоре с 2 ядрами и 4 потоками. Оперативной памяти 16 ГБ. Postgres находится на отдельном хосте. Загрузка процессоров остаётся ниже 50%.

Я удалил шаблон ограничения частоты запросов и увеличил количество рабочих процессов Unicorn до 5 примерно в 8:20.

Это совершенно нормально: message-bus будет делать паузу с кодом 429, так как ваши «единороги» испытывают высокую нагрузку и немного формируют очередь.

4 ядра с 16 ГБ ОЗУ — это довольно странное соотношение, если узел не работает с базой данных. Например, лучше 8/8.

Отлично! Спасибо. Процессор всё ещё сильно загружен обработкой изображений, что, надеюсь, должно занять день-два.

Всё верно. Но «голое железо» имеет 2 ядра/4 потока. Добавить ОЗУ легко, а вот ядра — нет (у меня дома есть ещё один сервер с 32 ГБ!). Я разделил базу данных и веб-сервер на две машины, чтобы получить больше мощности процессора. На том же сервере базы данных (веб-сервер на другом хосте) работает ещё полдюжины других баз данных с малотрафиковых сайтов. Как вы думаете, лучше ли запустить БД и веб-сервер на одной машине? Я, наверное, потеряю немного мощности процессора, но улучшу задержку.

Если у вас есть возможность использовать балансировщик нагрузки, то вы можете попробовать разместить веб-воркеры на обеих машинах для вашего высоконагруженного сайта, установив меньше воркеров на машине с базой данных, например, 5+2?

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

Что ж, эти машины, которые я получил бесплатно, уже немного устарели, так что я начинаю с этим смириться — хотя производительность одного CPU всё ещё кажется лучше, чем у DO droplet. Если бы решение проблемы за деньги в краткосрочной перспективе было вариантом, то, вероятно, у меня не было бы этого конкретного клиента, который хочет корпоративную производительность по бизнес-ценам. :wink:

Но я также вижу, что где-то ещё в цепочке я жёстко задал количество единорогов, поэтому я всё ещё запускаю только 3.

К сожалению, моя текущая конфигурация общается только с Docker на одном хосте. Мне стоило бы потратить немного больше времени и посмотреть, можно ли запустить пару единорогов и на другой машине. Наверное, уже пора снова взглянуть на HAproxy, но у меня есть ещё один проект, который я очень хочу запустить в первую очередь.

Огромное спасибо за ваши insights.

РЕДАКТИРОВАНИЕ: И когда я наконец перешёл на 5 единорогов вместо 3, графики производительности выглядят примерно так же (возможно, даже чуть медленнее?), но ошибки 429 значительно снизились. Похоже, как только обработка изображений будет завершена, всё будет работать отлично. :relieved:

И уже на следующий день количество ошибок 429 упало почти до нуля, так что совет Рафаэля «просто не волнуйтесь» оказался гениальным! Ещё раз спасибо, Кейн и Рафаэль. Я не могу выразить, насколько я ценю вашу помощь.