反向代理锁定功能

Reverse Proxy Locking feature

我想请求一个不受并发访问保护的 Microsoft API(使用 GET 提取数据,然后使用 POST 推送)。

为了防止任何奇怪的行为,我想在访问此 Api 时使用锁。

我发现的最简单的方法(不会弄乱代码)是创建一个中间件服务(它将被定位而不是原来的服务)。 当请求时,它可以在 redis 中保存一个锁,并将请求转发给 Microsoft。 当它完成时,锁被释放。

然后如果另一个请求到达服务器,它将被拒绝,并且我将能够执行指数退避直到锁被释放。

我的问题是:我是否必须对这个东西进行编码,或者这是一个可以在现有反向代理中找到的功能?

要以高可用性方式执行此操作,我相信您需要执行您编写的操作并使用某种分布式锁来确定 API 是否在使用中。

但是,如果不需要高可用性,您可以使用单个 HAProxy 实例并将 maxconn 设置为该服务器的 1。您还希望将 timeout queue 设置为较短的值,以便您可以处理 503 响应并执行您提到的指数退避。

backend microsoft_api_backend
    timeout queue 2s
    server microsoft_api 1.1.1.1:80 check maxconn 1

在 Nginx 中,你可以做一些等效的事情:

upstream microsoft_api {
  server 1.1.1.1:80 max_conns=1
  queue 1 timeout=2
}

server {
    location / {
        proxy_pass http://microsoft_api;
    }
}