微服务系统记录

  记录下曾经微服务工作涉及到的相关知识。


1. 架构设计与服务划分

关键内容

  • 领域驱动设计(DDD):
    利用领域模型和限界上下文(Bounded Context)拆分业务,明确服务边界。通过事件风暴(Event Storming)和领域建模会议来确定哪些功能拆分为独立服务,从而降低耦合度。
  • 服务粒度设计:
    根据业务逻辑及团队能力,确定是细粒度服务(每个服务关注单一功能)还是粗粒度服务(划分相对较大业务模块),并关注未来的服务通信、数据一致性和维护问题。

常用方法和工具

  • 建模工具:
    • UML、PlantUML
    • 在线工具如 Lucidchart、Draw.io
  • 方法论:
    • 领域驱动设计(DDD)
    • 事件风暴(Event Storming)

2. API 网关

关键内容

API 网关充当客户端与后端服务之间的唯一入口,负责请求路由、协议转换、认证鉴权、负载均衡、限流、日志采集及监控等任务。它能简化客户端对多个服务的直接调用,同时可进行请求聚合,隐藏后端复杂度。

常用开源产品

  • Kong: 基于 NGINX 的网关,扩展性好,支持插件机制。
  • NGINX / NGINX Plus: 高效、成熟,适于高并发场景,支持丰富的负载均衡算法。
  • Envoy: 现代化的边缘和服务代理,拥有高性能的 L7 功能、服务发现与监控集成。
  • APISIX: Apache 旗下产品,采用 OpenResty 构建,灵活扩展。
  • Zuul(Netflix开发): Java 生态内较为流行,但在多语言环境下可能需要特殊适配。

3. 服务注册与发现

关键内容

在微服务大规模运作过程中,服务实例经常动态上线和下线。服务注册中心负责存储和管理这些实例信息,并为消费者提供可用服务信息。需要自动健康检查和故障剔除,确保调用到的是健康的服务。

常用开源产品

  • Eureka: Netflix 开源产品,专注于服务注册与发现;适合与 Java 生态结合。
  • Consul: HashiCorp 提供的解决方案,除了服务发现,还提供 KV 存储、健康检查及多数据中心支持。
  • Nacos: 阿里巴巴出品,支持服务发现、配置管理与动态 DNS。
  • etcd: CoreOS 提供的分布式键值存储,提供 Watch、Leader 选举等功能,常用于 Kubernetes 内部服务发现。
  • Zookeeper: Apache 提供的分布式协调服务,也经常用于服务注册、配置管理和分布式锁等场景。

4. 配置中心

关键内容

配置中心用于管理和下发系统中全局或服务的配置参数,避免硬编码。其特点在于支持动态更新、灰度发布、版本控制以及多环境(开发、测试、生产)配置隔离管理,从而降低运维风险。

常用开源产品

  • Apollo: 携程开源,功能完备,支持动态推送、灰度升级、版本回滚及权限管理。
  • Nacos: 配置管理与服务发现一体,界面友好,易于上手。
  • etcd: 虽然主要是 KV 存储,但通过 Watch 机制可实现动态配置更新,适合轻量级方案。
  • Consul: 除了服务注册与健康检查,也可以作为配置中心使用。
  • Zookeeper: 用于分布式协调,其数据节点模型可用于保存配置信息,但使用上较为繁琐。

5. 服务间通信与 API 调用

关键内容

微服务之间通常需要进行同步或异步调用,核心要求在于高性能、低延迟、易扩展和跨语言支持。

同步通信:

  • HTTP/REST:
    简单易理解,适合轻量级接口调用,广泛使用 JSON 或 XML 数据格式。
    • 常用工具:Spring Boot(Java)、Express(Node.js)、Flask(Python)等,也适用于 C++ 通过 RESTful 封装调用。
  • RPC 框架:
    采用二进制协议提高性能,减少通信延迟。
    • gRPC(Google): 基于 Protocol Buffers,支持多语言。
    • bRPC(百度): 针对高性能场景设计,适用于 C++ 和其他语言。
    • Thrift(Apache): 跨语言且灵活,可选择的协议和传输层。

异步通信:

  • 消息队列与事件总线:
    用于解耦服务和实现异步流程处理,支持高并发和可靠消息传递。
    • Kafka: 高吞吐、低延迟的分布式消息系统。
    • RabbitMQ: 丰富的消息协议支持,稳定可靠。
    • Pulsar/ActiveMQ/NSQ: 各具特色,适配不同场景需求。

6. 数据存储与数据库设计

关键内容

  • 数据库拆分原则:
    每个服务最好拥有自己的数据存储,避免跨服务直接共享数据库,实现数据隔离和自治。
  • 数据一致性问题:
    分布式事务、最终一致性以及相应的数据同步补偿机制。

常用数据库及方案:

  • 关系型数据库:
    • MySQL、PostgreSQL、MariaDB:常用且成熟,适合大部分业务场景。
  • NoSQL 数据库:
    • MongoDB: 文档存储,模型自由灵活。
    • Cassandra: 高可扩展性,适合分布式写入场景。
    • Redis: 适用于缓存、会话管理、分布式锁等场景。
  • 搜索引擎:
    • Elasticsearch: 全文检索和大数据日志分析。
  • 分布式事务解决方案:
    • Saga 模式、TCC(Try-Confirm-Cancel)、Outbox Pattern 等。

7. 消息队列与事件驱动架构

关键内容

通过消息队列可以实现服务解耦、异步处理和事件驱动架构。消息系统用于缓解流量峰值,并且通过合理设计消息幂等性和重试机制,确保服务健壮性。

常用开源产品

  • Kafka: 主打高吞吐量和分布式部署,适合日志、实时数据流的处理。
  • RabbitMQ: 功能成熟,支持丰富协议(如 AMQP)。
  • ActiveMQ: Apache 生态产品,适用于中小规模场景。
  • Pulsar: 新兴消息系统,提供分区、订阅等特性。
  • NSQ: 轻量级设计,易于快速部署和使用。

8. 日志收集、监控与分布式追踪

关键内容

  • 日志收集:
    各服务的日志需要统一格式化后集中收集,便于后续分析和故障排查。
  • 系统监控:
    实时监控系统及业务指标,将异常指标及时告警。
  • 分布式追踪:
    跨服务调用链追踪,帮助定位性能瓶颈和故障根源。

常用工具和开源产品

  • 日志系统:

你可能感兴趣的:(架构设计,分布式,架构,分布式,笔记,微服务)