1

假设您正在使用ServiceFabricKubernetes,并且您正在托管一个事务数据仓库微服务(可能是一个不好的例子,但假设它只是一个简单的 CQRS 架构,由发送者、接收者、日期和支付金额的 ID 组成,写道并读入数据库)。

为了论证的缘故,如果我们说这个微服务需要在不同的地理位置之间复制,以确保在一个数据库出现故障时数据可以恢复。

现在,我正在考虑的天真的方法是在接收到事务时触发一个事件,并且协调器微服务将在特定时间范围内接收事件处理的确认。但问题仍然是数据库呢?当我们扩展微服务并建立新的微服务实例时会发生什么?他们将写入同一个数据库,不是吗?

一种解决方案可以是将数据库放在 docker 中,让每个副本拥有它,这是一个好的解决方案吗?

请分享您的想法和最佳实践。

4

1 回答 1

2

当我们扩展微服务并建立新的微服务实例时会发生什么?他们会写入同一个数据库吗?

是的,您的服务实例都共享同一个逻辑数据库。为了实现高可用性,您通常会运行分布式数据库集群,但它会显示为您的服务的单个数据库系统。

一种解决方案可以是将数据库放在 docker 中,让每个副本拥有它,这是一个好的解决方案吗?

不,您通常希望您的所有服务实例都看到相同的一致数据。例如,发送到服务的两个不同实例的读取请求应该使用相同的数据进行响应。

如果数据库成为您的瓶颈,那么您可以通过实现缓存或分片数据来缓解这种情况,或者提供来自特定读取实例的读取请求。

于 2021-12-02T17:43:13.067 回答