详谈为什么架构设计禁止 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 直连的主要内容,如果未能解决你的问题,请参考以下文章