首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用IP地址和域名进行微服务通信

使用IP地址和域名进行微服务通信
EN

Software Engineering用户
提问于 2021-11-13 17:19:40
回答 3查看 863关注 0票数 1

我们在单独的机器中有微服务,这些机器目前使用配置中的IP地址通过REST进行通信。还有为这些机器定义的域名。

使用IP地址进行通信是一种良好的做法,还是在IP地址发生变化时应该使用域名?

他们之间的利弊是什么?

EN

回答 3

Software Engineering用户

回答已采纳

发布于 2021-11-13 17:31:51

我会用DNS。

只要这些IP地址在您管理IP地址分配的私有子网上,使用IP地址就很好。他们不会随意改变--你在分配地址。

然而,IP地址可能很难记住。这是不明显的服务,一个给定的地址有关。这会增加部署或维护系统时出现错误配置的风险。

DNS非常好,因为DNS允许您为您的服务提供很好的助记符名称。你可以拥有db.invoicing-service.cluster2.internal.example.com。这比10.0.37.129好。虽然在这里它可能与此无关,但是使用域名可以在同一台机器上部署多个HTTP服务。

许多管理服务的工具都内置了DNS,例如Kubernetes。

使用DNS的缺点是,这会带来额外的复杂性,也可能导致配置错误。太多时候,问题是DNS吗?必须用“是”来回答。特别有趣的是DNS数据库中陈旧的数据,例如当服务被关闭但DNS条目仍然保留时。在评论中,您会对DNS请求引起的额外延迟表示关注,但这通常不是数据中心内部的问题,特别是在DNS结果是本地缓存的情况下。

票数 8
EN

Software Engineering用户

发布于 2021-11-13 20:54:34

IP地址可能会更改,DNS名称更改的频率要小得多。

直接使用IP地址的唯一“优点”是,您不需要进行DNS查找,这在第一个请求之后从本地缓存中非常快。

如前所述,IP地址也更难记住(尽管一些公司的内部DNS名称有极其繁琐的方案,但这并没有帮助)。

票数 3
EN

Software Engineering用户

发布于 2021-11-14 09:08:09

当真正的问题是微服务体系结构互连时,每个人都专注于DNS和IP。

也就是说,没有公开的互联网地址

因此,您可能永远不需要DNS记录来让微服务进行通信,因为它们可能驻留在同一个域中,因此强制DNS在不需要它的地方会增加不必要的复杂性。

微服务通常在本地IP地址范围内进行通信,如果它们离开主机的话。许多答案中包括容器,这意味着通信甚至可能永远不会离开服务器主机(从不遍历网络电缆),甚至连一个具有多个端口的Kubernetes节点也不例外,与其他答案相反,DNS在Kubernetes中是完全可选的。

不用说,即使在一个实际的网络上进行通信时,它也可能永远不会穿越互联网。

即使在使用DNS时,无论网络环境如何,如果服务器IP地址是静态的,DNS记录也没有什么好处。

那么,问问自己,服务器是静态的吗?

微服务通过网络进行通信吗?

在网上?

DNS记录管理是否通过因特网路由?

是否应该使用公共互联网可访问的DNS记录来访问微服务?

DNS记录是否在内部DNS解析器上管理?如果微服务必须仍然无法从internet访问,这是DNS选项的一个要求。

使用一个IP的多个服务不需要使用DNS,这只是缺乏对其他答案的理解。Kubernetes节点是一个单一主机,1个IP,即使不使用DNS,也可以从这1个主机和单个IP响应,因为容器使用网络覆盖是可寻址的(与您在家里的NAT路由器相似的概念允许许多设备在ISP给您的一个IP地址之后工作)。

在TLS通信中也有SNI的概念,它将帮助您在一个IP之后运行许多服务,因为TLS使用的是TCI/ IP,它已经不知道DNS,但是它可以工作(因为SNI,而不是DNS)。

服务网格和反向代理(如负载均衡器)是其他选项,有时可以使用DNS,但也可以在同一个IP地址或单个域上使用URL路径,但后面有许多微服务。

票数 -2
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/433511

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档