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

ops/2024/10/30 0:41:33/

什么是IP直连

IP直连指应用程序直接在代码中硬编码IP地址,比如,连接mysql数据库的数据库链接,如下的定义方式,就属于IP直连

这种写法在开发环境中很常见,但是,在正式生产环境中,如果也这样写,就会产生一些问题。假如202.99.138.21这台数据库服务器出现了问题,现在要紧急切换到202.99.183.22这台数据库服务器上,那就需要改代码,然后发布应用,才能实现数据库的切换。这在大型商城应用中是不可取的,会影响用户正常使用,改了代码就可能产生未知的风险。

未解耦的情况:

Tomcat访问数据库服务器,这样的架构就是强耦合。

当原来的数据库服务器出现了问题,现在要换一条服务器,必须要修改代码,代码重新发布,应用重新部署。

总结:在实际应用中,用IP地址直接指向服务器的方式,是不可取的。

针对这个问题,常用解决方法有两个:

方法1:引入内部DNS

DNS域名解析服务器,指IP地址跟域名的对照关系。

可以在自己应用的局域网中,搭建一个域名解析服务器。

搭建了域名解析服务器后,应用系统再访问数据库时,先访问域名解析服务器,然后域名解析服务器会返回数据库的实际IP,应用系统再根据IP去访问数据库服务器。

通过增加DNS后,IP地址的迁移就变的更加灵活,比如现在要把数据库服务器的IP从192.168.31.102改为192.168.31.103,这个改动就不需要去更改应用程序,也不需要重新部署。只需要在DNS域名解析服务器上将IP地址更新,就可以了。

内部DNS服务器,优点是简单;缺点是没有故障发现与转移,多IP只有轮询规则。

没有故障发现与转移:指如果数据库服务器宕机了,那DNS服务器是不能发现故障的,还是会正常返回数据库的IP地址,应用系统还是会去访问已经宕机的数据库服务器,不能够发现故障,也不能因为有故障而进行请求的转移,转移到没有故障的服务器上。

虽然在DNS域名解析服务器上,单个域名可以对应对个IP,但是配置了多个IP,多个IP之间,也是轮询。假设现在配置了三台数据库服务器,IP分别为A、B、C,第一次请求域名解析服务器时,请求返回的数据库IP为A,第二次请求是,返回IP为B,第三次返回C,第四次返回A......,以这样的方式进行轮询返回IP。DNS仅有轮询的功能,不具备更加复杂的负载均衡的功能。

方法二:加入注册中心

注册中心就是一个注册机构,可以将新的服务加入到注册中心,并且可以立即生效。

常见的注册中心有:Nacos 、Eureka、Consul

带有注册中心的服务器集群架构图

如上图所示,如果是数据库集群,搭建一个注册中心,是很好的一个方式。假如有三个数据库服务器,三个数据库都是数据同步的,数据库中的数据是一样的。三个数据库服务只要启动,就会向注册中心进行注册。

当应用服务器向注册中心发送请求时,注册中心会根据已注册的服务运行情况,采用一定的负载均衡策略,从多个节点中选择一个IP地址进行返回。

注册中心是如何发现故障并进行转移的呢?这根注册中心的机制有关系,这里有个心跳检测机制。比如每分钟由数据库服务器向注册中心发送一个心跳包,告诉注册中心,当前服务器运行正常。当一段时间后注册中心没有收到某台服务器发送的心跳包,那么注册中心就认为这个服务器发生了故障,当应用服务器再次向注册中心发送请求时,注册中心就不会把故障服务器的IP返回。利用该机制可以保证应用服务器访问的数据库集群服务器都是可用的。

注册中心的优势:支持故障发现与故障转移、多种负载均衡规则。

注册中心的缺点:增加了架构复杂度。

以上就是通过引入注册中心来解决IP直连的强耦合问题。


http://www.ppmy.cn/ops/129452.html

相关文章

WSGI、uwsgi与uWSGI

WSGI、uwsgi与uWSGI WSGI (web server gateway interface 网络服务网关接口) 只能用于python,是一个接口标准协议,django、flask自带有uwsgi 是WSGI的通信协议uWSGI是实现了uwsgi协议和WSGI服务的web服务器 他们是为了将web服务器与web框架连接起来 N…

基于SSM+VUE电影网站视频网站JAVA|VUE|Springboot计算机毕业设计源代码+数据库+LW文档+开题报告+答辩稿+部署教+代码讲解

源代码数据库LW文档(1万字以上)开题报告答辩稿 部署教程代码讲解代码时间修改教程 一、开发工具、运行环境、开发技术 开发工具 1、操作系统:Window操作系统 2、开发工具:IntelliJ IDEA或者Eclipse 3、数据库存储&#xff1a…

数字IC开发:布局布线

数字IC开发:布局布线 前端经过DFT,综合后输出网表文件给后端,由后端通过布局布线,将网表转换为GDSII文件;网表文件只包含单元器件及其连接等信息,GDS文件则包含其物理位置,具体的走线&#xff1…

【Thymeleaf】spring boot模板引擎thymeleaf用法详解

快速入门Thymeleaf 1️⃣ 什么是Thymeleaf?1️⃣ 模板入门2️⃣ 创建测试工程2️⃣ 配置文件2️⃣ 创建controller2️⃣ 写一个html页面2️⃣ 启动测试 1️⃣ Thymeleaf基础2️⃣ 实体类2️⃣ 增加接口2️⃣ $符号使用2️⃣ *符号的使用2️⃣ 符号的使用2️⃣ #符号…

Java知识巩固(十二)

I/O JavaIO流了解吗? IO 即 Input/Output,输入和输出。数据输入到计算机内存的过程即输入,反之输出到外部存储(比如数据库,文件,远程主机)的过程即输出。数据传输过程类似于水流,因…

基于SSM考研助手系统的设计

管理员账户功能包括:系统首页,个人中心,学生管理,教学秘书管理,考研资讯管理,考研名师管理,考研信息管理,系统管理 教学秘书账号功能包括:系统首页,个人中心…

关于sse、websocket与流式渲染

一、SSE是什么? 网络中的 SSE (Server-Sent Events) 是一种服务器向浏览器单向推送数据的机制,常用于需要实时更新的数据传输,如新闻推送、股票行情、聊天应用等。 SSE 的特点: 单向通信:服务器向客户端推送数据&…

CSS3新增长度单位

CSS3新增长度单位 rem:根元素字体的倍数,只与根元素字体大小有关;vw:占视口宽度的百分比;vh:占视口高度的百分比;vmax:占视口中宽和高最大的百分比;vmin:占视…