服务解耦的核心在于严格隔离通信边界:通过独立网络划分业务域、禁止跨域直连、依赖DNS服务发现、专属数据库与事件驱动、网关统一入口及内外网分离,从基础设施层保障松耦合。
服务解耦不是靠“连得上”实现的,而是靠“不该连的坚决不连”来保障。Docker Compose 本身不制造解耦,它只是把你的解耦设计忠实地跑起来——关键在配置逻辑是否体现边界意识。
每个业务域(如用户、订单、支付)应有专属内部网络,禁止跨域直连。这不是可选项,是契约底线:
docker-compose.yml 的 networks 区块中为每个域定义独立 bridge 网络,例如 user-net、order-net
user-service 加入 user-net,order-service 加入 order-net,两者默认不通jdbc:postgresql://user-db:5432
容器间调用必须依赖 Docker 内置 DNS 解析,这是实现松耦合的基础机制:
http://service-name:port 访问(如 http://auth-service:3000/login)networks,且不在 ports 下暴露内部端口给宿主机——暴露仅用于外部接入点(如 API 网关)172.x.x.x 地址,说明设计已退化为紧耦合数据库直连是最常见的隐性耦合源头。解耦必须从数据所有权开始划清界限:
user-db、order-db),不复用同一容器UserProfileUpdated)外部请求和内部服务调用必须走不同网络路径,从基础设施层切断越权可能:
public-net(供 Nginx / API Gateway 使用)、internal-net(供业务服务与 DB 通信)public-net,并通过 internal-net 调用后端,但绝不把数据库端口映射到 public-net
internal-net,ports 字段留空或仅用 expose,确保外部完全不可达