3

我仍在努力寻找解决微服务的方法。我有一个基本问题。

在企业场景中,微服务可能必须写入持久数据存储——无论是 RDBMS 还是某种 NoSQL。在大多数情况下,持久数据存储是企业级的,但是是单个实体(当然是复制和备份的)。

现在,让我们考虑部署到私有/公共云环境的单个微服务的情况,该环境拥有自己的持久数据存储(比如企业级 RDBMS)。当我扩展我的微服务时,会有多个微服务实例尝试从同一个数据存储中读取/写入。传统的数据存储可能可以调整为处理约 50-200 个并发连接。当我的微服务必须扩展得远远超出这个范围时,我该如何处理?

在这种情况下,最佳实践是什么?有什么可以使用的模式吗?

4

1 回答 1

1

理想情况下,每个微服务实例都是自包含的,这样每个实例都可以独立于其他实例进行扩展,同时还可以封装其状态,以便其他人只能通过定义良好的 API 访问它。因此,您不仅需要弄清楚如何扩展您的微服务用于存储状态的数据库,如果您真的想确定这种架构模式,您还需要解决这个封装问题。

您是否查看过Service Fabric来解决此问题?Service Fabric 有状态服务的概念数据实际上存储在每个微服务实例中。该平台为 HA 自动处理复制和磁盘持久性,并且还具有内置的数据分区以跨机器分布。这个想法基本上是放弃中央数据库,而是将您的计算和数据放在一个微服务实例中。现在您的服务是自包含的,并且突然间该解决方案很好地适应了这种架构模式,因为现在每个微服务实例都可以独立扩展和升级,并且您可以将数据完全封装在服务中。当然,权衡是您没有获得成熟 RDBMS 的功能集,但如果您正在考虑使用 NoSQL 存储,那应该没什么大不了的。

我对此的想法一直是,像数据库这样的中央存储在无共享微服务架构中有点反模式。不过完全披露:我在 Service Fabric 上工作,所以我的意见可能有点偏颇!

于 2016-05-06T18:55:50.173 回答