我对微服务应用程序及其部署有一个一般性的问题。
基于这种模式,由于关注点之间的松散耦合和分离,每个微服务都应该有自己的数据库(如果需要)是明确的。但是,这对微服务和数据库对是否可以单独分离并部署在单独的硬件节点上?
例如,如果我使用Docker,能否将微服务X和相应的数据库X部署在位于两个具有不同IP地址的不同机器中的两个不同容器中?
有可能需要额外的费用。但是,使我产生好奇心的实际上是对这种方法的支持或反对?这样做会有所收获吗?还是仅仅是过度设计?
答案 0 :(得分:1)
例如,如果我使用Docker,是否可以部署微服务X和 对应的数据库X位于两个不同的容器中 拥有不同IP地址的不同机器?
是的,我建议您这样做,因为微服务和数据存储区可以独立扩展,并且您可以独立设置监视,指标和警报(对于与该服务相关的指标)。
缺点:嗯,您将有一点网络延迟,并且必须维护两个不同的“计算机”。
注意::“两个不同的机器”是有争议的,因为除非您在自己的数据中心中使用裸机,否则最终可能会在同一台物理机器中的2个不同的VM中运行。
答案 1 :(得分:0)
为什么不要求您共享数据库,是为了确保仅通过api合同与其他服务建立连接,而没有其他任何联系,从而使您可以自由更改api背后的任何内容。
现在,是将所有服务部署在一个节点上还是在n个不同的节点上,都不受微服务的约束。它由您的要求,规模和系统的弹性决定。
如果需要扩展,可以通过在同一节点上多次部署同一容器来做到这一点,但这不会为您提供容错能力,您的计算机将关闭,服务也会关闭。将它们放在两个不同的节点上,或放在两个不同的位置上完全取决于您的要求。 它们每个都有优点和缺点,这是您必须做出的选择。
如今,您可以从中提取基础架构。您正在使用kubernetes,可能不知道或不需要担心您的应用程序是部署在同一节点上还是在不同节点上。 您担心可用性,只要基础系统保证一定程度上您应该是好的。