ITPub博客

首页 > 数据库 > 数据库开发技术 > 微服务架构设计模式梳理

微服务架构设计模式梳理

原创 数据库开发技术 作者:greencoatman 时间:2023-11-08 12:02:28 0 删除 编辑

微服务是什么?

  • 单一职责的。一个微服务应该都是单一职责的,这才是“微”的体现,一个微服务解决一个业务问题(注意是一个业务问题而不是一个接口)。

  • 面向服务的。将自己的业务能力封装并对外提供服务,一个微服务本身也可能使用到其它微服务的能力。
    我觉得满足以上两点就可以认为典型的微服务。

Dubbo、SpringCloud 和 Kubernetes,是当前开发微服务的三个主流开源框架和平台。

横向对比如下图:


微服务架构的代理模式总结下有6种模式,分别为代理模式、链式模式、分支模式、异步模式、数据共享模式,结合于我们的业务场景:

聚合模式架构图如下:



代理模式的架构图如下:

链式模式架构如下:

演变下单服务设计



分支模式:


异步模式:

  1. 消息队列:

  • 使用消息队列作为异步通信的基础。常见的消息队列系统包括RabbitMQ、Apache Kafka、Amazon SQS等。

  • 每个微服务可以发布和订阅消息队列中的消息。消息队列充当消息传递中心,将消息从发布者传递给订阅者。

  • 异步通信:

    • 当一个微服务需要与另一个微服务通信时,它将消息发布到消息队列,而不是直接调用目标微服务的API。

    • 目标微服务订阅消息队列,以便接收并处理来自其他微服务的消息。

  • 松耦合:

    • 异步通信实现了松耦合,因为微服务之间不需要直接了解彼此的存在。它们只需知道如何发布和订阅特定消息。

    • 这允许每个微服务能够独立开发、部署和扩展,而无需担心其他微服务的状态和可用性。

  • 幂等性:

    • 在消息处理中实现幂等性,以确保即使消息多次传递,也不会导致数据不一致或操作多次执行。

    • 幂等性可以通过唯一标识符、事务处理或其他技术来实现。


    数据共享模式:

    1. 数据访问层:

    • 每个微服务都有自己的数据库或数据存储,这些数据库用于存储与该微服务相关的数据。

    • 使用适当的数据库管理系统(如MySQL、PostgreSQL、MongoDB等),根据微服务的需求来选择数据库类型。

  • API层:

    • 每个微服务提供API来与其他微服务进行通信。这些API应该使用标准的RESTful或GraphQL接口。

    • API应该包含适当的授权和身份验证机制,以确保只有经过授权的微服务可以访问数据。

  • 事件驱动数据共享:

    • 使用事件驱动的架构来实现数据共享。当一个微服务对数据进行更改时,它可以发布一个事件,其他需要访问这些数据的微服务可以订阅这些事件来获取更新。

    • 使用消息代理(如Apache Kafka或RabbitMQ)来支持事件发布和订阅机制。

    • 确保事件处理具有幂等性,以防止数据更新的重复处理。

  • 数据同步:

    • 对于某些需要高度实时数据共享的场景,可以考虑使用数据同步机制,将数据从一个微服务同步到其他微服务。

    • 使用合适的同步工具或库来实现数据同步,并确保数据一致性和完整性。

  • 数据仓库:

    • 如果需要进行复杂的数据分析和报告,可以将数据存储在数据仓库或数据湖中,供多个微服务访问。

    • 使用ETL(抽取、转换、加载)流程将数据从各个微服务的数据库导入到数据仓库中。

  • 数据访问控制和安全性:

    • 实施适当的数据访问控制,确保只有授权的微服务可以访问特定数据。

    • 使用身份验证和授权机制来验证微服务的身份,并控制其访问权限。

  • 版本控制:

    • 确保API和数据模型具有适当的版本控制,以便在微服务发生变化时能够平滑地进行迁移和升级。

    微服务架构实现读写分离


    原文作者:二进制跳动;如有侵权,请联系管理员删除。

    请登录后发表评论 登录
    全部评论

    注册时间:2022-07-08

    • 博文量
      312
    • 访问量
      141112