【问题标题】:AWS Elastic Beanstalk - Shared counter variable between instancesAWS Elastic Beanstalk - 实例之间的共享计数器变量
【发布时间】:2019-10-16 12:48:06
【问题描述】:

我有一个 Python Flask 应用程序在 Elastic Beanstalk 上运行并启用了自动缩放功能。现在我想要一个全局计数器变量,它可以被所有正在运行的实例实时访问和更新。

我已经使用 AWS ElastiCache 查看了 Redis,但这对于我的用例来说似乎有点过分了,因为我必须存储一个计数器变量。我还研究了在其中一个 Beanstalk 实例上运行 Redis 的选项,但这是不可行的,因为 Beanstalk 可以在缩减时关闭实例。

实现此功能的最佳方式是什么?有什么方法可以在不使用 ElastiCache 的情况下摆脱困境?

【问题讨论】:

    标签: amazon-web-services redis amazon-elastic-beanstalk amazon-elasticache


    【解决方案1】:

    您是否考虑过使用 Amazon DynamoDB 表?

    它有Atomic Counters:

    您可以使用UpdateItem 操作来实现原子计数器——一个无条件递增的数字属性,不会干扰其他写入请求。 (所有写请求都按照它们接收的顺序应用。)使用原子计数器,更新不是幂等的。也就是说,每次调用UpdateItem,数值都会递增。

    您可以使用原子计数器来跟踪网站的访问者数量。在这种情况下,您的应用程序会增加一个数值,而不管其当前值如何。

    【讨论】:

    • 谢谢。我只是在调查它!会让你知道结果如何。
    • 使用 ElastiCache 和 DynamoDB 在价格和稳健性方面有何不同?
    • @payne DynamoDB 使用持久存储并且是一个区域服务(跨多个 AZ 运行),因此它具有很强的故障恢复能力。 ElastiCache 在“幕后”的 Amazon EC2 实例上运行,因此很容易出现潜在故障。如果您只是跟踪少量计数器,那么 ElastiCache 集群就太过分了。 DynamoDB 是完全托管的,您无需部署基础架构即可“使用”它。 ElastiCache 更适合缓存频繁访问的数据而不会撞到数据库。
    • @JohnRotenstein 很好的答案,谢谢!我一直在努力下定决心如何处理原子操作……看来我可能会让我的团队改用 DynamoDB。无论如何,我可以请您查看my other question about ElastiCache 吗?
    猜你喜欢
    • 2017-12-16
    • 1970-01-01
    • 1970-01-01
    • 2013-04-23
    • 2016-07-13
    • 2019-02-21
    • 1970-01-01
    • 1970-01-01
    • 2015-12-21
    相关资源
    最近更新 更多