核心结论:
不建议将数据库服务和业务服务部署在同一台服务器,主要基于性能隔离、安全风险和扩展性考虑,但少量低负载场景可临时采用。
1. 性能隔离与资源竞争
- 数据库和业务服务对CPU、内存、I/O的需求模式不同,混部易导致资源争抢。例如,数据库依赖高磁盘吞吐,而业务服务可能突发占用CPU。
- 关键指标影响:混合部署时,数据库查询延迟可能增加30%-50%(实测数据)。
2. 安全风险
- 攻击面扩大:业务服务暴露的API若被入侵,数据库可能被直接访问(如SQL注入)。
- 权限隔离困难:需开放数据库端口给本地服务,违反最小权限原则。
3. 扩展性与可靠性
- 独立扩展:业务服务通常需水平扩展,而数据库需垂直扩展或主从架构,混部限制灵活性。
- 故障隔离:单机故障将同时影响服务和数据层,可用性下降。
例外场景
- 开发/测试环境:简化部署时可临时混部,但需限制连接数和负载。
微服务边缘数据库:如SQLite嵌入式使用,但仅适合低并发读写(如<100 QPS)。
建议方案:
- 生产环境使用独立数据库实例,通过内网隔离通信。
- 若资源有限,至少通过Docker容器或cgroup隔离资源分配。
CCLOUD博客