详谈为什么架构设计禁止 IP 直连

Posted 菜鸟厚非

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了详谈为什么架构设计禁止 IP 直连相关的知识,希望对你有一定的参考价值。

首先两个问题

  • IP直连有什么问题?
  • 怎么解决IP直连的问题?

什么是 IP 直连

看下面两个连接,一个连接字符串一个访问地址

jdbc:mysql://202.99.183.21:3306/db
http://192.168.31.205/webapp

这个两个链接被 A、B、C等程序依赖,这样有什么缺点问题呢

1 . 强耦合
如下图,应用程序链接在 192.168.31.102 服务器的 MySQL

某一天业务量增加,102 服务器配置过低,考虑将 MySQL 迁移到 103 服务器。此时所有连接到 102 数据库的应用程序都需要修改其链接字符串并程序发布程序,这样费时费力维护成本高。

此时有的同学肯会有疑问,不就发布个程序吗,这个在小厂是么问题的。但是在大厂会设计到一系列的审批、流量切换等非常麻烦,而且中间过程出现的意外责任谁来担。

如果我们改为域名方式,当数据库或者应用程序地址发生修改时,无序再修改依赖者,只需更新其 Mapping 即可。

jdbc:mysql://rm-2zedsl7662jlm54g9zo.mysql.rds.aliyuncs.com:3306/db
http://webhost/webapp


结论:在实际开发过程中使用直连方式是不可取的,对应的也有几种解决方案,接下来我进行讲解。


怎么解决 IP 直连问题

a .引入内部 DNS

可以在局域网中搭建 DNS 服务器,一般也会有相应的可视化界面来进行配置。

当引入 DNS 服务器后,这个操作就比较灵活了。当应用程序访问数据库时会根据域名进行解析对于的 IP ,然后后发起实际的请求,进而访问到实际的数据库。

如果某一天数据库需要进行迁移,只需更新 DNS 服务器域名对应得 IP 即可,无序修改对应得应用程序,起到解耦的作用。

优缺点

  • 优点
    简单粗暴,实际较为简单,根据机房服务器配置即可
  • 缺点
    没有故障发现与转移,多 IP 只有轮询规则

b. 加入注册中心

市场上常见的注册中心有 Nacos、Eureka、Consul

注册中心弥补的 DNS 的缺陷,当 MySQL 集群启动后会向注册中心注册,当程序访问是会向注册中心拿取实际 IP 地址(注册中心会根据配置的负载均衡算法返回)。

如何进行故障转移呢,已经注册在注册中心的信息后,会对注册中心定时发送心跳检查,如果一定的时间内没有收到,注册中心会对其进行移除。

优缺点

  • 缺点
    系统复杂度增加,注册中心相比 DNS 需要保证注册中心的高可用性。DNS 只是一个域名与 IP 的对照表,出问题的可能性极小。
  • 优点
    可以进行故障转移,更好的负载均衡策略

开发环境如何使用域名

开发环境就必须配置 Host 进行强指定喽,SwitchHosts : https://oldj.github.io/SwitchHosts/

以上是关于详谈为什么架构设计禁止 IP 直连的主要内容,如果未能解决你的问题,请参考以下文章

详谈微服务与容器技术发展史

软考 系统架构设计师计算机网络③ 网络存储技术

软考 系统架构设计师计算机网络③ 网络存储技术

Java安全架构互联网架构 互联网高并发系统下的安全认证架构设计

AWS上的Serverless架构详谈

详谈设计模式——全网最详细的设计模式系列