为什么架构设计禁止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直连的强耦合问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/904116.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Java Deeplearning4j:实现文本分类

🧑 博主简介:历代文学网(PC端可以访问:https://literature.sinhy.com/#/literature?__c=1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,精通Java编程,高并发设计,Springboot和微服务,熟悉Linux,ESXI虚拟化以及云原生Docker和K8s,热衷于探索科…

Java程序设计:spring boot(10)——单元测试

1 pom.xml 测试依赖添加 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId> </dependency> 2 Service业务方法测试 以 UserService 为例&#xff0c;src/test/java ⽬录下添…

xshell上使用lrzsz工具通过串口传输文件

注意事项 最好加"-E" 选项&#xff0c;这样不会覆盖现有的同名文件。

人工智能与数据安全:Facebook如何应对隐私挑战

在数字时代&#xff0c;数据隐私和安全成为了用户和企业关注的核心问题。作为全球最大的社交媒体平台之一&#xff0c;Facebook面临着日益严峻的隐私挑战。近年来&#xff0c;频繁发生的数据泄露事件和对用户隐私的质疑&#xff0c;使得Facebook在保护用户数据方面倍感压力。为…

MPSK(BPSK/QPSK/8PSK)调制解调的Matlab仿真全套

一、概述 MPSK(BPSK、QPSK、8PSK)等是常用的相位调制方式,本文对数据获取、比特流组织、基带调制、上变频发送、添加噪声、接收下变频、基带解调、数据还原等过程进行仿真。 模块化、通用化设计,将函数分为(1)数据读取转比特流;(2)基带调制【参数控制调制类型】;(…

Python实现全国岗位招聘信息可视化分析(源码+论文+部署讲解)

项目源码&数据源获取 利用Python实现全国岗位招聘信息可视化分析 项目背景&#xff1a; 1.为企业招聘决策提供科学的依据和参考&#xff0c;可以帮助人力资源部门、招聘机构和求职者了解当前的就业形势、行业趋势和人才需求&#xff0c;从而做出更明智的招聘和求职决策。…

【c语言】运算符汇总(万字解析)

&#x1f31f;&#x1f31f;作者主页&#xff1a;ephemerals__ &#x1f31f;&#x1f31f;所属专栏&#xff1a;C语言 目录 前言 一、c语言运算符的分类 二、各运算符的功能及使用 1. 算数运算符 - * / % 2. 位运算符 二进制和进制转换 二进制转十进制 十进制…

C# OpenCvSharp DNN UNet 推理

目录 效果 模型 项目 代码 下载 效果 模型 Inputs ------------------------- name&#xff1a;data tensor&#xff1a;Float[1, 3, 256, 256] --------------------------------------------------------------- Outputs ------------------------- name&#xff1a;p…

C语言中的位操作

第一章 变量某位赋值与连续赋值 寄存器 | 值 //例如&#xff1a;a 1000 0011b a | (1<<2) //a 1000 0111 b 单独赋值 a | (3<<2*2) // 1011 0011b 连续赋值 第二章 变量某位清零与连续清零 寄存器 & ~&#xff08;&#xff09; 值 //例子&#xff1a;a …

【宠物狗狗数据集】 犬类品种识别 宠物狗检测 深度学习 目标检测(含数据集)

一、背景意义 随着人们对宠物狗的喜爱日益增加&#xff0c;犬种的多样性也逐渐受到重视。狗狗不仅是家庭的好伴侣&#xff0c;更在多个领域中发挥着重要作用&#xff0c;如导盲、搜救、疗愈等。因此&#xff0c;准确识别和分类各种犬种显得尤为重要。传统的犬种识别方法往往依赖…

【ROS 基础教学系列】ROS话题(Topic)通信

ROS 基础教学系列-ROS话题(Topic)通信 文章目录 ROS 基础教学系列-ROS话题(Topic)通信前言一、话题通讯模型二、Topic Hello World2.1 创建并初始化功能包2.2 确定Topic名称及消息格式2.3 实现发布者与订阅者&#xff08;C版&#xff09;2.4 实现发布者与订阅者&#xff08;Pyt…

大东方码险引领彩票行业新纪元:全球保险巨头携手共创新篇章

在全球经济多元化发展的今天,彩票行业作为兼具娱乐与公益特性的特殊市场,正迎来前所未有的变革机遇。面对这一广阔且充满潜力的市场前景,大东方保险——这一国际保险业的领航者,凭借其深厚的行业影响力和技术优势,携手安盛集团、富卫保险、法通保险、永明保险、泰禾保险、亚洲保…

逆向 解密接口信息附Demo(二)

目录 前言1. 加密2. 解密 前言 原先写过另外一篇&#xff0c;推荐阅读&#xff1a;逆向 解密接口信息&#xff08;附Demo&#xff09; 下文以 https://login1.scrape.center/ 进行讲解&#xff0c; 1. 加密 登录过程中可以使用断点进行一步一步排查 或者在js文件中搜索enco…

Linux安装es和kibana

安装Elasticsearch 参考文档&#xff1a;https://www.elastic.co/guide/en/elasticsearch/reference/current/targz.html#targz-enable-indices 基本步骤下载包&#xff0c;解压&#xff0c;官网提示&#xff1a; wget https://artifacts.elastic.co/downloads/elasticsearc…

如何选择适合自己的 Python IDE

集成开发环境&#xff08;IDE&#xff09;是指提供广泛软件开发能力的软件应用程序。IDE 通常包括源代码编辑器、构建自动化工具和调试器。大多数现代 IDE 都配备了智能代码补全功能。在本文中&#xff0c;你将发现目前市场上最好的 Python IDE。 什么是 IDE&#xff1f; IDE…

《HelloGitHub》第 103 期

兴趣是最好的老师&#xff0c;HelloGitHub 让你对编程感兴趣&#xff01; 简介 HelloGitHub 分享 GitHub 上有趣、入门级的开源项目。 github.com/521xueweihan/HelloGitHub 这里有实战项目、入门教程、黑科技、开源书籍、大厂开源项目等&#xff0c;涵盖多种编程语言 Python、…

HTTPS 协议原理

一.HTTPS的定义 大家在刚开始学习的时候是不是也是非常好奇HTTP与HTTPS之间有什么区别和联系&#xff0c;两者都是应用层协议&#xff0c;而HTTPS是在HTTP的基础上引入了加密层&#xff0c;从而将HTTP的明文传输进行加密&#xff0c;保障数据的安全性 二.加密与解密 定义&#…

00 DSA-- 入门、实现动态数组、实现链表、栈和队列、环形数组、哈希表

两种代码模式 核心代码模式 核心代码模式&#xff1a;就是给你一个函数框架&#xff0c;你需要实现函数逻辑&#xff0c;这种模式一般称之为。 目前大部分刷题平台和技术面试/笔试场景都是核心代码模式。 比如力扣第一题两数之和&#xff0c;就是给出 twoSum 函数的框架如下…

【周末推荐】Windows无缝连接iPhone

关注“ONE生产力”&#xff0c;获取更多精彩推荐&#xff01; 又到了周末推荐时间了&#xff0c;今天我们介绍一个Windows内置的功能&#xff0c;能够帮助大家将自己的电脑和iPhone连接在一起。 很多用Windows的小伙伴羡慕macOS可以和iPhone无缝连接&#xff0c;轻松阅读和回…

AI驱动的图像文本提取【Llama 3.2-Vision】

本月初&#xff0c;我尝试了书籍封面识别&#xff0c;将 YOLOv10、EasyOCR 和 Llama 3 结合成一个无缝工作流程。结果如何&#xff1f;我自信地从书籍封面中提取标题和作者&#xff0c;就像这是我的新超能力一样。你可以在这篇文章中查看这一旅程&#xff1a;使用自定义 Yolov1…