我想请求一个不受并发访问保护的Microsoft (用GET提取数据,然后用POST推送数据)。
为了防止任何奇怪的行为,我想在访问这个Api时使用一个锁。
我找到的最简单的方法(不弄错代码)是创建一个中间件服务(它将成为目标,而不是原来的服务)。当请求时,它可以将锁保存在redis中,并将请求转发到Microsoft。当它完成时,锁就被释放了。
然后,如果另一个请求到达服务器,它将被拒绝,我将能够执行指数退避,直到锁是空闲的。
我的问题是:我是否必须对这个东西进行编码,还是在现有的反向代理中可以找到这一特性?
发布于 2019-11-02 10:52:19
要以一种高度可用的方式来实现这一点,我相信您需要完成您编写的内容,并使用某种分布式锁来确定API是否在使用。
但是,如果不需要高可用性,则可以为该服务器使用一个将HAProxy设置为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;
}
}https://stackoverflow.com/questions/58650938
复制相似问题