3 ms·
Is there something similar, but for outbound requests? The motivation is to be “polite” when accessing third party APIs regarding the rate limit.
by haolez 7y ago
Is there something similar, but for outbound requests? The motivation is to be “polite” when accessing third party APIs regarding the rate limit.
- dijit 7y agoA leaky bucket?
- Denzel 7y agoThey call this out as a use-case that's supported by Gubernator: Egress limiting – Blasting external SMTP servers with millions of messages is No Bueno.
- chosenken 7y agoI think this could be used for both incoming and outgoing requests. From what I gathered reading the docs and API, this doesn't actually forward your request to the API, it just keeps track of rate's and limits, leaving the actual limiting up to you. Its a microservice that keeps track of limits for you, and is highly distributed. Basically, and I can be totally wrong, what it looks like is you send a rate limit request stating I'm doing 1 hit, I can do 100 hits a minute, am I over limit? Gubernator responds with either a status 0 (no, under limit), how many requests you have left, and the time the rate limit will reset. Or it will return 1 (yes, over limit), the time the limit resets, and you then have to hold your request until the reset time. So you could use this as a self imposed rate limit for external services. I think the confusion is from the announcement, it sounded like this was a proxy type service that would hold your request until the limit was met. From what I read, it looks like you ask for the rate limit status, then its up to you to actually limit your requests.
- chatmasta 7y agoYou can use haproxy+squid for this purpose. Basically implement the rate limiting on haproxy and send requests to squid “backend” that is a forward proxy to the internet.
- haolez 7y agoI’m not familiar with these tools (yet). Why do I need a forward proxy (squid) connected to this haproxy instance?
- chatmasta 7y agoSquid is useful as a forward proxy for a number of reasons, like caching. Squid is often used for outbound proxying when you are anonymizing requests, i.e. you might have squid bound to multiple network interfaces. If all you need is rate limiting, you can probably skip squid.
- probablybroken 7y agoI'd usually use a queue + worker for this purpose. You will have to work out how to deal with old requests, backlogs, etc.. But then, if you are considering effectively forcibly making requests time out to internal servers, you will also need a strategy for handling that, retries, etc.