1.介绍

微服务建筑是不断增长.它带来了很多好处,特别是相对于过时的单一架构。另一方面,在开发使用微服务的项目时,会遇到多种挑战。最重要的问题之一是数据库设计。关于数据设计,有两个关键问题。如何组织数据,存储在哪里?

在本教程中,我们将尝试回答它们。

2.数据库/服务

当使用微服务架构时,有两个主要的选择来组织数据库:

  1. 数据库/服务
  2. 共享数据库

在本节中,我们将描述第一个。

2.1。基本面

根据定义,在开发和部署方面,微服务应该是松散耦合的、可伸缩的,并且是独立的.因此,每个服务的数据库是一个优选的方法,因为它完全满足这些要求。让我们看看它看起来如何:

这个想法很简单。每个微服务都有自己的数据存储(整个架构或表格)。其他服务无法访问它们不拥有的数据存储。这样的解决方案带来了很多好处。

首先,对单个数据库的更改不会影响其他服务。因此,应用程序中不存在单点故障。可以说,应用程序更多有弹性的

其次,个别数据存储更容易扩展.此外,域的数据被封装在微服务中。因此,更容易理解服务及其数据作为一个整体。这对于开发团队的新成员尤其重要。这将使他们花更少的时间和精力来完全理解他们所负责的领域。

最后,通过每个服务的数据库,我们能够使用多语言持久性。这意味着我们可以为不同的微服务使用不同的数据库技术。因此,一个服务可能使用SQL数据库,另一个服务可能使用SQL数据库NoSQL.数据库。该功能允许使用最有效的数据库,具体取决于服务要求和功能。

2.2.缺点

尽管有这些好处,但每个服务都使用数据库的方法仍然存在一些严重的缺陷和挑战。正如我们前面提到的,每个微服务只能直接访问自己的数据存储。因此,服务需要一种通信方法来交换数据。因此,每个服务都必须提供一个清晰的API。

最后,在通信失败的情况下,需要一个故障保护机制.假设我们从服务A向服务b发送支付请求。服务A等待响应,根据结果执行适当的操作。在此期间,服务B下线。我们需要处理这个情况,等B重新上线后通知A服务结果。雷竞技app官网网站这断路器机制可以帮上忙。

下一个重要问题是交易.跨微服务跨事务会对一致性和原子性产生负面影响。复杂查询也有类似的缺点。没有一种简单的方法可以在多个数据存储上执行连接查询。

最后,在微服务上跨越的数据相关操作可能会在任何问题时难以调试。

3.共享数据库

共享数据库被认为是一个反模式。尽管如此,它是有争议的。重点是当使用共享数据库时,微服务将失去其核心属性:可伸缩性、弹性和独立性.因此,共享数据库很少与微服务一起使用。

当共享数据库似乎是MicroServices项目的最佳选择时,如果我们真的需要微服务,我们应该重新思考。也许整料是更好的选择。让我们看看共享数据库方法是如何看起来的:

在微服务中使用共享数据库的用例并不常见。例如,将整体迁移到微服务时的临时状态。与每个服务相比,共享数据库的主要好处是事务管理。不需要将事务跨越服务。

此外,数据完全受约束,并保留了适当的辐射。随后,冗余减少。我们可以轻松地与加入执行复杂的查询。

另一个重要的事情是无需在微猎狼服务之间交换存储的数据。因此,简化了API,并且在通信失败的情况下,数据和状态的一致性没有问题。虽然有一些严重的缺点。

具有共享数据库的微服务很难扩展.更重要的是,数据库将是单点故障。与数据库相关的更改可能会影响多个服务。此外,微服务不会在开发和部署方面独立,因为它们连接到并在同一数据库上运行。

在类似的情况下可以考虑这种模式:

  • 应该保留现有的数据存储
  • 不应更改现有数据层代码库
  • 交易对于申请至关重要

4.数据相关的模式

在微服务体系结构中,有各种用于管理数据的模式。在本节中,我们将简要介绍一些基本的方法。

4.1。佐贺图案

我们前面提到,跨微服务跨事务可能会有问题。简单地说,只有所有相关服务都成功地执行了它们自己的部分,事务才会成功。如果一个服务出现故障,整个事务都应该失败。此外,在这种情况下,已经完成其部分的服务应该回滚更改。

