微服务的数据管理
已发行
本章内容概览:
- Docker Compose 开发多服务环境
- 文件存储功能
- 数据管理策略
- 数据库设计与数据隔离
- 实时重载
本章扩展到多个微服务,介绍 Docker Compose 在开发环境中管理多个服务。
4.1 Docker Compose 简介
Docker Compose 用于定义和运行多容器 Docker 应用程序,使用 YAML 文件配置服务,适合:
- 开发环境中运行多个微服务
- 自动化多容器应用的启动
- 管理服务间的网络连接
- 配置服务依赖关系

4.2 数据管理策略
4.2.1 数据库所有权原则
关键原则:每个微服务应该拥有自己的数据
- 每个微服务有独立的数据库
- 其他服务不能直接访问该数据库
- 数据访问只能通过拥有该数据的微服务的 API
优点:
- 数据隔离:服务间数据完全隔离,避免耦合
- 独立部署:每个服务可独立修改数据结构
- 技术灵活性:不同服务可选择最适合的数据库技术
- 团队自治:不同团队可独立管理自己的数据

4.2.2 数据一致性挑战
- 分布式事务难以实现
- 系统可能需要在一段时间内达到最终一致性
- 使用事件驱动架构同步不同服务间的数据
4.3 文件存储策略
4.3.1 存储选项
本地文件系统:
- 优点:简单、快速
- 缺点:不适合分布式环境,容器重启后数据丢失
- 适用:临时文件、开发环境
云存储服务:
- 优点:可扩展、高可用、持久化
- 缺点:成本较高
- 适用:生产环境、用户生成内容
专用文件服务器:
- 优点:集中管理、可访问
- 缺点:单点故障、需要维护
- 适用:中小型应用

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 适合微服务应用,支持复杂的数据结构
下一章学习微服务间的通信。