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

什么是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.mzph.cn/diannao/58364.shtml

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

相关文章

Linux shell编程学习笔记87:blkid命令——获取块设备信息

0 引言 在进行系统安全检测时,我们需要收集块设备的信息,这些可以通过blkid命令来获取。 1 blkid命令的安装 blkid命令是基于libblkid库的命令行工具,可以在大多数Linux发行版中使用。 如果你的Linux系统中没有安装blkid命令,…

构建生产级的 RAG 系统

对 RAG 应用程序进行原型设计很容易,但要使其高性能、健壮且可扩展到大型知识语料库却很困难。 本指南包含各种提示和技巧,以提高 RAG 工作流程的性能。我们首先概述一些通用技术 - 它们按照简单到复杂的顺序进行排列。然后,我们将更深入地研…

【python实操】python小程序之测试报告

引言 python小程序之测试报告 文章目录 引言一、测试报告1.1 概念1.1.1 使用Pytest和Allure生成测试报告1.1.2 使用unittest和HTMLTestRunner生成测试报告1.1.3 总结 1.2 题目1.3 代码1.3 代码解释 二、思考 一、测试报告 1.1 概念 python生成测试报告,常用的方法包…

ELK之路第一步——Elasticsearch集群的搭建以及踩坑记录

elasticSearch集群 前言一、架构二、下载三、虚拟机相关设置3.1 创建es用户3.2 为建es用户赋权sudo3.3 更换es目录所属用户 四、Elasticsearch配置文件修改4.1 修改elasticsearch.yml4.2 修改jvm.options4.3 修改jdk路径 五、启动六、启动报错七、设置密码八、可视化界面cerebr…

Ubuntu22.04环境搭建MQTT服务器

官网: https://mosquitto.org 1.引入库 sudo apt-add-repository ppa:mosquitto-dev/mosquitto-ppa2.升级安装工具 sudo apt-get update 3.安装 sudo apt-get install mosquitto 4.安装客户端 sudo apt-get install mosquitto-clients5.添加修改配置文件 进…

力扣21 : 合并两个有序链表

链表style 描述: 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例: 节点大小相同时,l1的节点在前 何解? 1,遍历两个链表,挨个比较节点大小 同时遍…

Python应用指南:利用高德地图API实现路径规划

高德路径规划API是一套基于HTTP协议的接口服务,旨在为开发者提供便捷的路径规划解决方案。该API支持多种出行方式,包括步行、公交和驾车,能够满足不同场景下的路径查询需求。通过调用这些API,用户可以获得从起点到终点的最优路径建…

深度学习数学基础之偏导数

深度学习数学基础之偏导数 偏导数的详细解释与实例 定义 偏导数是多变量函数对其中一个变量的导数,同时固定其他变量。它是研究函数在多维空间内各个方向上局部变化性质的基本工具。对于函数 ( f ( x 1 , x 2 , … , x n ) f(x_1, x_2, \dots, x_n) f(x1​,x2​…

论文阅读(二十三):Squeeze-and-Excitation Networks

文章目录 1.介绍2.原理3.代码4.SE模块的应用 论文:Squeeze-and-Excitation Networks   论文链接:Squeeze-and-Excitation Networks   代码链接:Github 1.介绍 卷积算子使网络能够在每一层的局部感受野中融合空间(spatial&…

视频智能分析平台LiteAIServer摄像机视频分析软件下载检测工业排污

在全球环境保护与可持续发展的大潮中,工业排污的有效监控与管理成为了衡量一个国家或地区绿色发展能力的重要指标。面对这一挑战,视频智能分析平台LiteAIServer以其创新的技术手段,为工业排污监管开辟了新路径,展现了科技在环保领…

【git】 git 删除了文件,如何找回

git 删除了文件,如何找回 使用 git revert 并不是恢复误删除文件的最佳方法,因为 git revert 通常用于撤销已经提交的更改(生成一个反向提交)。如果你误删除了文件,还未提交更改,或者已经提交但想恢复删除…

【Unity基础】初识UI Toolkit - 运行时UI

Unity中的UI工具包(UI Toolkit)不但可以用于创建编辑器UI,同样可以来创建运行时UI。 关于Unity中的UI系统以及使用UI工具包创建编辑器UI可以参见: 1. Unity中的UI系统 2. 初识UI Toolkit - 编辑器UI 本文将通过一个简单示例来…

Docker Compose一键部署Spring Boot + Vue项目

目录 前提条件 概述 Compose简介 Compose文件 Compose环境 Compose命令 帮助命令 关键命令 Compose部署项目 初始化环境 查看代码文件 sql数据准备 nginx配置文件准备 创建 compose.yaml 一键启动compose多个容器 浏览器访问虚拟机ip:80(可省略默认的80端口) …

动态代理:面向接口编程,屏蔽RPC处理过程

RPC远程调用 使用 RPC 时,一般的做法是先找服务提供方要接口,通过 Maven把接口依赖到项目中。在编写业务逻辑的时候,如果要调用提供方的接口,只需要通过依赖注入的方式把接口注入到项目中,然后在代码里面直接调用接口…

13.音乐管理系统(基于SpringBoot + Vue)

目录 1.系统的受众说明 ​​​​​​​ 2 需求分析 2.1用例图及用例分析 2.1.1 用户用例图及用例分析 2.1.2 管理员用例图及用例分析 2.2 系统结构图和流程图 2.2.1 音乐播放器的系统流程图(图2.2.1-1) 2.2.2 系统功能表(表2.2.2…

【HarmonyOS】鸿蒙应用低功耗蓝牙BLE的使用心得 (一)

【HarmonyOS】鸿蒙应用低功耗蓝牙BLE的使用心得(一) 一、前言 鸿蒙官网文档中蓝牙部分,对于之前没有开发过蓝牙的同学,使用和查阅起来不是很方便。因为只是API的调用说明。并没有蓝牙整个调用流程的讲解,所以看起来会…

Golang的多版本管理

Golang的多版本管理 一、 为什么需要多版本管理? 现代软件开发中,随着项目日益复杂,往往需要使用不同的Golang版本来适配不同的依赖库或者框架。同时,不同的项目也可能需要不同的Golang版本来编译和执行。因此,多版本管…

解决milvus migration 迁移数据到出现数据丢失问题

在迁移数据的时候发现数据丢失 问题是数据在批量迁移的过程中,这个错误会被忽略掉 分析下来是因为buuferSize 设置的是500条数据,但是迁移工具对一次迁移的数据是是有大小限制的,如果500条数据的总大小大于4194304,就会导致数据…

Nop平台与SpringCloud的功能对比

Nop平台是根据可逆计算原理从零开始设计并实现的新一代的低代码平台,它的目标并不是针对少数固化的场景提供预置的开发脚手架和可视化设计工具, 而是打破描述式编程和传统命令式编程之间人为制造的藩篱,建立两者无缝相容的一种新的编程范式。…

基于SpringBoot云养鸡互动平台的设计与实现

前言 对于当今社会的人们来说,互联网技术是必不可少的,随着经济和技术的不断发展,计算机已经深入到各个领域。云养鸡互动平台将人们的时间需求与计算机技术结合起来,架起一座桥梁,使云养鸡互动更加方便快捷。云养鸡互…