一般来说,这就是SAGA模式对的原因。佐贺图案是一个代表单个分布式事务的本地事务序列.每个服务执行一个本地事务。如果本地事务成功结束,则会发布一个事件或消息,触发序列中的下一个本地事务。在失败的情况下,saga提供了回滚更改的补偿事务。

执行saga模式有两种类型:

  • 业务流程——中央控制器(协调器)管理微服务之间的所有交互
  • 编舞-分散的技术广播事件

4.2。CQRS.

CQRS(命令查询责任隔离)有助于实现另一个重要特性:从多个数据存储查询相关数据。此外,它通过分离关注点简化了业务逻辑的复杂性。此外,它有助于微服务的可伸缩性。

这个想法很简单。我们正在将数据层与业务逻辑层分开。此外,类只能写入数据库(命令)或从中读取(查询)。所以,单一课程不能做两班。这种方法会导致许多好处。代码更清晰,更易于维护或扩展。不同的组件可以分别进行优化和开发,尤其重要的是,可以进行缩放。

随后,组件是松散耦合的,工作可以在开发人员或团队之间有效地分割。最后,划分为组件的应用程序更容易测试。没有一种正确的方法来实现CQRS.模式。实现可以基于领域、需求、框架、项目的实际状态等。CQRS通常与活动采购模式。我们来描述一下。

4.3.活动采购

许多现代应用程序出于各种目的都依赖于事件。例如,正如我们前面提到的,saga序列中的服务自动更新数据库并发布事件或消息。事件溯源利用应用程序事件。

事件源是一种通过持久化改变状态的事件来表示状态的技术.每次业务实体更改,事件存储中都会持续该事件。

顾名思义,事件站点是一个事件数据库。它可以是SQL、NoSQL或任何适合项目的方式。此外,事件存储可以充当消息代理。所有感兴趣的组件都订阅它。当事件持久化时,事件存储将信息传递给所有订阅者。发布事件是单个原子操作。因此,它提供了跨微服务的数据库操作的可靠性和原子性。

而且,它会创建一个完整的审计日志。在出现任何问题或bug时,很容易研究状态更改并最终恢复有效状态。因此,调试不那么复杂。此外,事件源可以避免面向对象数据和关系数据之间的阻抗不匹配.总之,事件源可以在微服务体系结构或任何事件驱动的应用。

5.如何选择数据库?

计划在微服务中规划数据库设计时的第一步是选择模型.我们已经提到了每个服务和共享数据库模型的数据库。此外,我们考虑了他们的优点,缺点和常用案件。

第二步是挑选对项目或服务最有效的特定数据库技术(或技术)。为此,我们需要考虑一些属性。

第一个重要参数是读取性能。读取性能可以是每秒的每秒操作数或获取查询的速度。与电子商务,CRM,银行软件相关的应用程序或服务通常包含需要快速和经常获取数据的功能。

第二个重要属性是写入表现。它类似于前一个。就在这种情况下,我们正在写入数据库,而不是从中读取。如果服务需要持续大量数据甚至存储大斑点,这可以是核心参数。

下一个是延迟。它是用户操作和服务器响应之间的延迟。这在用户体验相关组件中尤为重要。良好的例子是实时流动应用或实时游戏。

另一个重要属性是资源效率。通常,较少的资源消耗,更好。可能导致更快的执行,减少主机负载,以及根据平台的最终成本。

最后但同样重要的是,我们应该考虑供应效率。一般来说,这是数据库如何影响微服务的开发、部署和测试。正如我们之前提到的,在这些方面,微服务的独立性是非常重要的。

5.1。SQL和NoSQL

最常见的是,项目或服务考虑了两种技术:SQL和NoSQL。基本上,它更复杂,特别是如果涉及到NoSQL。有各种NoSQL数据库实现,即。虽然在本文中,我们不会详细说明数据库的低级实施。让我们一般地比较SQL和NoSQL。

呈现由QuickLaTeX.com

六,结论

在本文中,我们在微服务体系结构中详细说明了数据库设计。我们可以看到的是一个非常复杂的任务。所有要素应仔细计划并适合该项目需要最大限度地提高其效率。

这篇文章的评论已经关闭!