【问题标题】:Microservices With CosmosDB on AzureAzure 上的 CosmosDB 微服务
【发布时间】:2018-01-08 13:02:12
【问题描述】:

我读过一些关于微服务的文章,最喜欢的方法似乎是为每个微服务建立一个单独的数据库。对于 Azure 的 CosmosDB,这是否意味着每个服务都有一个单独的表?构建这个的最佳方法是什么?

【问题讨论】:

    标签: azure microservices azure-cosmosdb


    【解决方案1】:

    这里需要考虑各种各样的因素,这最终意味着这个问题没有正确的答案,而且它会非常具体地取决于您尝试构建的应用程序的性质。因此,试图提供“一般性”建议和模式的广泛陈述应该谨慎对待。对于 Cosmos,您在做出决定时需要考虑的许多高级事项如下:

    分区:Cosmos 集合支持基于选择适当分区键的几乎无限规模。因此,例如,您可以拥有一个集合并分离您的服务,以便它们每个都写入不同的分区键。这将为您提供一种可能非常适合您的特定应用程序的服务多租户形式。但是,吞吐量也在集合级别进行扩展,因此如果某些服务具有更高的读取和/或写入要求,这可能对您不起作用,并且可能表明该特定服务应该使用它自己的集合,该集合可以独立扩展。

    成本:您需要按照最低吞吐量要求按集合计费。根据您的微服务的数量和性质,这可能会导致成倍增加的成本而收效甚微。

    隔离:同样,根据您的应用程序的性质,您可能有一个严格的业务要求,即来自不同服务的数据在物理上彼此分离,这将迫使您使用单独的集合。

    我在这里要说明的一点是,这个问题绝对没有正确的答案。您需要在尝试构建的解决方案的上下文中非常仔细地权衡利弊,并选择适合您的方法。

    【讨论】:

    • 我的应用程序是一个简单的配方应用程序,它包含一个配方表和一个用户表(以及一些基本的支持表)。
    • 听起来使用 Table API 并不是您的应用程序的好选择。 Table API 基本上只允许您查询 PartitionKey 和 Id。您是否还希望能够查询您的食谱、用户等的实际属性?常规的 Document API 会是更好的选择。
    • @TrevorBrooks 您绝对可以使用 Table API 将看起来像类的实体放入 Cosmos。如果您选择走那条路线,稍后查询属性会很困难
    • 由于 CosmosDB 的文档数据库基础实际上并没有表的概念,我将模拟说每个微服务拥有一组类型,并且只有该微服务可以直接访问这些类型。其他人必须通过所有者微服务才能访问它们。
    • @LarryMaccherone 我绝对同意这是一种可能适合正在描述的应用程序的方法
    猜你喜欢
    • 2018-10-30
    • 1970-01-01
    • 1970-01-01
    • 2019-01-16
    • 1970-01-01
    • 1970-01-01
    • 2018-12-03
    • 1970-01-01
    • 2021-08-16
    相关资源
    最近更新 更多