为什么架构设计要禁用ip直连
一 什么是ip直连?
ip直连就是指我们的项目系统中,直接通过ip的方式去连接数据库等实例,如下图:
这在我们开发的过程中是非常常见的,也是没有什么问题的,但是项目到达了线上,必然会产生很多的问题。
接下来我们看一个正确的用法:
可以看到上图,之前的ip地址,都被替换成了域名或者字符串。
看了上述的描述,那么为什么我们要使用下面的方式呢?其实主要是为了解耦,使用ip的方式相当于为我们每一个项目绑定了对应的mysql服务器,如下图:
假设我们现在有新的需求,原来这台sql服务器因为性能太差了,我们需要切换到一台更好的服务器,我们需要怎么做?
如果是之前ip直连的方式配置,我们只能将服务下线,更新代码,再打包重新发布(没有在线注册中心的时候),如下图:
这样显然是不科学的,那么我们要怎么去实现不需要重新修改也可以实现呢?主要有两种方式:
一 引入内部的DNS(域名解析服务器)
讲一下这里的流程:
- 将102绑定到mydb.com
- 切换新机器,只需要在DNS服务器将mydb.com解析的ip重新绑定为103
- tomcat访问此域名就会重定向到103服务器
备注: 一个域名可以绑定多个ip,默认是轮询的机制访问
优点: 简单粗暴,安装简单
缺点: 无法做漂移,也就是当103挂掉了,请求是无法感知的,还会持续的发送请求到已经死掉的103服务器,多个ip只能做轮询的操作
二 加入注册中心 Nacos / Eureka / consoul
了解微服务的应该都知道注册中心,我们可以根据如下的图来设计:
我们将数据库的各个实例注册到注册中心,这样当我们请求到达的时候,其流程如下:
- 将mysql集群注册到注册中心
- 请求根据配置的规则去请求获取当前负载均衡的节点
- 如果有新的加入或者旧的移除,只需要在注册中心移除或者重新注册即可(注册中心自带心跳可以判活,时间根据不同框架不同)
优点:
- 支持故障发现与故障转移
- 多种负载均衡规则
缺点:
- 架构复杂度增加