视频
微服务架构 Part 4:每服务数据库、API 网关和事件驱动架构
深入探讨了微服务架构中三种最常用的设计模式:每服务数据库、API 网关和事件驱动架构。每服务数据库模式通过为每个微服务提供独立的数据库来实现服务间的松散耦合,从而提升独立性、可扩展性和数据封装。API 网关充当客户端请求的单一入口点,简化了客户端代码,并处理认证和日志等横切关注点。最后,事件驱动架构通过异步通信实现服务间的解耦,使系统更加灵活、可扩展和容错。
微服务架构设计模式
微服务架构中最常用的三种设计模式。
-
数据库每服务模式 (Database per Service Pattern)
- 目标: 实现微服务之间的松耦合。
- 核心理念: 每个服务拥有自己的专用数据库。
- 好处/关键方面:
- 数据隔离: 减少服务间的依赖。
- 技术灵活性: 服务可以使用适合特定需求的数据库技术 (例如:MongoDB, DynamoDB, Azure Cosmos DB, Google Cloud Data Store)。
- 独立扩展: 数据库可根据需求独立扩展。
- 简化开发: 开发人员专注于单个服务及其数据模型。
- 增强扩展性和灵活性。
- 独立优化服务的数据层。
- 挑战:
- 数据重复: 可能导致一致性问题。
- 复杂的跨服务查询: 需要额外模式(如 API 组合)。
- 事务管理困难: 丢失传统关系型数据库的固有数据完整性,跨服务数据一致性难以保证。
- 运维复杂性增加: 管理多个数据库比管理单个共享数据库更具挑战。
- 常见错误:
- 过度使用: 不必要地应用于小型服务或紧密耦合的领域。
- 忽略数据迁移: 从单体数据库拆分时未规划数据迁移。
- 忽略最终一致性: 系统设计未考虑处理服务间的最终一致性。
- 应用前提: 对业务流程和数据有深入理解。需要启动数据治理计划。
- 应用示例: 电子商务平台。产品服务拥有产品和类别表,库存服务拥有库存和位置表,购物车服务拥有购物车和购物车项目表,订单追踪服务拥有订单、订单项目和订单状态表。数据访问仅通过每个服务的 API 进行,保持强封装。
-
API 网关模式 (API Gateway Pattern)
- 目标: 作为客户端请求的单一入口点。
- 主要目的:
- 简化客户端代码,提供统一接口。
- 处理跨领域关注点(如身份验证、日志记录、速率限制)。
- 聚合多个微服务的响应。
- 提供协议转换和 API 版本控制。
- 工作原理/功能: 充当反向代理,拦截所有客户端传入的 API 调用。将请求路由到相应的微服务,聚合响应并返回给客户端。可执行其他功能,如身份验证/授权、请求/响应转换、缓存、监控/分析、速率限制/节流。
- 挑战:
- 性能瓶颈: 设计不当可能成为单点故障和性能瓶颈。
- 过度复杂: 添加过多业务逻辑使其难以维护和扩展。
- 缺乏版本控制: 导致客户端的破坏性变更。
- 监控不足: 难以故障排除。
- 安全配置错误: 导致安全漏洞。
- 紧耦合: 对底层微服务了解过多,导致紧耦合。
- 应用示例: 客户端通过 API 网关与微服务交互。网关处理身份验证、密钥管理、HTTP 和协议转换。
- 实现选项: AWS API Gateway, Azure API Management, Google Cloud Endpoints, Apigee Edge。
-
事件驱动架构模式 (Event Driven Architecture Pattern - EDA)
- 目标: 实现松耦合、可扩展、响应迅速的系统,能够实时响应变化。
- 目的: 通过组件之间通过事件异步通信来提高系统灵活性、可扩展性和容错性。
- 核心理念: 基于事件的生成、检测、消费和响应。
- 事件: 代表系统中重要的状态变化或发生的事情。
- 事件生产者: 生成事件。
- 事件通道/消息代理: 传输事件。
- 事件消费者: 订阅并响应相关事件。
- 好处: 解耦系统,组件间无需直接了解,促进模块化和系统演进。
- 挑战:
- 管理和版本化事件模式变得复杂。
- 依赖最终一致性,在需要立即一致性的场景中难以处理。
- 确保事件的正确顺序,尤其在分布式系统中非常困难。
- 过度使用事件: 不必要的增加复杂性,不应仅将事件作为集成方式。
- 常见错误:
- 未在组织内建立标准事件格式,导致集成困难。
- 忽略持久化重要事件,导致关键数据丢失和系统不一致。
- 未实现适当的错误处理。
- 未考虑在分布式系统中调试问题的能力(缺乏事件追踪)。
- 应用示例: 电子商务平台。最终用户通过购物车下单 -> 购物车服务向消息代理发送通知请求获取商品信息 -> 订阅该消息的产品服务响应请求 -> 发布商品信息消息供购物车消费 -> 购物车确认数量后创建订单。
- 实现选项: AWS (Amazon EventBridge, Amazon Simple Notification Service/Simple Queue Service), Google Cloud (Cloud Pub/Sub, Cloud Functions), Azure (Azure Event Grid, Azure Service Bus, Azure Functions)。