从NodeJS服务器发现MongoDB服务器IP

时间:2019-07-10 19:40:29

标签: javascript node.js mongodb cloud service-discovery

我有一个MongoDB实例在DigitalOcean的云计算上运行。我的Node(Express)应用程序的另一个实例在另一个云计算上运行。有没有一种方法可以发现数据库的IP,而不必将其硬编码到我的应用程序中,因此可以更轻松地进行扩展?我知道您可以将实例连接到负载均衡器并对其进行硬编码,但这并不是理想选择,并且并非在所有情况下都可行,因为每次环境变化时都必须重新配置它。尽管我正在考虑,但我不希望做一些访问DigitalOcean API的事情,因为那是特定于平台的。我问的原因是,我想尽可能地使配置自动化,以便在每次创建/销毁实例时都不必进行大量配置。我使用的是静态IP,因此更改IP不会有问题。我正在研究诸如consul之类的服务发现系统,我可能会转向类似的东西,但我认为(领事)对我的应用来说似乎有些过时了,尽管我正在考虑这样做。

2 个答案:

答案 0 :(得分:2)

您可以使用环境变量来避免将值硬编码到代码中。当应用程序以dotenv之类的程序包启动时,可以从流程环境中加载这些值。

答案 1 :(得分:1)

发现Web资源当前IP的通常方法是使用DNS主机名。这不需要安装任何其他服务,并且只要主机名是可解析的,便可以使用公共IP或专用IP。有可用的低成本域名(少量美元/年),其中还包括将域名主机名(例如db.yourdomain.xyz)别名为Digital Ocean主机名或IP的服务。推荐提供程序不在Stack Overflow的范围内,但有很多。要比较的一个方面是续订价格,该价格通常比初始注册的价格高很多。

如果最终将MongoDB部署从独立版本升级到副本集,则MongoDB 3.6+支持DNS-based discovery format (SRV lookups),可让您更改副本集中的主机而无需重新配置客户端。

负载均衡器和服务发现系统对于管理单个服务器来说是过大的手段,但最终它们也通过DNS公开资源。例如,请参阅Consul's DNS interface(也包括SRV lookups,类似于MongoDB的基于DNS的发现格式)。您也可以通过对Consul API的HTTP请求执行服务发现,但这是更复杂的集成路径。

相关问题