sequelize / sequelize-pool

Resource pool implementation. It can be used to throttle expensive resources.
Other
38 stars 17 forks source link

maxUses based on time instead of uses #51

Open intellix opened 1 year ago

intellix commented 1 year ago

So we're having the exact same problem that maxUses seems to describe and we're going to implement it (pgbouncer instances are getting 4/5 and 1/5 split of traffic).

It looks great but feels quite difficult to implement dynamically (especially since a server may be long lived, how do you dynamically update the maxUses option based on traffic and how do you even get that data?).

Wouldn't it be much easier to just reconnect every 30 minutes instead of counting uses of a connection?

I'm not too versed in how this library works, but looking at the maxUsesPerInstance code, I believe it would be as simple as a setInterval to swap a flag from false -> true and then calling destroy on release()

sushantdhiman commented 1 year ago

If I understood correctly, you want to expire a connection after a given time regardless of how many time it was used. We have idleTimeoutMillis but I think it is not suitable for your case, when application is actively using resources this option will not work for cycling connections.

I'm not too versed in how this library works, but looking at the maxUsesPerInstance code, I believe it would be as simple as a setInterval to swap a flag from false -> true and then calling destroy on release()

Not sure about this idea, but I think we have two ways of solving this

I think (1) looks like a better approach, but it is also really similar to maxUses; implementation should probably provide option to either destroy resource by time or uses.