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

微服务概念澄清和良好做法

宗政霄
2023-03-14

微服务的宗旨之一是它们是独立开发和部署的,有些人甚至说微服务必须使用不同的表才能真正解耦和独立。

因此,当我们谈论使用微服务暴露的业务时,它并不完全正确。如果您有一个标准化的数据库和一个用户表,另一个用于用户地址,因为一个用户可能有一个或多个地址(住宅、商业...)和另一个用于电话的表,原因与微服务os客户端使用多个表的原因相同。1-在这种情况下,我们仍然可以将其归类为微服务?(也许我对微服务的理解可能不正确或不完整)2-如果我不能将其归类为微服务,那么如何正确地为其开发微服务?3-如果假设每个微服务必须只使用一个表来解耦,那么大多数微服务的情况可以恢复到CRUD博览会?

共有1个答案

乜钱明
2023-03-14

你是对的。在许多情况下,您的数据模型具有非常互连的结构。这没有什么错,因为你的问题要求事物有这样的结构。这是一个与NoSQL相关的古老讨论。显然,您不能为了解决关系问题而抛弃关系数据库。

在您的情况下,您需要问问自己为什么要使用微服务。您的代码是否太复杂而无法维护?您想尝试以一种不能简单地作为模块注入到整体上的方式独立地发展系统的一部分吗?您是否有独立的开发团队,他们应该独立工作以提高效率?您是否存在可伸缩性问题?

在将事物分解为微服务时,至少在最初,您可以使用的一条经验法则是尽量避免让多个微服务访问同一数据库上的相同表。如果每个微服务都有自己的数据库,这是一种常见的模式。

因此,在您的示例中,您的系统保留有关人员的关系数据。然后,您可以将您描述的这个系统作为另一个系统的微服务,该系统需要读取和写入有关人员的数据。请注意,这与两个系统访问同一数据库不同,因为第二个系统将通过REST接口间接访问数据库。

 类似资料:
  • 问题内容: 过去,我使用以下方法读取大量代码: 这样做是惯例吗? 优点和缺点是什么? 在我看来,这就像完成异常的“ Agent Orange”方式 编辑 处理方法中的预期异常 引发意外异常(一对一) 不在乎错误 那是路要走吗? 问题答案: 你不应该扔。这就是为什么。 Throwable是可抛出的事物层次结构的顶部,由and组成。由于根据定义是由不可挽救的条件引起的,因此将它们包括在方法声明中是没有

  • 问题内容: 我已经为JDBC连接编写了一个简单的包装程序,它可以工作,但是我想通过最佳实践来对其进行改进。它基本上有类似的方法,,,,,,和。为简单起见,我仅在此处发布前4种方法。 笔记: 可以重复使用同一查询对象,例如打开和关闭它,以及在再次打开之后。 我不是关闭每个查询的连接,而是关闭准备好的语句(这是正确的,或者我可以让准备好的语句保持打开状态,因为Connection对象会关闭它吗?) 当

  • 我正在使用Laravel5.6作为我个人项目的后端,我一直在做一些(对我来说)似乎是不好的做法,不管怎样,我想知道它是否真的那么糟糕。 首先,我使用的是Vue。js(CLI 3)项目作为客户端,我正在向我的Laravel后端发出请求。现在,为了处理通知/祝酒,我使用下一种格式: 不管我做得对还是错,我总是用同样的格式和

  • 我的应用程序目前使用一个后台服务与一个物理设备进行通信(蓝牙)。(我制造并销售物理设备。)应用程序每500ms向设备发送一条命令。用户启动这个进程,它必须运行,直到用户停止它。当应用程序处于活动状态时,进程的结果将发送到应用程序。这个过程需要运行,即使应用程序不是活动的。(例如,他们打电话,搜索网络。)一旦应用程序再次激活,进程的状态将与应用程序同步。该过程可以在任何地方运行,从几分钟到几个小时不

  • 问题内容: 我想知道创建Javadocs时的最佳实践。我有一个包含许多文件的项目。代码已由许多开发人员创建。每个文件都有一个注释,因此很明显谁创建了一个特定的类。 但是,当其他一些开发人员将新代码添加到文件中,对其进行修改等时,他应该如何告知团队的其他成员他已经创建了一些新功能或已经修改了现有代码?换句话说,我们应该如何“使Javadocs与现实兼容”?;) 将他的名字添加到现有标签中?然后,如果

  • 我正纠结于一个关于Flink的Kafka的消费者连接器的事件时间的问题。引用Flink doc 自从Apache Kafka 0.10+以来,Kafka的消息可以携带时间戳,指示事件发生的时间(参见Apache Flink中的“事件时间”)或消息被写入Kafka代理的时间。 Kafka消费者不会发出水印。 一些问题和问题浮现在我的脑海中: > 我如何知道它的时间戳是发生的时间还是写给Kafka经纪