Aco
@Aco
Заклинатель кода

Какой connection pool использовать?

На hightload проекте используется fasthttp. Всё хорошо, но у него нет пула коннектов (не путать с sync.Pool) что приводит к следующей проблеме: когда сервер надо перезапустить надо ждать пока все idle keep-alive коннекты сами не закроются.

По SLA (требование) на сервисе idle keep-alive коннекта - 1 минута. Как результат - безопасная перезагрузка сервера занимает 1 минуту. Также надо "проряжать" коннекты по требованию - отстреливать только keep-alive которые в idle.

У родного net/http есть пул коннектов на основе map. Однако map плохо работает с GC, об этом писали как-то раз ребята из Discord, да и сам автор fasthttp нелестно отзывается о map как о не дружелюбном к GC объекте. То есть пул коннектов нужен не на базе map, а, видимо, на неком списке.

С ходу не нашел каких либо реализаций пул коннектов. Нашел абстрактный go-commons-pool для любых объектов.

Кто-то заморачивался с пулом коннектов? Можете что-нибудь посоветовать?

PS сам автор fasthttp рекомендует выставить ReadTimeout чтобы завершать keep-alive , но изменение ReadTimeout не применяется уже на существующие idle keep-alive коннекты.
  • Вопрос задан
  • 254 просмотра
Пригласить эксперта
Ответы на вопрос 1
uvelichitel
@uvelichitel Куратор тега Go
habrahabr.ru/users/uvelichitel
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы