Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 当客户端代码在多台机器上运行时,如何确保服务调用的上限?_Java_Rest_Service_Distributed Computing_Throttling - Fatal编程技术网

Java 当客户端代码在多台机器上运行时,如何确保服务调用的上限?

Java 当客户端代码在多台机器上运行时,如何确保服务调用的上限?,java,rest,service,distributed-computing,throttling,Java,Rest,Service,Distributed Computing,Throttling,假设我有一个带API getName(字符串id)的restful服务X。我的代码部署到负载平衡器后面的5台机器上。相同的客户端代码在这些机器上运行,并在某处为getName(String)api调用服务X。该服务限制每秒最多处理3个呼叫。假设请求的周转时间是200毫秒,我如何确保我的客户端不超过服务器的3 TPS限制?我没有让我的客户相互沟通的机制。如何避免服务器端的节流。如果我将车队规模从5个增加到10或15个呢?有什么我能做的吗 是否需要截断指数退避对我有效?您只需保存会话中最后3个请求的

假设我有一个带API getName(字符串id)的restful服务X。我的代码部署到负载平衡器后面的5台机器上。相同的客户端代码在这些机器上运行,并在某处为getName(String)api调用服务X。该服务限制每秒最多处理3个呼叫。假设请求的周转时间是200毫秒,我如何确保我的客户端不超过服务器的3 TPS限制?我没有让我的客户相互沟通的机制。如何避免服务器端的节流。如果我将车队规模从5个增加到10或15个呢?有什么我能做的吗


是否需要截断指数退避对我有效?

您只需保存会话中最后3个请求的请求到达时间。然后检查第四个请求是否在该1秒窗口内

假设t0是此时间线中的第四个请求(时间单位为毫秒)

…--t3--t2--t1--t0----


如果您想在负载平衡器中进行节流:一种解决方案是使用所有API实例通用的一些API/存储。

您只需保存会话中最后3个请求的请求到达时间。然后检查第四个请求是否在该1秒窗口内

假设t0是此时间线中的第四个请求(时间单位为毫秒)

…--t3--t2--t1--t0----


如果您想在负载平衡器上进行节流:一种解决方案是使用所有API实例所共有的一些API/存储。

指数退避实际上适用于客户端试图访问您的服务的情况……并且为了防止频繁重试压倒您的服务……在您的情况下,您需要禁止每次调用超过个第二完全正确…每秒不接受任何ip的呼叫超过3次??我负责客户端。我的问题是如何确保我每秒拨打的电话不超过3个,你为什么要回复呢?哈哈,我不知道如何确保,这就是我要问的,如果你每秒拨打的电话超过3个会发生什么?您是否收到识别问题的错误,是否可以稍后重试该请求?失败的请求是否计入每秒3次调用?是,请求在服务器端被抛出/丢弃,而我作为客户机会收到一个异常。目前,在我的客户端,我有一个简单的try-catch,在catch中,我使用指数退避策略再次重试呼叫。不确定这是否是唯一/正确的方法。如果客户正在尝试访问您的服务,则说明性回退适用于这种情况……并且为了防止频繁的重试压倒您的服务……在您的情况下,您需要禁止每秒超过3个呼叫完全正确……不允许每秒从任何ip接听超过3个呼叫??我会小心的客户端的。我的问题是如何确保我每秒拨打的电话不超过3个,你为什么要回复呢?哈哈,我不知道如何确保,这就是我要问的,如果你每秒拨打的电话超过3个会发生什么?您是否收到识别问题的错误,是否可以稍后重试该请求?失败的请求是否计入每秒3次调用?是,请求在服务器端被抛出/丢弃,而我作为客户机会收到一个异常。目前,在我的客户端,我有一个简单的try-catch,在catch中,我使用指数退避策略再次重试呼叫。不确定这是否是唯一/正确的方法
if ((t0 - 1000) > t3) {
    //4th req within 1 sec, so process the request
} else {
    //return HTTP status code 502(service temporarily overloaded)
}