【问题标题】:Sails app with multiple instances on AWS - Redis/Elasticache/ALB在 AWS 上具有多个实例的 Sails 应用程序 - Redis/Elasticache/ALB
【发布时间】:2017-01-08 14:17:38
【问题描述】:

我正在构建一个使用 socket.io 的 Sails 应用程序,并看到 Sails 提供了一种通过 redis 使用多个服务器的方法:

http://sailsjs.org/documentation/concepts/realtime/multi-server-environments

由于我将把应用程序放在 AWS 上,最好使用 ELB(弹性负载均衡器)和具有多个 EC2 实例的自动缩放组,我想知道如何处理它而不需要单独的 redis 实例?

也许我们可以使用 AWS Elasticache?如果是这样 - 这将如何完成?

现在 AWS 已经发布了具有 websockets 的新 ALB 应用程序负载均衡器,这可以用来帮助简化事情吗?

提前致谢

应用程序用例更新

  1. 允许最终用户从他们自己的仪表板动态更新数据 并向管理员实时显示分析/统计数据

  2. 应用程序状态'根据特定时间更改,例如。在一个 给定应用允许用户更新数据的开始日期/时间。

【问题讨论】:

    标签: amazon-web-services redis sails.js amazon-elb amazon-elasticache


    【解决方案1】:

    关于您的第一个问题,您不想在运行 Sails 的同一台服务器上运行 Redis,尤其是在您使用 AutoScaling 时。 Redis 服务器需要是一个单独的服务器,如果您的环境遇到“缩减”事件,它不会消失。所以 Redis 将不得不在某个地方的一个单独的“服务器”上。

    ElastiCache 只是运行 Redis 的独立 EC2 实例,AWS 为您处理大部分管理工作,以至于您甚至无法通过 SSH 访问实例。它类似于 RDS 的工作方式。 ElastiCache 肯定适用于您的场景。您可能还想查看第三方服务 RedisLabs,它还为您管理 AWS 上的 Redis 实例。

    关于您的第二个问题,Application Load Balancer 不会影响您的 Redis 使用。然而,它会带来对 WebSockets 的实际支持,这听起来像是您正在使用的。所以是的,你应该使用 ALB 而不是 ELB。

    【讨论】:

    • 感谢 Mark 的回复,听起来 ElastiCache 在这里可能会有所帮助。虽然我知道 ElastiCache 或 Redis 可以显着提高性能,但我有点担心数据丢失,因为最终我们仍然只是在谈论内存中的数据。我了解 Sails 团队决定使用 socket.io-redis,但仅此一项就足够了,还是我们还必须有一些备份解决方案?我问的原因是因为考虑过其他解决方案,例如 AWS Kinesis 和 SQS。显然使用内置 Sails 功能会更容易,但不想做出任何牺牲......
    • 您应该使用 Redis 来缓存数据以便快速访问,并使用 MySQL 之类的数据库来长期存储数据。这样你就可以在不丢失数据的情况下快速访问 Redis。我不确定您为什么还要考虑 Kinesis 和 SQS 担任同一角色,因为它们是完全不同类型的服务。也许您需要在您的问题中添加更多关于您的确切用例的详细信息。
    • 抱歉耽搁了@Mark。我在上面添加了 2 个主要用例。对于 #1 redis 或 elasticache 可能有用吗?由于实时元素和流式传输大数据,我考虑使用 Kinesis。然而,此时这似乎有点过头了,所以我宁愿把它放在桌面上:) AWS SNS 怎么样?做一个 pubsub 实现来处理这个可能会更好吗?这也避免了必须管理单独的 redis 实例......但是 Sailsjs 已经很容易支持 socketIO.redis 所以它可能更容易实现......任何想法将不胜感激。再次感谢!
    猜你喜欢
    • 2018-09-09
    • 2020-09-07
    • 2020-06-26
    • 2019-05-20
    • 1970-01-01
    • 2022-07-30
    • 2019-04-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多