微服务的数据库设计[关闭]

2023-12-31

我想了解微服务的数据库设计。下面给出了场景

微服务A使用mysql数据库。如果我要创建微服务 A 的多个实例:

  1. 每个微服务A应该指向同一个数据库(所有实例的公共数据库)或

  2. 每个微服务A都指向自己的私有数据库

如果每个微服务实例都指向自己的私有数据库如何同步每个实例的数据?你能解释一下最好的方法吗?


我正在创建微服务 A 的多个实例:

我认为您的意思是,如果您将微服务 A 的多个实例作为该微服务的单独实例部署到一台或多台服务器上?

简短回答:

一般来说,每个微服务都应该有一个数据库。这意味着你的微服务A有一个数据库(我们称之为)微服务-A_db。 无论您的微服务-A 部署到多台服务器(水平扩展)还是部署在一台服务器上,微服务-A 的部署实例都会访问和使用您的一个数据库微服务-A_db。
微服务 A 的所有实例都应访问同一数据库。这是标准且最常见的用例。但也有例外。

长答案:

每个微服务A应该指向同一个数据库(公共数据库 对于所有实例)或

简而言之,是的。

每个微服务A都指向自己的私有数据库

简而言之,没有。但...

如上所述,如果您的意思是微服务 A 的多个实例应该将每个实例都指向私有数据库,那么“否”。你不应该那样做。

