当前位置: 首页 > 知识库问答 >
问题:

在微服务中不复制数据的“实际”解决方案是什么?

轩辕晔
2023-03-14

假设我有一个用于消息传递的微服务。微服务知道如何发送电子邮件。该服务具有电子邮件模板,这些模板具有某种“模板引擎”(如pugjs),并且可以替换邮件正文中的数据。

我有一个用户服务(例如用于身份验证/授权)和一个银行账户服务(每个用户都有一个)。在用户微服务和银行账户微服务之间,很明显,我们不必复制任何数据,而不是 de 用户的 uuid。

但是我现在想每天向每个用户发送一条消息,其中包含他们的帐户对帐单。消息传递微服务需要来自用户微服务和银行帐户微服务的数据。

好。。。这是现实世界的一个小案例。现在我知道,要获得解耦微服务的好处,我必须遵循一些规则:

  • 我无法在微服务之间共享数据库
  • 我无法在微服务之间发出同步请求

好。。。我可以使用代理,每次创建/更新新用户时,消息传递微服务都可以存储该数据。但实际上,这是一件愚蠢的事情:

  • 我不想与这些数据不一致,并且很难保持同步
  • 消息传递微服务的开发时间和复杂性现在必须考虑:侦听并从事件中提取相关数据,保持有关其他域/服务的数据一致,管理数据库中保存的数据
  • 并考虑消息传递微服务。真的我必须存储解析模板所需的所有数据吗?

我读了很多关于微服务和人们为他们简单示例创建规则的信息。但我从来没有真正看到像上面这样的好解释和现实世界的例子。

那么如何在不重复数据的情况下拥有上面的微服务呢?

共有1个答案

宰父劲
2023-03-14

在您的域示例中,我不会让邮件服务知道有关银行或用户详细信息的任何信息。相反,邮件服务应该只接收将消息与给定内容一起发送给收件人的指令。我将使用专用的计划作业(可能作为帐户通知服务实现),该作业执行从相应服务获取用户和帐户数据的工作,编译消息服务的信息并指示它实际发送消息。这引入了另一个“更高层次的商业目的实体/服务”,但允许您EP 明确的关注点分离。

通常,您的“基本”域服务经常被代表特定业务目的并需要其数据的另一个服务使用。依赖性本身并不是一件坏事,只要关注点被清楚地分开,接口被版本控制,更改被传达等。

不要忘记微服务的整个想法是允许团队通过明确的接口承担专门的职责。它既关乎组织,也关乎建筑。

 类似资料:
  • 任何建议都将不胜感激。 多谢太平绅士

  • 问题内容: 让我们定义以下 用例 : 必须完成一个模拟任务,其中涉及[ day1,day2,…,dayN ]上的迭代/模拟。迭代的每个步骤都取决于先前的步骤,因此顺序是预先定义的。 任务具有由 Object1 表示的状态,该对象将在迭代的每个步骤中更改。 迭代步骤涉及2个不同的任务: Task1 和 Task2 。 为了完成 Task1 ,需要来自 Database1的 数据。 为了实现 Task

  • 据我目前的一点经验所知,“微服务”的核心概念之一是它依赖于自己的数据库,独立于其他微服务。 深入研究如何在微服务系统中处理分布式事务,最好的策略似乎是事件源模式,其核心是事件存储。 不同微服务之间是否共享事件存储?或者每个微服务都有多个独立的事件存储数据库和一个公共事件代理? 如果第一个选项是解决方案,那么使用CQRS,我现在可以假设每个微服务的数据库都是作为查询端的,而共享事件存储在命令端。这是

  • TL;DR服务应该选择将偶尔需要的数据保存在其本地数据库中,还是每次都从数据来源的服务请求数据? 让我们举一些Web商店/订购应用程序的通用示例。服务A是一种用户会话管理服务。它处理用户正在做什么、他可以做什么等的业务逻辑。用户可以创建自己的衬衫以供购买。服务B是一个数据聚合器,包含大量库存和可用内容。 用户开始创建衬衫,因此service a请求service B提供可用的样式/颜色。服务B向下

  • 问题内容: 我已经开发了一些类似于DAO的自定义类,以满足我的项目的一些非常特殊的要求,这是一个不在任何框架内运行的服务器端进程。 该解决方案非常有效,除了每次发出新请求时,我都会通过MySQLdb.connect打开一个新连接。 将其切换为在python中使用连接池的最佳“插入”解决方案是什么?我在想像Java的通用DBCP解决方案。 该过程运行很长时间,并且有许多线程需要发出请求,但不是所有线

  • 问题内容: 我非常喜欢Rails的数据库迁移管理系统。它不是100%完美的,但却可以解决问题。Django还没有附带这样的数据库迁移系统(但是?),但是有许多开源项目可以做到这一点,例如django-evolution和south。 所以我想知道,你更喜欢Django的哪种数据库迁移管理解决方案?(请为每个答案一个选项) 问题答案: 我一直在使用South,但是Migratory看起来也很有前途。

  • 本文向大家介绍tomcat服务器宕机解决方案,包括了tomcat服务器宕机解决方案的使用技巧和注意事项,需要的朋友参考一下 报错信息: 每次出现这个报错都会导致tomcat应用服务器停机,加了下面的java代码后就再也没有停过了。 解决办法: 编写Java代码 @WebListener,这个注解相当于在web.xml配置如下内容 解决方案可以参考如下网址 当然还有就是我再参考这个解决方案的时候,发

  • 主要内容:微服务架构,微服务架构 vs 单体架构,微服务的特点,微服务框架微服务(MicroServices)最初是由 Martin Fowler 于 2014 年发表的论文 《 MicroServices》 中提出的名词,它一经提出就成为了技术圈的热门话题。 微服务,我们可以从字面上去理解,即“微小的服务”,下面我们从“服务”和“微小”两个方面进行介绍。 1) 所谓“服务”,其实指的是项目中的功能模块,它可以帮助用户解决某一个或一组问题,在开发过程中表现为 IDE(集