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

news2025/1/12 21:04:44

什么是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.coloradmin.cn/o/2227150.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

算法的学习笔记—滑动窗口的最大值(牛客JZ59)

😀前言 滑动窗口问题是常见的算法题型,主要考察如何在限定窗口内找到特定值,比如最大值、最小值等。在这篇文章中,我们将深入分析“滑动窗口的最大值”问题的求解方法,并提供一种实现思路,以帮助大家更好地…

惊人,合肥银泰的 LV 柜姐事件引发热议

安徽合肥银泰中心发生的这起“LV柜姐事件”引发了广泛关注。以下是该事件的详细情况:1. 事件起因:- 一名已婚男士到合肥银泰中心的LV专柜购物,因其年轻帅气且出手阔绰,LV柜姐添加了他的联系方式。之后,柜姐在明知男方有…

Python量化交易(五):量化择时策略

引言 大家好,我是GISer Liu😁,一名热爱AI技术的GIS开发者。本系列文章是我跟随DataWhale 2024年10月学习赛的Python量化交易学习总结文档。在现代金融市场中,量化择时策略已成为投资者追求超额收益的重要工具。本文将系统梳理量化…

电气安全隐患不容忽视

在现代生活中,电力如同血液般滋养着城市的每一个角落,然而,当这股能量失控时,它也能瞬间化身为吞噬生命的火焰。根据国家消防局的权威数据,电气火灾占所有火灾的28.4%,而其中6.5%的源头直指短路——这一看似…

单细胞数据分析(三):单细胞聚类分析

文章目录 介绍目的加载R包数据链接导入数据可视化聚类选择聚类分辨率值输出结果系统信息介绍 单细胞聚类分析是一种用于解析单细胞RNA测序(scRNA-seq)数据的方法,旨在将成千上万个单细胞根据它们的基因表达模式分组到不同的类别或“簇”中。每个簇代表了具有相似基因表达特…

auto占位符(C++11~C++17)

文章目录 1. 定义1.1 注意事项 2. 推导规则3. 返回类型推导(C14)4. lambda表达式中使用auto类型推导5. 非类型模板形参占位符(C17) 1. 定义 在C11以前,auto关键字是用来声明自动变量的。从C11起auto被用来:声明变量时根据初始化表…

推荐收藏!一款超好用的网盘资源搜索工具

抖知书老师推荐: 盘搜问世以来,以其简洁、实用的设计,迅速成为网民心中的网盘资源搜索利器。对于那些日常生活离不开网盘的用户来说,盘搜的存在让他们的资源查找变得更加便捷和高效。从影视资源到课程资料再到个人文件&#xff0…

opencv - py_imgproc - py_filtering filtering 过滤-卷积平滑

文章目录 平滑图像目标2D 卷积(图像过滤)图像模糊(图像平滑)1. 平均2. 高斯模糊3. 中值模糊4. 双边滤波 其他资源 平滑图像 目标 学习: 使用各种低通滤波器模糊图像将定制滤波器应用于图像(2D 卷积&…

MT1401-MT1410 码题集 (c 语言详解)

目录 MT1401归并排序 MT1402堆排序 MT1403后3位排序 MT1404小大大小排序 MT1405小大大小排序II MT1406数字重排 MT1407插入 MT1408插入 MT1409旋转数组 MT1410逆时针旋转数组 MT1401归并排序 c 语言实现代码 #include <stdio.h>// merge two subarrays void merge(int a…

大数据日志处理框架ELK方案

介绍应用场景大数据ELK日志框架安装部署 一&#xff0c;介绍 大数据日志处理框架ELK&#xff08;Elasticsearch、Logstash、Kibana&#xff09;是一套完整的日志集中处理方案&#xff0c;以下是对其的详细介绍&#xff1a; 一、Elasticsearch&#xff08;ES&#xff09; 基本…

PHP海外矿物矿机理财投资源码-金融理财投资源码

PHP海外矿物矿机理财投资源码/金融理财投资源码 海外矿物矿机理财投资源码 测试不错,可以做其他产品理财,功能都没啥太大问题

Unity3D学习FPS游戏(1)获取素材、快速了解三维模型素材(骨骼、网格、动画、Avatar、材质贴图)

前言&#xff1a;最近重拾Unity&#xff0c;准备做个3D的FPS小游戏&#xff0c;这里以官方FPS案例素材作为切入。 导入素材和素材理解 安装Unity新建项目新建文件夹和Scene如何去理解三维模型素材找到模型素材素材预制体结构骨骼和网格材质&#xff08;Material&#xff09;、…

php反序列化漏洞典型例题

1.靶场环境 ctfhub-技能树-pklovecloud 引用题目&#xff1a; 2021-第五空间智能安全大赛-Web-pklovecloud 2.过程 2.1源代码 启动靶场环境&#xff0c;访问靶场环境&#xff0c;显示源码&#xff1a;直接贴在下面&#xff1a; <?php include flag.php; class pks…

【flask】 flask redis的使用

目的&#xff1a;如何使用在flask web项目中连接redis&#xff0c;并简单的使用 使用的库包&#xff1a;flask-redis pip install falsk-redis下面的写法是对项目代码进行模块化拆分的写法&#xff0c;在app.py中只进行对象的初始化等操作&#xff1b;exts.py中创建对象&…

【含文档】基于ssm+jsp的房屋中介服务平台(含源码+数据库+lw)

1.开发环境 开发系统:Windows10/11 架构模式:MVC/前后端分离 JDK版本: Java JDK1.8 开发工具:IDEA 数据库版本: mysql5.7或8.0 数据库可视化工具: navicat 服务器: apache tomcat 主要技术: Java,Spring,SpringMvc,mybatis,mysql,vue 2.视频演示地址 3.功能 系统定义了两个…

CI/CD 的原理

一、CI/CD 的概念 CI/CD是一种软件开发流程&#xff0c;旨在通过自动化和持续的集成、测试和交付实现高质量的软件产品。 CI(Continuous Integration)持续集成 目前主流的开发方式是协同开发&#xff0c;即多位开发人员同事处理同意应用不同模块或功能。 如果企业在同一时间将…

网络请求自定义header导致跨域问题

我记得我的项目之前已经解决了跨域问题。 后来在功能开发着&#xff0c;需要添加一个自定义的header&#xff0c;发现又出现跨域报错。 于是又开始一通摸索折腾。 我的项目前面端是用axios网络请求&#xff0c;通过拦截器添加header&#xff0c;代码如下&#xff1a; //添加请…

python实战项目47:Selenium采集百度股市通数据

python实战项目47:Selenium采集百度股市通数据 一、思路分析二、完整代码一、思路分析 这里以获取百度股市通股评下的投票数据为例,页面中的其他数据同理。由于此页面数据是js动态加载的,所以采用Selenium获取数据。思路很简单,通过Selenium打开页面,然后定位到“股评”选…

《使用Gin框架构建分布式应用》阅读笔记:p212-p233

《用Gin框架构建分布式应用》学习第12天&#xff0c;p212-p233总结&#xff0c;总22页。 一、技术总结 1.JavaScript知识点 (1)class、method (2)function, arrow function, (3)fetch() (4)Promise, then() 2.bootstrap 第5章主要涉及前端技术的运用&#xff0c;作为后…

nfs作业

nfs作业 服务机&#xff1a; 编写配置文件&#xff1a; [rootlocalhost ~]# vim /etc/exports 配置文件内容&#xff1a; /nfs/shared *(ro,sync) /nfs/upload 192.168.36.0/24(rw,anonuid210,anongid210,sync) /home/tom 192.168.36.132(rw) 创建目录&#xff0c;文件&am…