【发布时间】:2018-01-08 13:02:12
【问题描述】:
我读过一些关于微服务的文章,最喜欢的方法似乎是为每个微服务建立一个单独的数据库。对于 Azure 的 CosmosDB,这是否意味着每个服务都有一个单独的表?构建这个的最佳方法是什么?
【问题讨论】:
标签: azure microservices azure-cosmosdb
我读过一些关于微服务的文章,最喜欢的方法似乎是为每个微服务建立一个单独的数据库。对于 Azure 的 CosmosDB,这是否意味着每个服务都有一个单独的表?构建这个的最佳方法是什么?
【问题讨论】:
标签: azure microservices azure-cosmosdb
这里需要考虑各种各样的因素,这最终意味着这个问题没有正确的答案,而且它会非常具体地取决于您尝试构建的应用程序的性质。因此,试图提供“一般性”建议和模式的广泛陈述应该谨慎对待。对于 Cosmos,您在做出决定时需要考虑的许多高级事项如下:
分区:Cosmos 集合支持基于选择适当分区键的几乎无限规模。因此,例如,您可以拥有一个集合并分离您的服务,以便它们每个都写入不同的分区键。这将为您提供一种可能非常适合您的特定应用程序的服务多租户形式。但是,吞吐量也在集合级别进行扩展,因此如果某些服务具有更高的读取和/或写入要求,这可能对您不起作用,并且可能表明该特定服务应该使用它自己的集合,该集合可以独立扩展。
成本:您需要按照最低吞吐量要求按集合计费。根据您的微服务的数量和性质,这可能会导致成倍增加的成本而收效甚微。
隔离:同样,根据您的应用程序的性质,您可能有一个严格的业务要求,即来自不同服务的数据在物理上彼此分离,这将迫使您使用单独的集合。
我在这里要说明的一点是,这个问题绝对没有正确的答案。您需要在尝试构建的解决方案的上下文中非常仔细地权衡利弊,并选择适合您的方法。
【讨论】: