gpt4 book ai didi

microservices - 为什么每个微服务都有自己的数据库?

转载 作者:行者123 更新时间:2023-12-04 12:25:20 26 4
gpt4 key购买 nike

似乎在传统的微服务架构中,每个服务都有自己的数据库,对数据的理解不同(描述 here)。有时,数据库复制数据被认为是允许的。例如,“用户”服务可能基本上了解用户的所有信息,而“帖子”服务可能只存储主键和用户名(例如,以便帖子的作者可以显示他们的姓名)。 This page讨论复制数据时的最终一致性、事实来源和其他相关概念。我知道微服务架构有时会包含共享数据库,但我看过的大多数地方都表明这是一种罕见的策略。

至于为什么每个服务通常都有自己的数据库,到目前为止我所看到的只是“这样每个服务都拥有自己的资源”,但我不相信 a) 服务层以任何方式“拥有”持久化的通过数据库访问的资源开始,或者 b) 服务甚至需要拥有它们需要的资源,而不是通过共享数据库访问主资源的必要子集。

那么微服务架构中的每个服务都应该拥有自己的数据库的一些理由是什么?

最佳答案

为每个微服务使用单独的数据库确实有意义有几个原因。他们之中有一些是:

缩放

在微服务中拆分您的域很好。您可以根据需要在已部署的 Web 服务器上扩展您的特定微服务或根据需要进行扩展。这显然是使用微服务的好处之一。更重要的是,您可以让 micro-service-1 运行在例如 10 个服务器上,因为它需要此流量,但 micro-service-2 只需要 1 个 Web 服务器,因此您将其部署在 1 个服务器上。好消息是你可以控制它,你可以管理你的计算资源,比如为了省钱,因为云提供商并不便宜。
考虑到这一点,数据库呢?
如果您有多个服务的一个数据库,则无法执行此操作。您无法像在一台服务器上那样单独扩展数据库。

数据分区以减小大小

当您在微服务中拆分域(每个包含 1 个数据库)时,您会自动拆分存储在每个数据库中的数据量。理想情况下,如果您这样做,您可以拥有具有较少计算能力和/或 RAM 的较小数据库服务器。
一般来说,支付多台小型服务器比一台大型服务器便宜。
因此,在这种情况下,您可以利用这一事实并节省一些资源。
如果域数据库已经存在大量数据技术,例如数据分片或数据分区,则可以额外应用,但这是另一个主题。

哪种数据库技术适合业务需求

这对于拥有多个数据库非常重要。它将允许您选择最适合您的业务需求的数据库技术,以获得最佳性能或使用。例如,某些特定的微服务可能有一些读取繁重的操作,具有非常复杂的过滤器选项和全文搜索要求。在这种情况下使用 Elasticsearch 将是一个不错的选择。其他一些微服务可能会使用 SQL Server,因为它需要 SQL 特定功能,例如跨国行为或类似功能。如果出于某种原因,您对所有服务都使用一个数据库,那么您将受困于特定的数据库技术,而该技术可能无法满足这些要求。这肯定是一种妥协。

开发者纪律

如果由于某种原因你有几个微服务可以共享他们的数据库,你需要处理人为因素。开发人员需要遵守纪律,不得跨域访问/修改其他难以实现和控制的微服务数据库(表、集合等)。在拥有大量开发人员的大型组织中,这可能是一个严重的问题。对于硬/物理拆分,这不是问题。

摘要

每个微服务都有数据库有一些争论,但也有一些反对。一般来说,使用微服务时的指导方针和建议是让微服务及其数据自治,以便在理想情况下独立工作(并非总是如此)。这显然是一种妥协,并且通常使用微服务。一如既往,规则就是规则,但也有异常(exception)。微服务架构非常灵活,并且非常依赖于您的领域需求和要求。如果您和您的团队认为将多个微服务数据库合并为 1 是有意义的,并且它解决了您的很多问题,那么就去做吧。

关于microservices - 为什么每个微服务都有自己的数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57421950/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com