微服务复制:数据库呢?

Microservices Replication: What about the Database?

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

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

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

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

请分享您的想法和最佳做法。

what will happen when we will scale out the microservices and a new microservice instances will be raise up? they will write to the same database?

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

One of solutions can be to put the database within the docker, and let it be owned by each replica, is this a good solution?

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

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