预算限制水平扩展

时间:2013-09-20 16:43:32

标签: java distributed distributed-computing distributed-caching distributed-system

我正在构建一个Web服务,该服务每天为不同的注册用户回答特定数量的请求。每个用户都有每日配额,所以我需要满足这些限制。

我计划通过以循环方式添加更多服务器和负载平衡来水平扩展它。

我将拥有一个具有分布式计数器的分布式数据库。该数据库将仅用于每天报告计数。

服务器每秒处理2到3k个请求。因此,在提供每个请求时,他们需要最新的耗尽配额计数,以免超过配额。

我想阻止来自每个服务器的任何进程外调用,以便服务请求的延迟很低。

我一直在考虑在所有服务器之间划分配额以及在内存中维护每服务器配额限制。但是我如何处理服务器故障,重启?

从每个服务器通过网络查询另一个数据库的过程是否更好?我所观察到的是,在这种情况下,延迟会急剧增加。

如果我朝着正确的方向前进,请提出建议吗?

1 个答案:

答案 0 :(得分:0)

分配配额是实现这一目标的完全可接受的方式。许多在线服务根据数据的划分方式对配额进行分区。例如,我相信DynamoDB基于哈希密钥对配额进行分区,因为这是他们对数据进行物理划分的方式。

另一件需要考虑的事情是:超越全球配额会有多大的罪恶?账单会搞乱吗?它会扼杀你依赖的服务吗?

在我构建/维护的服务中,我在服务器之间分配事务配额,每个服务器定期更新它对服务器数量的估计。我不关心计费,而是保护底层资源。因此,我计算了在一个糟糕的网络事件中资源可以处理多少吞吐量并根据配额。


你会注意到你在这里做了一个基于CAP定理的决定。您想要配额的一致性,可用性和分区容忍度如何?您可以放松以下三个限制中的哪一个来满足客户的需求? (在这种情况下,您的客户包括您的依赖项。)