необходимо смотреть накопленные задачи (которые копятся постоянно) и выполнять их в бэкграунде. В нынешнем исполнении запуск горутин в сервисе ничем не контролируется, просто запускается столько, сколько нужно, будет 1000 задач - запустится 1000 горутин, ну и я так понимаю под должной нагрузкой это быстренько всё схлопнется. Судя по прочтённым мною статейкам в гуглах, разруливают это всё запуском N-ого кол-ва "воркеров", которые будут читать буферизированный канал в который будут прилетать задачки. Вопрос: как оценивать емкость канала, кол-во воркеров и как эти параметры должны изменяться? Или может быть это хардкод какой-то "золотой середины" константой, как взрослые люди решают такие вопросы?
А зачем тикать? Буферизований канал все решит.
Тикает бизнес логика, условно, раз в 5 секунд необходимо проверять задачи, фетчить и отдавать воркерам делать их в бэкграунде. Но вопрос был не в этом.
Поправил вопрос, чтобы никого не запутывало "тикание"
кажется в том числе для этого взрослые изобрели кубернетис ) но вообще я бы дал тестовую нагрузку и посмотрел бы где и по каким параметрам проседание, оттуда бы уже стало понятней что и как тюнить
Ну до кубернетиса как-то решали же подобные проблемы?) Ну в общем, я правильно Вас понял, что тут метод тыка и наблюдений - единственный инструмент?
ну я не совсем сеньор-архитект, но в целом без конкретики задача звучит как "оптимизируй это" и ее сиквел "масштабируй это" )
Понял, и еще попутный вопрос, в тех же статейках пишут о "воркерах" как о статических сущностях, мол они созданы однажды и работают, т.е. всегда активны N-ое кол-во горутин вне зависимости от нагрузки (я понимаю, что в статейках задача обычно передать суть, а детали реализации уже дело каждого). Вопрос: кажется ли Вам, что нужно как-то менеджить подобные моменты или это экономия на спичках?
Возвращаясь. Задачи копятся— где? Чисто технически удобнее сразу класть их в буферизованный канал. Воркеры будут его читать сразу по необходимости и не нужно ничего тикать та sleep-ить
Вы зачем-то пытаетесь изменить задачу или переформулировать мой вопрос, ну и про sleep я не упоминал :) Задаем его проще, сколько воркеров нужно и какого размера нужен буферизированный канал? Какими критериями и способами найти нужные размеры и кол-во? Что будет если нагрузка изменится, каждый раз бегать тюнить?
Ответа на этот вопрос нет.
Решал кое шо схоже. Дайте часу - знайду
Если они у вас молотят данные, то максимум по количеству ядер. Иначе все сугубо индивидуально.
Смотрите свободную память и число ядер.
Обсуждают сегодня