赞
踩
虽然我的笔记系统的开发是基于微服务的思想,但是在服务的配置和编排上感觉还是不太合理,具体来说,在开发上的配置和在生产上的配置差别太大。现在规模小,后面规模变大,估计这一块会成为系统生长的瓶颈。
因此,我在周末重构了项目结构和docker-compose.yml,本文将分享我在这一过程中的经验,并探讨如何进一步优化基于Docker Compose的微服务架构。
- # 所有数据放在data目录下
- version: '3'
- networks:
- notes_network:
-
- services:
- redis:
- image: redis:latest
- container_name: redis-token
- networks:
- - notes_network
- volumes:
- - ./data/redis:/opt/redis/data
- - ./redis/conf/redis.conf:/etc/redis/redis.conf
- ports:
- - 6379:6379
- auth2-db:
- image: postgres:latest
- container_name: auth2-db
- networks:
- - notes_network
- volumes:
- - ./db/auth2/init:/docker-entrypoint-initdb.d/
- - ./data/auth2-db:/var/lib/postgresql/data
- ports:
- - 5434:5432
- env_file:
- - .env
- notes-db:
- image: postgres:latest
- container_name: notes-db
- networks:
- - notes_network
- volumes:
- - ./db/notes/init:/docker-entrypoint-initdb.d/
- - ./data/notes-db:/var/lib/postgresql/data
- ports:
- - 5433:5432
- env_file:
- - .env
-
- api-gate:
- image: rust:latest
- container_name: api-gate
- networks:
- - notes_network
- working_dir: /app
- volumes:
- - ./src/api-gate/app:/app
- command: ["./test.sh"]
- ports:
- - 8000:8000
-
- auth2:
- image: rust:latest
- container_name: auth2
- working_dir: /app
- networks:
- - notes_network
- ports:
- - 8002:8002
- volumes:
- - ./src/auth2/app:/app
- command: ["./test.sh"]
-
- notes-api:
- image: rust:latest
- container_name: note_book_api
- networks:
- - notes_network
- working_dir: /app
- ports:
- - 8003:8003
- volumes:
- - ./src/note_book_api/app:/app
- command: ["./test.sh"]
-
- auth_app:
- image: nginx:latest
- container_name: auth_app
- networks:
- - notes_network
- volumes:
- - ./src/auth_app/app/dist/:/usr/share/nginx/html
- ports:
- - 8081:80
-
- web_app:
- image: nginx:latest
- container_name: web_app
- networks:
- - notes_network
- volumes:
- - ./src/web_app/app/dist/:/usr/share/nginx/html
- ports:
- - 8082:80
-
-
-
-
-
一、微服务架构的优势与挑战
微服务架构将单一体应用拆分成多个小型、独立的服务,每个服务都围绕特定的业务功能进行构建和部署。这种架构的优势在于提高了系统的可伸缩性、灵活性和可维护性。然而,随着服务数量的增加,配置、部署和管理这些服务成为了一个巨大的挑战。
二、Docker Compose的应用
为了简化微服务架构的部署和管理,我引入了Docker Compose。Docker Compose是一个用于定义和运行多容器Docker应用程序的工具,通过YAML文件来配置应用程序的服务、网络和卷。在我的笔记系统中,我使用Docker Compose将各个微服务编排在一起,形成了一个完整的应用程序。
三、Docker Compose文件解析
我的docker-compose.yml
文件包含了多个服务定义,如Redis、Postgres数据库、API网关、身份验证服务、笔记API和前端应用等。每个服务都指定了镜像、容器名称、网络、卷、端口映射和环境变量等配置信息。通过这些配置,我可以轻松地启动、停止和扩展各个服务。
四、优化建议
虽然我的Docker Compose文件已经相对整洁和有序,但仍然存在一些可以优化的地方:
.env
文件来实现这一目的。此外,对于需要共享的环境变量,可以考虑使用Docker的秘密管理功能。depends_on
指令来实现这一点。然而,需要注意的是,depends_on
并不能保证服务的完全同步启动。为了解决这个问题,可以考虑使用健康检查或等待策略来确保依赖服务已准备就绪。deploy
指令下的resources
选项来配置这些限制(注意:这主要适用于Swarm模式)。对于非Swarm模式或较早版本的Docker Compose,可以考虑使用其他方法(如cgroups)来限制资源使用。docker-compose.yml
文件纳入版本控制系统(如Git)中进行管理,以便跟踪和回滚更改。同时,可以使用Git的子模块或分支功能来管理不同环境或版本的配置文件。五、结语
优化是一个持续的过程,我将继续关注最佳实践和技术发展,以进一步提升系统的稳定性、性能和安全性。希望本文的分享能对大家在微服务架构和Docker Compose的应用中有所启发和帮助。
欢迎大家留言区讨论。
2024.3.4
重庆.渝北
----
这篇文章收录我的Rust-实战专栏。请关注我,不要错过更新哟。
笔记系统的gitee地址:https://gitee.com/hanshu_alan/notes
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。