Комментарии 4
Не нашел 4 часть. Она существует?
Рабочий код для развертывания с Helm выложен в репозиторий https://github.com/romapres2010/goapp/tree/master/deploy/helm/app
Статью еще не писал.
Пакет conc не смотрели для этих целей?
Отличная библиотека – мне понравилась:
подходит для запуска группы «коротких» задач в режиме online – pool создается под набор задач, отрабатывает и удаляется
накладные расходы сопоставимы – от 300 ns на задачу. В моем варианте можно снизить до 150 ns – но это физический придел, на накладные расходы обработки каналов.
контроль за результатами работ task построен на sync.WaitGroup - это немного быстрее, чем через каналы, но экстренно остановить не получится
задачи shutdown и отработки timeout библиотека не решает – для нас это было критично
В первой реализации мы тоже запускали задачи через online pool – см. (*Pool)RunOnline, но столкнулись с проблемами:
Источником «длинных» задач у нас является внешний REST, если под каждый создавать отдельный Pool и сразу его стартовать, то резко растет расход памяти и cpu. Kuber пытается стартовать много новых Pod. Такой подход сразу «зарубили»
При остановке Pod online pool остановить не получится, пока sync.WaitGroup не разблокируется.
В моем шаблоне упор сделан на background pool который работает постоянно в фоне и принимает задачи. Можно создать несколько разных pool под разные классы задач (с разной concurrency, timeout, длинной канал очереди)
Шаблон backend сервера на Golang — часть 5 — оптимизация Worker pool