考虑在服务器上为客户c1运行的服务,但客户c1在'S'秒后超时,因为客户再次触发相同的请求,因此服务器正在运行重复查询,因此它会过载,解决这个故障。请帮帮我!!!
答案 0 :(得分:0)
我假设您在服务器端,因此无法控制来自同一客户端的多个请求。
每个客户端都应该拥有与之关联的IP地址。在您的负载均衡器(如果有的话)或服务器中,您需要保留一个内存缓存,以跟踪所有请求,它们的IP地址,请求发起时的时间戳以及请求处理完成时的时间戳。接下来,您可以定义和适当的时间度量 - 对于您的所有请求,应该接近约70-80%的处理时间百分比。让我们说X秒。
现在,在您的loadbalancer / server接受任何请求之前,您需要检查此内存缓存是否相同的IP是否发送了相同的请求以及自上次请求以来经过的时间是否小于X.如果是这样的话不接受此请求,而是发送一个自定义错误,说明"之前的请求仍在处理中。请过一段时间后再尝试#34;。
如果IP地址不足以识别客户端,因为同一客户端可能正在向服务器上的不同端点发送请求以获取不同的服务,那么您需要存储另一个标识符,这可能是一种令牌/会话标识符 - 例如c1或客户ID。理想情况下,客户可以在任何1个时间点从1个IP地址向端点发送1个请求。如果您有移动和Web界面,那么您可以将频道类型(网络/移动/平板电脑)添加到识别参数列表中。
现在, - 客户ID(c1),IP地址,请求URL,请求时间,通道类型的组合对于进入的请求始终是唯一的。使用缓存中所有这些参数的键来唯一获取请求的信息并验证是否开始处理请求或发送自定义错误消息以防止服务器因重新请求而过载 - 应解决上面定义的问题。
注意 - ' S'秒,即客户端超时 - 假设客户端超时不在我们的控制范围内 - 不应该关注服务器端,并且与我上面详述的设计无关。