Size: a a a

2020 May 22

I

Ilya in Haskell
Maxim Koltsov
Зачем хелс чек тут? Это разве не какой-нибудь кубер, в котором тот сервис запущен, должен делать?
Health check, чтобы через каждое соединение в пуле раз несколько секунд достать ресурс, который должен доставаться быстро. И делать это с маленьким таймаутом. Если не получилось, то коннекшн прибивать.
источник

AV

Alexander Vershilov in Haskell
Мне кажется это оверкил
источник

MK

Maxim Koltsov in Haskell
Ilya
Health check, чтобы через каждое соединение в пуле раз несколько секунд достать ресурс, который должен доставаться быстро. И делать это с маленьким таймаутом. Если не получилось, то коннекшн прибивать.
А, интересно
источник

AV

Alexander Vershilov in Haskell
Оно повышает надёжность но не очень сильно
источник

AV

Alexander Vershilov in Haskell
особенно под нагрузкой
источник

AV

Alexander Vershilov in Haskell
У меня и так коннекты гораздо чаще, чем раз в 1с дергаются ^_^
источник

MK

Maxim Koltsov in Haskell
У меня коннекты раз в день ^^
источник

MK

Maxim Koltsov in Haskell
И те от тестировщиков
источник

AV

Alexander Vershilov in Haskell
Тестировщики это хорошо!
источник

I

Ilya in Haskell
Alexander Vershilov
Но проблемы описанные выше остаются, аллокация нового ресурса может занять долгое время
А если делать health check с маленьким таймаутом на каждый запрос. Вот как Вы описали, только на BEGIN таймаут повесить?
источник

AV

Alexander Vershilov in Haskell
Не,мне timeout нужен в allocate, который передаётся в функцию создания пула
источник

AV

Alexander Vershilov in Haskell
BEGIN отвалится достаточно быстро если соединение приличным образом закрыто
источник

AV

Alexander Vershilov in Haskell
Alexander Vershilov
Не,мне timeout нужен в allocate, который передаётся в функцию создания пула
Кажется
источник

I

Ilya in Haskell
Alexander Vershilov
Не,мне timeout нужен в allocate, который передаётся в функцию создания пула
Ну так создали конекш в allocate и тут же дернули что-то быстрое с маленьким таймаутом.
источник

AV

Alexander Vershilov in Haskell
Так в allocate же висим
источник

AV

Alexander Vershilov in Haskell
т.е. на connect к мертвому хосту
источник

MK

Maxim Koltsov in Haskell
Какой-то у вас тут интерпрайз
источник

MK

Maxim Koltsov in Haskell
Фу
источник

I

Ilya in Haskell
Я могу подтупливать, но почему нельзя так?

connectionLoop = do
 conn <- withTimeout 1_SEC $ connect
 case conn of
   Just c -> return c
   Nothing -> creationLoop

healthyAction conn action = do
 withTimeout 1_SEC $ quickAction conn
 action conn

p = createPool creationLoop ...
withResource p $ \c -> healthyAction c realAction
источник

AV

Alexander Vershilov in Haskell
Ну я бы просто сделал connection = timeout 1_000_000_ connect
источник