我有一个关于微服务应用程序及其部署的一般问题。
基于该模式,由于松散耦合和关注点分离,每个微服务都应该有自己的数据库(如果需要)是明确的。但是,这些微服务和数据库是否可以独立分离并部署在单独的硬件节点上?
例如,如果我使用Docker,我是否可以将微服务X和相应的数据库X部署在两个不同的容器中,这两个容器位于具有不同IP地址的两台不同的机器中?
应该可以提供额外的费用。然而,让我好奇的是什么才能代表或反对这种方法呢?这样做会有收获吗?或者它只是一个过度工程?
例如,如果我使用Docker,我是否可以将微服务X和相应的数据库X部署在两个不同的容器中,这两个容器位于具有不同IP地址的两台不同的机器中?
是的,我建议您这样做,因为您的微服务和数据存储可以独立扩展,您可以独立设置监控,指标和警报(对于与该服务相关的指标)。
缺点:你会有一些网络延迟,你将不得不维护两个不同的“机器”。
注意:“两台不同的机器”是有争议的,因为您可能最终在同一物理机器中的两个不同的VM中,除非您使用自己的数据中心的裸机。
您被要求不共享数据库的原因是为了确保您仅通过api合同连接其他服务而不是其他任何服务,让您可以自由地更改api背后的任何内容。
现在,无论是在一个节点上部署所有服务还是在不同节点上部署,都不是由微服务决定的。它取决于您的要求,您的规模以及您希望系统具有多大的弹性。
如果需要扩展,可以通过多次在同一节点上部署相同的容器来实现,但这不会给您容错,您的计算机出现故障而您的服务已关闭。将它们放在两个不同的节点上,或者放在两个不同的地方,取决于您的要求。每一个都有利弊,这是你必须做出的选择。
今天的基础设施可以从你身上抽象出来。您在kubernetes上工作,如果您的应用程序部署在同一节点或不同节点上,您可能不知道或不必担心。您关注可用性,只要底层系统保证在某种程度上您应该是好的。