微服务-如何找到DNS IP?

微服务-如何找到DNS IP?,dns,microservices,service-discovery,Dns,Microservices,Service Discovery,在微服务的世界中,端点不应该(一定不能)硬编码。实现这一点的最佳方法之一是拥有一个DNS,并让每个微服务在启动时注册。每当微服务A想要与微服务B通信时,它都会这样做,它只要求DNS提供B当前侦听的端点 我不明白的是:微服务如何知道DNS所在的位置? 基本上DNS只是一个“特殊”服务,我可以有一个或多个实例,对吗?所以我不应该硬编码它的端点,还是应该?假设我这样做-如果DNS Instance被移动到不同的位置怎么办?我必须手动更改它在配置中的位置吗 有人知道如何设计这个吗?(或者有人能给我指一下

在微服务的世界中,端点不应该(一定不能)硬编码。实现这一点的最佳方法之一是拥有一个DNS,并让每个微服务在启动时注册。每当微服务A想要与微服务B通信时,它都会这样做,它只要求DNS提供B当前侦听的端点

我不明白的是:微服务如何知道DNS所在的位置?

基本上DNS只是一个“特殊”服务,我可以有一个或多个实例,对吗?所以我不应该硬编码它的端点,还是应该?假设我这样做-如果DNS Instance被移动到不同的位置怎么办?我必须手动更改它在配置中的位置吗


有人知道如何设计这个吗?(或者有人能给我指一下任何解释这一点的文档吗?因为尽管有很多关于微服务和dns的信息,但我在任何地方都找不到这些信息——也许这太微不足道了,我是唯一一个不了解的人)

已知主机名解决方案。固定部分是服务域名,例如
xservice.com
。您可以使用标准DNS工具(例如,
dig
在shell中等)查询此主机

最后,在绑定到
xservice.com
的DNS中,添加一条
SRV
记录,并提供更多详细信息

SRV
记录列出了所有服务详细信息,包括:

  • 标志性服务名称
  • 提供服务的机器的标准主机名
  • 服务可用的TCP(或UDP)端口
还有很多其他信息。有关完整列表,请参阅



请记住,这是一个有点静态的解决方案。如果您正在寻找一个更具活力的解决方案,那么Oswin的答案可能更适合:-)

DHCP解决了这个问题。当主机启动时,它发送一条广播DHCP消息。DHCP服务器响应多个值,其中一个值是DNS服务器的位置

对于微服务,将通过DHCP为DNS配置主机操作系统(或容器主机)。微服务代码使用OS DNS函数解析地址


如其他答案所述,可以手动设置DNS,但我建议使用在所有方面都支持服务发现的基础设施。例如,kubernetes内置了DNS支持,可以很容易地公开由任意数量的POD组成的服务

kubernetes这样的基础设施技术也将使微服务体系结构风格的许多其他方面更易于实现,包括高可用性和可扩展性


有关更多信息,请咨询官方。

您可以使用本地网络,通过Dhcp和其他方式发现服务。但这要求所有服务都已在该DNS服务器中“注册”

微服务可以通过服务发现、服务器端或客户端找到彼此。如果您选择客户端服务发现,您可以使用这样的工具,它提供了一系列优秀的功能。其中一个是DNS端点,它允许通过
SRV
记录查询
.concur.service
域名

领事有自己的DNS端点,您可以配置您的服务来使用它(通常在本地8600端口上,因为领事代理在本地运行)


但您也可以配置一个实际的DNS服务器,将问题转发给领事,这样您就可以轻松地将领事的服务发现驱动与
Bind
实例或类似实例中的手动设置服务混合使用。

完全同意服务发现在许多方面胜过DNS。