【发布时间】:2017-05-15 19:34:29
【问题描述】:
假设我有一个带有 API getName(String id) 的宁静服务 X。我的代码部署到负载均衡器后面的 5 台机器上。相同的客户端代码在这些机器上运行,并且在某处它为 getName(String) api 调用服务 X。该服务设置了一个限制,即每秒最多处理 3 个调用。假设一个请求的周转时间是 200 毫秒,我如何确保我的客户端不超过服务器的 3 TPS 限制?我没有让我的客户相互交流的机制。如何避免服务器端的节流。如果我将机队规模从 5 个增加到 10 个或 15 个怎么办?有什么我可以做的吗?
截断指数退避对我有用吗?
【问题讨论】:
-
指数退避确实适用于客户端重新尝试访问您的服务的情况......并防止频繁重试压倒您的服务......在您的情况下,您需要禁止更多比每秒调用数完全正确....每秒从任何 IP 接收的调用数不超过 3 次??
-
我负责客户端。我将如何确保我每秒拨打的电话不超过 3 次是我的问题,你为什么要问它,哈哈。我不知道如何确保,这就是我要问的
-
如果您每秒拨打超过 3 个电话会发生什么?您是否收到标识问题的错误,您可以稍后重试请求吗?失败的请求是否计入每秒 3 次调用?
-
是请求在服务器端被限制/丢弃,我作为客户端得到一个异常。目前在我的客户端我有一个简单的try-catch,在catch中我使用指数退避策略再次重试调用。不确定这是否是唯一/正确的方法
标签: java rest service distributed-computing throttling