首页 > 数据库 > 数据库开发技术 > 微服务架构设计模式梳理
微服务是什么?
单一职责的。一个微服务应该都是单一职责的,这才是“微”的体现,一个微服务解决一个业务问题(注意是一个业务问题而不是一个接口)。
面向服务的。将自己的业务能力封装并对外提供服务,一个微服务本身也可能使用到其它微服务的能力。
我觉得满足以上两点就可以认为典型的微服务。
Dubbo、SpringCloud 和 Kubernetes,是当前开发微服务的三个主流开源框架和平台。
横向对比如下图:

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

代理模式的架构图如下:

链式模式架构如下:

演变下单服务设计

分支模式:

异步模式:

消息队列:
使用消息队列作为异步通信的基础。常见的消息队列系统包括RabbitMQ、Apache Kafka、Amazon SQS等。
每个微服务可以发布和订阅消息队列中的消息。消息队列充当消息传递中心,将消息从发布者传递给订阅者。
异步通信:
当一个微服务需要与另一个微服务通信时,它将消息发布到消息队列,而不是直接调用目标微服务的API。
目标微服务订阅消息队列,以便接收并处理来自其他微服务的消息。
松耦合:
异步通信实现了松耦合,因为微服务之间不需要直接了解彼此的存在。它们只需知道如何发布和订阅特定消息。
这允许每个微服务能够独立开发、部署和扩展,而无需担心其他微服务的状态和可用性。
幂等性:
在消息处理中实现幂等性,以确保即使消息多次传递,也不会导致数据不一致或操作多次执行。
幂等性可以通过唯一标识符、事务处理或其他技术来实现。
数据共享模式:

数据访问层:
每个微服务都有自己的数据库或数据存储,这些数据库用于存储与该微服务相关的数据。
使用适当的数据库管理系统(如MySQL、PostgreSQL、MongoDB等),根据微服务的需求来选择数据库类型。
API层:
每个微服务提供API来与其他微服务进行通信。这些API应该使用标准的RESTful或GraphQL接口。
API应该包含适当的授权和身份验证机制,以确保只有经过授权的微服务可以访问数据。
事件驱动数据共享:
使用事件驱动的架构来实现数据共享。当一个微服务对数据进行更改时,它可以发布一个事件,其他需要访问这些数据的微服务可以订阅这些事件来获取更新。
使用消息代理(如Apache Kafka或RabbitMQ)来支持事件发布和订阅机制。
确保事件处理具有幂等性,以防止数据更新的重复处理。
数据同步:
对于某些需要高度实时数据共享的场景,可以考虑使用数据同步机制,将数据从一个微服务同步到其他微服务。
使用合适的同步工具或库来实现数据同步,并确保数据一致性和完整性。
数据仓库:
如果需要进行复杂的数据分析和报告,可以将数据存储在数据仓库或数据湖中,供多个微服务访问。
使用ETL(抽取、转换、加载)流程将数据从各个微服务的数据库导入到数据仓库中。
数据访问控制和安全性:
实施适当的数据访问控制,确保只有授权的微服务可以访问特定数据。
使用身份验证和授权机制来验证微服务的身份,并控制其访问权限。
版本控制:
确保API和数据模型具有适当的版本控制,以便在微服务发生变化时能够平滑地进行迁移和升级。
微服务架构实现读写分离

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