跳至主要內容

禁用IP直连的原因

Hirsuntech大约 9 分钟

禁用IP直连的原因

探讨京东开发为何要禁用IP直连,并介绍两种解决方案来应对IP直连所带来的问题。

1734952490322.png

问题提出

IP直连的问题

1734952446255.png
  • 在开发环境中,常见的做法是直接使用IP地址和端口号来连接数据库或其他服务。
  • 例如,连接MySQL数据库时,可能会写成 192.168.31.205:3306/database_name
  • 这种方法在开发环境中是可行的,但在生产环境中会带来很大的麻烦。

强耦合问题

1734952516165.png

强耦合的定义: 强耦合是指两个模块之间的依赖关系非常紧密,一旦其中一个模块发生变化,另一个模块也必须随之调整。

案例分析

  • 在开发环境中,Tomcat程序可能直接配置数据库的IP地址,例如 jdbc:mysql://192.168.31.102:3306/database_name
  • 如果将这种配置直接部署到生产环境中,一旦数据库的IP地址发生变化(例如从 192.168.31.102 变为 192.168.31.103),就需要修改源代码并重新部署应用。
  • 这种操作在大公司中非常繁琐,需要重新测试、审批、协调资源等。

解决方案一:引入内部DNS

DNS的作用:DNS(域名解析服务器)将域名解析为IP地址,方便记忆和管理。

内部DNS的实现:

  • 在局域网中搭建一个DNS解析服务器,将数据库的IP地址映射为一个自定义域名。
  • 例如,将 db.example.com 映射为 192.168.31.102

优点: 通过DNS进行IP地址的迁移非常灵活。例如,将 192.168.31.102 改为 192.168.31.103,只需在DNS服务器上更新映射关系,应用程序无需修改代码。

缺点

  • DNS无法进行故障发现和转移。如果数据库服务器宕机,DNS仍然会返回宕机服务器的IP地址,导致应用程序访问失败。
  • DNS的负载均衡策略较为简单,只支持轮询。

解决方案二:引入注册中心

注册中心的作用: 注册中心用于服务注册和发现,支持故障转移和负载均衡。

常用注册中心:

  • 阿里巴巴的Nacos
  • Netflix的Eureka
  • Consul

工作原理

  • 部署一个注册中心,所有服务(如MySQL数据库)启动时向注册中心注册。
  • 注册中心维护一个服务列表,包含所有可用的服务节点。
  • 应用程序(如Tomcat)从注册中心获取服务节点的IP地址,并向选定的节点发起请求。

故障发现和转移

  • 服务节点定期向注册中心发送心跳包,告知其状态。
  • 如果某个节点在一定时间内未发送心跳包,注册中心将其从服务列表中移除。
  • 应用程序从注册中心获取的IP地址列表中不会包含宕机的节点。

优点

  • 支持故障发现与故障转移,保证高可用性。
  • 提供多种负载均衡策略,配置灵活。

缺点

  • 架构复杂度增加,需要部署和维护注册中心集群。
  • 注册中心处理逻辑复杂,可能增加故障概率。

总结

  • IP直连的问题: 造成应用之间的强耦合。
  • 解决方案
    • 引入DNS,采用域名方式进行服务访问。
    • 引入注册中心,支持服务注册、发现和故障转移。