sol*_*ald 1 javascript rabbitmq node.js
我从事 DevOps,我们的开发人员坚持认为,由于 Node.js 的缺陷,他们用 Node.js 编写的软件只能指向单个后端服务器,无论是数据库、Web 服务器还是 RabbitMQ 服务器。这对我来说听起来完全疯狂。这怎么可能?
local.js在文件中考虑这一点
rabbitmq:{
host: "rabbit01.stage",
port: 5672,
username : "user",
password : "pass",
exchangeName: "exchange_blah",
queueName: "queue_blah",
name : "rabbit",
max : 10
}
Run Code Online (Sandbox Code Playgroud)
将配置更改为
host: ["rabbit01.stage", "rabbit02.stage" ],
Run Code Online (Sandbox Code Playgroud)
破坏应用程序并尝试在上找到兔子服务器localhost:5672
我的 Google-fu 失败了,因为我不知道如何正确地将这个问题表述为可搜索的短语。
我在这里错过了什么吗?或者我们的开发者应该RTFM?
您正在寻找的(并且您清楚地知道这一点)是集群。您可以向您的开发人员推荐这篇文章:https ://www.rabbitmq.com/clustering.html
但是,下面有一个关键段落讨论了连接到集群配置:
通常,不建议将节点主机名或 IP 地址烘焙到客户端应用程序中:这会带来不灵活性,并且如果集群配置发生变化或集群中的节点数量发生变化,则需要编辑、重新编译和重新部署客户端应用程序。相反,我们建议采用更抽象的方法:这可以是具有非常短的 TTL 配置的动态 DNS 服务,或者是普通的 TCP 负载均衡器,或者是通过起搏器或类似技术实现的某种移动 IP。一般来说,管理集群内节点的连接超出了 RabbitMQ 本身的范围,我们建议使用专门为解决这些问题而设计的其他技术。
其要点是,开发人员应该只尝试维护与单个 DNS 条目的连接,并且应该使用某种基于 DNS 或 IP 的负载平衡来防止代码必须了解多个连接。
同一篇文章中列出了一些好处,其中大多数都归结为在代码中处理此问题会增加代码的复杂性。一般来说,负载均衡器更擅长做到这一点,因为它们是专门构建的,并且了解这样做的复杂性。
如果开发人员需要在代码中处理此问题,他们就必须编写负载均衡器或动态 DNS 查找的软件版本。与使用网络设备来处理需求相比,这更容易出现错误和误算。
所以...虽然你的 Node.js 开发人员可以做你想做的事情是正确的...但他们说他们不应该这样做是正确的,因为这样做是一个坏主意代码与在硬件/网络层中执行相比。
| 归档时间: |
|
| 查看次数: |
1003 次 |
| 最近记录: |