微服务是大型架构的核心,下面我就重点详解微服务架构模式@mikechen
微服务聚合方案
通过构建一个聚合服务统一调用多个微服务API,将分散数据整合后返回给客户端。
这样客户端只需与聚合层交互,简化操作并减少跨服务调用复杂度。
如下图所示:

[客户端] -> [API网关/聚合服务] -> [服务A] -> [DB A]
-> [服务B] -> [DB B]
-> [服务C] -> [DB C]
优点:简化客户端请求,减少服务间耦合。
缺点:聚合服务可能成为性能瓶颈,需关注扩展性。
适用场景:
需要从多个服务获取数据并合并展示(如电商订单详情页需要用户信息、订单信息和支付信息)。
微服务共享方案
多个微服务共享数据库或数据存储,通常是微服务迁移中的过渡方案。
如下图所示:

共享数据库:多个服务直接访问同一个数据库实例或模式。
紧耦合:服务间通过数据库耦合,违反微服务“数据库隔离”原则。
简化数据一致性:直接数据库操作避免分布式事务复杂性。
它简化开发但违背微服务自治原则,导致服务耦合度高,不适合长期使用。
微服务代理模式
通过中间代理层(如Sidecar代理)处理客户端请求,代理转发给后端微服务。
该模式解耦客户端与服务,统一管理流量并方便监控。
如下图所示:

统一入口:所有客户端请求通过代理层(API网关)转发。
功能丰富:支持认证、授权、限流、日志、监控等。
透明转发:代理层通常不修改响应数据,仅转发请求。
优点:解耦、统一入口便于管理。
缺点:代理层可能引入额外延迟和性能压力。
适用场景:需要统一管理认证、限流、监控等跨服务功能。
微服务异步消息模式
微服务异步消息模式,通过消息队列或事件流实现服务间异步通信。
服务通过发布和订阅消息(如事件或命令)协作,解耦服务间的直接依赖。
如下图所示:

适合响应时间要求不高的场景,比如:
异步通信:服务通过消息队列(如Kafka、RabbitMQ)发送和接收消息。
解耦:发布者无需知道订阅者的存在。
事件驱动:常用于事件溯源或CQRS(命令查询职责分离)。