微服务的数据管理

已发行

本章内容概览:

  • Docker Compose 开发多服务环境
  • 文件存储功能
  • 数据管理策略
  • 数据库设计与数据隔离
  • 实时重载

本章扩展到多个微服务,介绍 Docker Compose 在开发环境中管理多个服务。

4.1 Docker Compose 简介

Docker Compose 用于定义和运行多容器 Docker 应用程序,使用 YAML 文件配置服务,适合:

  • 开发环境中运行多个微服务
  • 自动化多容器应用的启动
  • 管理服务间的网络连接
  • 配置服务依赖关系
图 4.1 使用 Docker Compose 在开发环境中运行多个微服务
图 4.1 使用 Docker Compose 在开发环境中运行多个微服务

4.2 数据管理策略

4.2.1 数据库所有权原则

关键原则:每个微服务应该拥有自己的数据

  • 每个微服务有独立的数据库
  • 其他服务不能直接访问该数据库
  • 数据访问只能通过拥有该数据的微服务的 API

优点:

  • 数据隔离:服务间数据完全隔离,避免耦合
  • 独立部署:每个服务可独立修改数据结构
  • 技术灵活性:不同服务可选择最适合的数据库技术
  • 团队自治:不同团队可独立管理自己的数据
图 4.2 每个微服务拥有自己的数据库
图 4.2 每个微服务拥有自己的数据库

4.2.2 数据一致性挑战

  • 分布式事务难以实现
  • 系统可能需要在一段时间内达到最终一致性
  • 使用事件驱动架构同步不同服务间的数据

4.3 文件存储策略

4.3.1 存储选项

本地文件系统:

  • 优点:简单、快速
  • 缺点:不适合分布式环境,容器重启后数据丢失
  • 适用:临时文件、开发环境

云存储服务:

  • 优点:可扩展、高可用、持久化
  • 缺点:成本较高
  • 适用:生产环境、用户生成内容

专用文件服务器:

  • 优点:集中管理、可访问
  • 缺点:单点故障、需要维护
  • 适用:中小型应用
图 4.3 微服务应用中的文件存储
图 4.3 微服务应用中的文件存储

4.4 Docker Compose 实践

4.4.1 docker-compose.yml 示例

version: '3.8'

services:
  video-upload:
    build: ./video-upload
    ports:
      - "4000:4000"
    environment:
      - VIDEO_STORAGE_HOST=video-storage

  video-storage:
    build: ./video-storage
    ports:
      - "4001:4001"
    volumes:
      - videos:/videos

  video-streaming:
    build: ./video-streaming
    ports:
      - "3000:3000"
    environment:
      - VIDEO_STORAGE_HOST=video-storage

volumes:
  videos:

4.4.2 常用命令

  • docker-compose up:创建并启动所有服务
  • docker-compose up -d:后台运行
  • docker-compose down:停止并删除所有服务
  • docker-compose logs <service>:查看特定服务日志

4.5 实时重载

结合卷挂载和 nodemon:

services:
  video-streaming:
    volumes:
      - ./video-streaming/src:/usr/src/app/src
{
  "scripts": {
    "start:dev": "nodemon src/index.js"
  }
}

4.6 数据库集成

MongoDB 的优势:

  • 文档数据库,适合复杂的数据结构
  • 灵活的模式,易于适应变化
  • 水平扩展,支持分布式部署

Docker Compose 中使用 MongoDB:

services:
  mongodb:
    image: mongo:6.0
    ports:
      - "27017:27017"
    volumes:
      - mongodb-data:/data/db

  video-storage:
    environment:
      - MONGODB_HOST=mongodb
    depends_on:
      - mongodb

volumes:
  mongodb-data:

总结

  • Docker Compose 是开发环境运行多微服务的理想工具
  • 每个微服务应拥有自己的数据(数据库、文件存储)
  • 数据所有权确保服务间解耦和独立部署
  • 文件存储有多种选择,云存储适合生产环境
  • 实时重载通过卷挂载和 nodemon 实现
  • MongoDB 适合微服务应用,支持复杂的数据结构

下一章学习微服务间的通信。

创建于 2026/01/06 更新于 2026/01/06 895 字 阅读约 2 分钟

提交勘误/建议