微服务 Nosql 数据库和消息队列

已发表: 2022-11-22

微服务是一种软件架构,允许开发人员构建作为系统协同工作的单一功能模块。 在微服务系统中,每个服务都有自己的数据库。 这允许独立于其他服务开发和部署每个服务。 Nosql数据库是一种不使用关系数据库传统的基于表的结构的数据库。 Nosql 数据库通常用于存储不适合关系数据库的大量数据。 微服务可以使用多种方法与 nosql 数据库通信。 一种常见的方法是使用消息队列。 在这种方法中,每个服务都有一个消息队列,用于与其他服务通信。 当服务需要访问 nosql 数据库中的数据时,它会向队列发送一条消息。 另一个负责访问 nosql 数据库的服务从队列中检索消息并从数据库中检索数据。 另一种方法是使用 REST API。 在这种方法中,每个服务都公开了一个 REST API,其他服务可以使用它来访问 nosql 数据库中的数据。 当nosql数据库中的数据更新频繁时,经常使用这种方式。 另一种常见的方法是使用图形数据库。 在这种方法中,每个服务都表示为图中的一个节点。 图中的边表示服务之间的关系。 当nosql数据库中的数据高度互联时,经常使用这种方式。

微服务的目标是实现最大速度。 大多数NoSQL 服务可以在短短 24 小时内完成设置,快速扩展,并在接触持久层之前创建尽可能多的数据节点。 所有这一切的结果是,您将拥有更快的发布周期。

当以支持微服务的方式大规模部署时,NoSQL 数据库通常更易于使用。 将 NoSQL 数据库与实时流技术集成的能力通常更胜一筹。

如上所述,每个微服务都必须有它的数据,它可以存储在数据库、专用模式甚至一组专用表(在数据库中定义)中。

微服务如何与数据库交互?

信用:https://microsoft.com

该应用程序以整体方式与数据库交互。 应用程序的所有组件共享相同的数据。 数据所有权在微服务中是分散的,而在其他类型的应用程序中,它是直接完成的。 一般来说,所有服务都有自己的私有数据存储,这些数据存储是根据它们的功能量身定制的。

为每个服务创建一个单独的数据库有助于加强域边界并防止意外的数据交互,但这不是唯一的解决方案。 与您的所有服务共享数据库的可能性也是一种选择。 只要您的服务表现良好并且不会因来自其他服务的意外数据而让您大吃一惊,您就没事。 基于数据库的微服务架构难以扩展。 数据库崩溃将发生在整个数据库中,而不仅仅是单个集群。 数据库中的更改可能会影响许多服务。 另外,由于微服务建立在同一个数据库上,并与之相连,它们不会相互独立。 在微服务架构中,使用共享数据库可以提供许多优势。 该系统还可以帮助扩展和调整架构。 它还可以简化服务的开发和部署。 最后,它将使系统的管理和故障排除变得更加容易。 因此,无论您是为微服务使用单个数据库还是为每个服务使用单独的数据库,都要确保您的架构具有适应性和可扩展性。

微服务的优缺点

近年来,组织越来越依赖微服务。 它们减少了开发人员之间跨团队依赖的需要,但它们也有缺陷。 微服务的问题之一是它们依赖于单个数据库。 如果两个不同的微服务需要相同的信息,则需要数据共享。 如果其中一个微服务长时间锁定数据,则数据可能变得不可用。 微服务的另一个问题是难以从其他微服务访问数据。 每个微服务都需要一个通信协议来连接到另一个微服务的数据。 这种类型的实现可能难以实现,并且可能会导致错误。 解决这些问题的一种方法是使用多个数据库。 微服务网站可以使用这种方法使用最能满足其特定要求的数据库。 它还允许我们在开发不同的微服务时使用不同的数据库技术。 因此,微服务之间的数据现在更容易访问。

微服务共享数据库

信用:https://medium.com

微服务共享数据库是微服务之间共享的数据库。 该数据库可用于存储多个微服务所需的数据。 这在需要在微服务之间共享数据的情况下很有用,但不需要每个微服务都有自己的数据副本。

微服务数据库最佳实践

信用:https://cloudfront.net

这个问题没有千篇一律的答案,因为微服务数据库的最佳实践会因应用程序的具体需求而异。 但是,一些可能有用的一般技巧包括将数据库模式设计为​​模块化和松散耦合,使用消息队列来解耦微服务,以及使用数据库复制解决方案来确保高可用性。

微服务的数据库模式

信用:https://medium.com

有几种不同的数据库模式可用于微服务。 最常见的是共享数据库模式,其中每个微服务都有自己的数据库用于数据存储。 这可以是关系数据库,例如 MySQL,也可以是 NoSQL 数据库,例如 MongoDB。 另一种常见模式是事件溯源模式,其中每个微服务都有自己的事件日志,用于数据存储。 此事件日志可用于重播过去发生的事件,这对于调试或审计目的很有用。

微服务数据库连接

微服务是一种更新的软件应用程序构建方法,专注于协同工作的小型独立服务。 这种方法有很多好处,但一个潜在的缺点是它会使数据库连接变得更加困难。
克服这一挑战的一种方法是使用像 Apache Kafka 这样的工具,它可以充当所有微服务数据的中央枢纽。 然后可以使用 Kafka 对这些数据执行连接,从而更轻松地处理来自多个微服务的数据。

微服务数据库管理模式

对于微服务的数据库管理,没有万能的答案,但可以遵循一些通用模式来帮助确保数据的一致性和性能。 一种常见的模式是拥有一个所有微服务都可以访问的中央数据库,这有助于确保数据的一致性。 另一种常见模式是让每个微服务管理自己的数据库,这可以通过允许每个微服务独立扩展自己的数据库来帮助提高性能。

微服务中使用了哪些模式?

客户端发现和服务器端发现模式用于将客户端请求路由到微服务架构中的可用服务实例。 服务的消息传递和远程过程调用模式可以以不同的方式使用。

数据库在微服务中是如何管理的?

微服务架构的主要特征是提供的服务没有服务耦合。 为了实现这一点,每个服务都必须有自己的私有数据存储。 因此,为微服务开发数据库架构通常需要遵循基于服务的模式。

如何在微服务中管理多个数据库?

当您为不同的微服务创建单个数据库时,这是一种反模式; 解决方案是为每个微服务创建一个数据库。

微服务架构

微服务架构是一种软件架构,它将软件组织为小型独立服务的集合。 每个服务负责特定功能并与其他服务通信以执行任务。 这种架构旨在提高软件应用程序的灵活性、可扩展性和可维护性。

三种不同类型的微服务拓扑

可以在下图中找到基于 API REST 的拓扑。 微服务由基于微服务拓扑结构的 RESTful API 访问。 微服务在基础设施的各个节点上实现,并使用标准 HTTP 相互通信。 基于 REST 的拓扑用于创建应用程序。 微服务使用相同的 RESTful API 分布在整个拓扑结构中。 另一方面,微服务部署依赖于微服务之间基于 API 消息的通信。 消息传递的拓扑结构是集中分布的。 微服务拓扑基于集中式消息传递平台,微服务在该平台上相互通信。 它主要用于微服务通信,微服务之间交换的消息及其通过该平台处理的编排层。