【问题标题】:Scaling nodejs app while assigning unique ports在分配唯一端口的同时扩展 nodejs 应用程序
【发布时间】:2020-06-01 00:17:56
【问题描述】:

我正在尝试扩展我的游戏服务器 (nodejs),其中实例应该分配有唯一的端口,并且实例是独立的(没有任何类型的负载平衡)并且知道分配给它们的端口(最好是通过 env多变的?)。 我试过使用 docker swarm,但它没有指定端口范围的选项,我找不到任何方法来分配或将分配的端口传递给实例,因此它知道它运行的端口,例如通过 env 变量。

理想的解决方案如下:

Instance 1: hostIP:1000
Instance 2: hostIP:1001
Instance 3: hostIP:1002
... etc

现在,我已经通过绑定到主机网络并传递环境变量 PORT 来使用常规 Docker(非 swarm)来完成这项工作,但这样我就必须手动启动尽可能多的游戏服务器会需要的。

我的节点应用程序使用“process.env.PORT”绑定到主机的 IP 地址:端口

对我可以使用哪些解决方案来扩展我的应用程序有何看法?

【问题讨论】:

    标签: node.js docker port scaling swarm


    【解决方案1】:

    不确定你的意思是什么?你能提供更多细节吗?

    【讨论】:

    • 所有细节都在那里,如果您不知道我的意思,那么为什么要发布“不确定您的意思”?很明显你不知道
    【解决方案2】:

    你可以尝试不同的方法。

    • 使用 docker compose 和外部服务从docker.sock 中提取数据,这里建议How to get docker mapped ports from node.js application?
    • 使用 redis 或任何键值存储服务来存储端口信息,并在每次新实例启动时获取它。最简单的解决方案是使用 redis incr 命令获取下一个空闲号,但它有一些限制

    【讨论】:

    • 但正如我在上面的问题中所说,您提供的答案不适用于 docker swarm,因为它无法分配随机端口或者可以吗?
    • 我不使用 swarm,但它可能也适用于 swarm。在这种情况下,您不应该自己分配端口,如果您这样做,docker 会为您完成。实际上,您所有的“工人”容器都将使用映射到随机外部端口的相同内部端口。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-23
    • 1970-01-01
    • 2015-12-04
    • 1970-01-01
    • 2017-06-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多