2

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

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

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

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

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

我一直在考虑在所有服务器之间划分配额并在内存中维护每个服务器的配额约束。但是我将如何处理服务器故障,重新启动?

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

请告知我是否朝着正确的方向前进?

4

1 回答 1

0

分片配额是完成此任务的一种完全可以接受的方式。许多在线服务根据数据的划分方式来划分配额。例如,我相信 DynamoDB 分区配额基于哈希键,因为这是他们物理划分数据的方式。

另一件需要考虑的事情:超过全球配额有多大的罪过?会不会影响计费?它会杀死您依赖的某些服务吗?

在我构建/维护的服务中,我在服务器之间划分事务配额,每个服务器会定期更新它对服务器数量的估计。我不关心计费,但保护基础资源。因此,我计算了资源在不良网络事件期间可以处理多少吞吐量,并以此为基础确定配额。


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

于 2013-10-05T19:09:43.683 回答