如何在多个服务器实例之间保留“计数器”变量?

时间:2019-03-28 16:54:13

标签: amazon-web-services server architecture load-balancing

我们正在为移动应用程序建立后端体系结构以进行连接,但是我们需要一些帮助。我们的应用程序旨在模仿您在熟食店或药房看到的“带号码”票。用户将使用我们的移动应用程序将请求发送到我们的节点控制器,然后我们的节点控制器将以现货号进行响应。

我们目前在Amazon Elastic Beanstalk上设置了节点控制器,并已启用负载平衡以处理请求激增。我们的问题是:如何在节点控制器的多个实例之间持久保存spotNumber?我们现在已经将其构建为一个从1开始并随每个请求递增的局部变量,但是如果AWS启动我们的节点控制器的新实例以处理增加的流量,该变量是否会持续存在?如果没有,那么在服务器的所有潜在实例中保留spotNumber的最佳实践是什么?

提前谢谢!

2 个答案:

答案 0 :(得分:1)

使用数据库。

显然,您不能将值存储在节点应用程序中,这不仅是因为扩展,而且是为了防止如果应用程序意外关闭而导致数据丢失。

听起来好像您还没有数据库,所以DynamoDB可能是一个不错的选择,只要您的唯一用例是在应用程序之间共享计数器。您可以找到示例here

您也可以使用Redis on Elasticache,但我认为对于单个计数器来说这太过分了。

答案 1 :(得分:0)

保持不同规模的准确计数器可能需要不同的实现。在小规模上,应用程序中的简单会话变量和锁定逻辑就足够了。但是,在更大范围内,会话同步和锁定可以通过数据库更好地管理。特别是对于您的情况,DynamoDB conditional writesRedis counters似乎很有用。但是,请保持您的要求简单明了,大规模管理计数器可能需要使用带有有趣名称的算法和数据结构,例如HyperLogLog

相关问题