一般来说,您的应用程序域/业务逻辑根据某些标准分为微服务。一旦您将系统拆分为每个域的多个微服务(您可以阅读它here https://stackoverflow.com/questions/56509701/how-small-a-micro-service-should-be/56668521#56668521)每个微服务只负责域的那部分,意味着与其及其存储相关的所有逻辑。让我举个例子。假设您有一个在线商店应用程序并且有 3 个微服务:

  • 产品-库存-微服务
  • 支付微服务
  • 订单微服务

每个微服务都有自己的数据库:

  • 产品库存微服务 具有库存微服务数据库
  • 支付微服务有支付微服务数据库
  • 订单微服务有订单微服务数据库

这些数据库只能由他们使用owner微服务。如果微服务作为单独的进程/实例部署在一台或多台服务器上,那并不重要。他们都访问同一个数据库。另一方面,您肯定可以使用许多不同类型的微服务数据库部署,例如拥有多个只读副本、使用分片来分区数据等等。有很多方法可以扩展数据库。关键是微服务只能使用自己的数据库。

除此之外,我可以说这个规则也有例外:1 个数据库 - 1 个微服务。有时人们每个微服务域使用 2 个数据库。在这些示例中,第二个数据库是针对特定读取/查询操作的某种读取优化数据库。这通常与 CQRS 模式一起使用。如果您想了解更多信息,您可以在 Stack Overflow 上以及一般网络上阅读大量有关 CQRS 的内容。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

微服务的数据库设计[关闭] 的相关文章

  • 如何使用 Feign 客户端设置请求头?

    我们正在使用 Spring Cloud 框架开发一套微服务 我们需要做的事情之一就是设置请求标头 我知道我可以传递一个参数 RequestHeader到 Feign 方法 但值需要来自另一个 bean 我不知道 SPEL 是否可以用于 Fe
  • azure服务结构可靠字典linq查询非常慢

    我在服务结构有状态服务中有一本可靠的字典 我有一个简单的 linq 表达式 我正在使用 Ix Async 包来构建异步枚举 using ITransaction tx this StateManager CreateTransaction
  • 使用 micronaut-data-hibernate-jpa 库连接到 jpa 时出现错误

    我想将 JPA 用于 micronaut 为此我正在使用io micronaut data micronaut data hibernate jpa 1 0 0 M1图书馆 每当我运行应用程序并点击端点来获取数据时 我都会收到以下错误 me
  • 水平扩展的微服务实例是否应该共享数据库?

    给定一个拥有关系数据库并需要水平扩展的微服务 我看到两种配置数据库服务器的方法 为服务的每个实例提供其自己的数据库服务器实例 并具有耦合的流程生命周期 OR 让实例连接到共享 由同一服务的相同实例 独立数据库服务器或集群 使用事件驱动架构和
  • 如何提供具有不同数据库模式的多个版本的 API?

    在 Kevin Goldsmith 2015 年的演讲中Spotify 的微服务 https youtu be 7LGPeBgNFuU t 925 从 15 25 17 43 他提到 当他们创建新版本的 API 时 他们只是创建一个新服务器
  • 微服务横向扩展数据库的最佳实践或设计

    微服务的主要好处是可以通过使用多个容器实例和负载平衡来扩展一种服务 类型 以提高吞吐量 但有一件事是 服务类型 的多个实例 即容器 共享同一个数据库实例 当多个实例在该数据库实例上写入 读取时 这可能会造成性能瓶颈 传统上 我们会扩展该数据
  • 通过 Docker 主机名在两个微服务之间进行通信

    现在如何运作 微服务 X 使用静态 ip 向微服务 Y 发出 REST API 请求 http ip address port doSomething 问题 问题是我不能长期保证静态ip 我不想通过使用 docker 主机名来解决这个问题
  • 如何在Spring Cloud Netflix eureka上注册Spring Boot微服务?

    我们计划使用 Spring Cloud Netflix oss 组件 所以我正在做一个小样本项目 我开发了 2 个 Spring 微服务 这些服务运行良好http localhost 9000 microsvc one http local
  • Elixir/erlang 在哪里适合微服务方法? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 最近 我一直在使用 docker compose 进行一些实验 以便部署多个协作微服务 我可以看到微服务提供的许多好处 而且现在有一个
  • f1-micro 中的 GCLOUD Kubernetes 结果为(由于内存不足,不支持 f1-micro 机器的节点池)

    我尝试使用 Google 的 UI 在集群中启动一个新的 f1 micro 节点 但它默默地失败了 所以我决定使用 gcloud 运行它 看看是否提供了更多详细信息 所以我运行了以下命令 gcloud container node pool
  • Rails:如何从服务或队列中监听/拉取?

    大多数 Rails 应用程序的工作方式都是等待来自客户端的请求 然后发挥其作用 但是 如果我想将 Rails 应用程序用作微服务架构的一部分 例如 并进行一些异步通信 服务 A 将事件发送到 Kafka 或 RabbitMQ 队列 而服务
  • 在两个 NodeJS 微服务之间共享自定义代码

    我正在为该应用程序创建 Web 应用程序和微服务 并且两者都需要使用 Sequelize 创建相同的数据库模型 使用 NodeJS 处理此任务的方法是什么 我正在考虑创建我的数据库模型的单独模块并将其保存在私有 git 中 并将此私有 gi
  • 如何在 Micronaut 应用程序中指定配置文件?

    我想根据我将部署应用程序的环境指定不同类型的配置 就像在Spring boot中的yml文件中我们可以设置配置文件一样 我想知道是否有办法在Micronaut中做到这一点 您可以通过以下方式设置活动环境系统属性 micronaut envi
  • 使用 Application Load Balancer 在 aws ECS 上进行服务发现

    我想问一下 您是否有一个微服务架构 基于Spring Boot 涉及Amazon Elastic Container Service ECS 和Application Load Balancer ALB 服务发现是由平台自动执行的 还是需要
  • Spring Boot - 微服务之间如何通信?

    我目前正在开发一个 Spring Boot 微服务项目 我创建了服务 每个服务都单独运行 这样 我需要一些服务来与其他服务进行通信 我怎样才能做到这一点 我看到一些关于此的博客使用 Netflix Eureka 云服务器来实现这一点 有什么
  • Podman:如何解析使用 Kubernetes YAML 部署的 pod 的主机名

    我正在使用 podman 4 5 dev 我使用以下方式部署了两个 Pod podman kube 播放 foo yaml podman kube play bar yaml 我在文件中指定了 pod 的主机名 但它们不会在容器内得到解析
  • Spring OAuth2 Keycloak Kubernetes 内部/外部访问

    我在 Kubernetes 集群内配置了 Keycloak 10 0 3 服务器 keycloak 服务器必须处理外部用户的身份验证 使用外部 url 并处理用于 Spring 微服务通信的 oauth2 令牌 然后Web应用程序Sprin
  • 微服务、amqp 和服务注册/发现

    我正在研究微服务架构 实际上我想知道一些事情 我非常同意使用 返回 服务发现来在基于 REST 的微服务上发出请求 我需要知道发出请求的服务 或至少是服务器集群的前端 在哪里 因此在这种情况下能够发现 ip port 是有意义的 但我想知道
  • 微服务中的关系型数据库

    我有一个整体应用程序 当前使用 PostgreSQL 数据库 并且模式的设置与您对大多数关系数据库的期望相同 其中各种表数据通过 FK 链接回用户user id 我正在尝试了解有关微服务的更多信息 正在尝试将我的 python API 迁移
  • 2PC vs Sagas(分布式事务)

    我正在深入了解分布式系统 以及如何在此类系统中维护数据一致性 其中业务事务涵盖多个服务 有界上下文和网络边界 我知道以下两种用于实现分布式事务的方法 2 阶段提交 2PC Sagas 2PC 是一个应用程序协议透明地在平台的支持下利用全球A

随机推荐

  • Azure 管理 REST API - “身份验证失败。‘授权’标头以无效格式提供。”

    我拼命尝试将 2 个经典存储帐户从旧的 MSDN 订阅移动到 MPN 订阅 但我一直遇到困难 因为仅通过 REST API 支持这些帐户的移动 我已按照此处的说明启用了 API https azure microsoft com en us
  • Eclipse 是否有排列类文件的功能?

    Eclipse 有很多功能 我想知道这个功能是否存在 或者是否存在任何捷径 我想将我的类数据排列到该流程中的变量 构造函数 方法中 从上到下 进一步细化我想按访问级别 pub private protected 和类型 void 或返回的方
  • 使用 GSON 获取 JSON 键名

    我有一个 JSON 数组 其中包含如下对象 bjones fname Betty lname Jones password ababab level manager 我的 User 类有一个用户名 需要使用 JSON 对象的密钥 我如何获取
  • 添加不属于模型一部分的自定义表单字段 (Django)

    我在管理网站上注册了一个模型 它的字段之一是长字符串表达式 我想将自定义表单字段添加到管理员中此模型的添加 更新页面 根据这些字段的值 我将构建长字符串表达式并将其保存在相关的模型字段中 我怎样才能做到这一点 我正在从符号构建数学或字符串表
  • 在elasticbeanstalk中设置NODE_ENV变量

    我创建了一个名为 elasticbeanstalk environment config其中包含以下内容 option settings option name NODE ENV value development 我还将 process
  • 具有多个可选参数的 Spring Data MongoDB AND/OR 查询

    我正在尝试执行具有两个以上可选参数的查询 但没有得到任何结果 对于2个参数我遵循了这个问题的答案spring data mongo 可选查询参数 https stackoverflow com questions 11613464 spri
  • 带有断路器的 Kafka Consumer,使用 Resilience4j 重试模式

    我需要一些帮助来了解如何使用 Spring boot Kafka Resilence4J 提出解决方案 以实现来自 Kafka Consumer 的微服务调用 假设如果微服务关闭 那么我需要使用断路器模式通知我的 Kafka 消费者停止获取
  • 使用 Solr 配置 Tika

    我正在寻找将丰富类型文档 Pdf Doc rtf txt 索引到 Solr 中 我找到了 Tika 作为解决方案 我在网上咆哮 但没有找到任何文档 链接来使其与 ExtractingRequestHandler 一起使用 任何人都可以提供通
  • 为什么对原型的编辑不起作用?

    我想向函数构造函数 类 的原型添加一个常量 但它返回为未定义 为什么 function myClass document ready function myClass prototype age 22 window alert myClas
  • 当在 QTableWidget 中拖动一行时,如何找出它被拖动的行索引 FROM 和 TO?

    我试图保持一些数组数据与 QTableWidget 的内容同步 我想启用拖放重新排序 在表中移动项目 而不是复制 但我不清楚当触发放置事件时 我如何找出该项目是从哪个索引拖动的 因此 我无法知道要在正在同步的列表中移动哪个对象 如何获取被拖
  • Android sqlite更新行

    我试图更新表中的一行 但更新功能似乎没有响应 我的功能一切正常 还是我哪里出了问题 public int editChild int id String name String dob int gender double weight do
  • 缩小的 js 文件中的变量名称重复

    我最近在产品部署中遇到了问题 这是一个 net 项目 问题是我的一个 js 文件中有一行代码 for const work in worklist 部署后 该js文件被缩小 代码更改为 for n in n 我通过将 const 更改为 v
  • 为什么我无法在 Solaris 10 上构建加载 Socket.so 的 Perl 模块?

    我正在尝试构建 Convert ASN1 模块 但在此过程中出现错误 我在 Solaris 10 上使用 Perl 5 12 0 perl Makefile PL运行没有问题 同样的make 但是 进行测试 会引发此错误 IMO 中最关键的
  • Primeng 按钮不显示标签

    我的 angular4 应用程序中有 primeng 按钮 按钮的标签未显示 按钮显示很小 没有标签 div div
  • 仅使用 WebRTC 发送报价

    我想创建类似聊天轮盘赌的东西 有两个同龄人 两个对等方都向信令服务器发送 SDP Offer 要求其与某人建立连接 信令服务器使用对等点 A 的提议将其作为答复发送给对等点 B 反之亦然 两个对等方都可以在不使用 createAnswer
  • jQuery、ajax 和 jsonp 的问题

    我正在使用 jsonp 和 ajax 访问另一台服务器上的 Web 服务 这是 jQuery ajax type GET url wsurl callback dataType jsonp crossDomain true error fu
  • 一个类全部都是静态方法有什么问题吗?

    我正在进行代码审查 发现一个使用所有静态方法的类 入口方法接受多个参数 然后开始调用其他静态方法 传递入口方法接收到的全部或部分参数 它不像具有很大程度上不相关的实用函数的数学类 在我自己的正常编程中 我很少编写 Resharper 弹出并
  • iText 横向方向和定位?

    我刚刚开始使用 iText 5 4 2 最新版本 有两件事我还没有搞清楚 创建横向文档 所有页面均以纵向呈现 在给定位置插入图像 距顶部和左侧的毫米数 我有下面的代码 Document d new Document PageSize A4
  • Jetpack Compose LazyColumn 项目在 StickyHeader 上滚动,但不会滚动到最后一项

    我正在努力使用 jetpack compose LazyColumn 和 StickyHeader 功能 基本上静态视图效果很好 但是一旦我开始滚动 这些项目就会越过粘性标题 滚动会开始一种奇怪的行为 并且最后一个项目将永远不可见 因为滚动
  • 微服务的数据库设计[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我想了解微服务的数据库设计 下面给出了场景 微服务A使用mysql数据库 如果我要创建微服务 A 的多个实例 每个微服务A应该指向同一个数据