聊聊在应用层面实现内网穿透功能是否可行

前言

最近接手了供方开发的网关项目,交接文档里面有个内网穿透的功能,一下子就吸引的我的目光。实现这个内网穿透的背景是业务部门有些业务是部署在公网,这些公网的业务想访问内网的业务,但因为公网和内网没打通,导致无法访问,为了解决这个问题,供方在网关上做了一个内网穿透功能

应用层如何实现内网穿透


大致的整体流程如图,这里的实现核心就是在外网部署了一个消息中间件,通过这个消息中间件打通内外网数据传输通道,间接打通了内外网访问。当时我看到这个方案时,第一感觉是能设计出这个方案的人,真是人才,但后面细究下去,发现这个方案其实有些问题,后面会说

其次他们这个消息中间件选用了kafka,而非其他消息中间件,是因为kafka有个请求-响应模式的能力,就跟rpc的调用类似,具有将异步转同步的能力。具体实现就是利用spring-kafka提供的ReplyingKafkaTemplate来实现这一能力,其用法可以查看我之前文章
聊聊如何利用kafka实现请求-响应模式

使用消息中间件来做内网穿透存在的问题?

a、 消息中间件自有复杂性

  • 消息中间件的可靠性,可用性如何保证
  • 重复消费如何解决
  • 消息的积压问题

b、 业务侵入性

业务需在订阅到数据后,做幂等性校验,同时业务还需要根据供方提供的规范进行数据响应,对业务开发人员有一定技术要求

那有没有相对优雅一点的方案?


实现核心点,通过在外网部署反向代理,同时打通反向代理与网关之间的专线网络,这么做的好处就是业务层基本上不用改动,其次相比运维中间的复杂度,运维反向代理的复杂度会相对低一点

总结

不管是通过消息队列还是通过反向代理来实现内网穿透,本质上就是多加一层来解决,就是应了一句话,没有什么是加一层中间层不能解决的,如果有,那就再加一层。

其次加反向代理是最容易想到方案,当时供方不可能没想到,主要原因是因为他们有交付压力,其次因为他们是乙方,要申请专线需要通过层层审核,最后外包基本上他们是不会考虑到后续的运维复杂度

有时候我们做方案设计,是需要加入当时业务场景以及资源来做一定的收敛以及权衡

文末我按供方的实现思路,写了一个阉割版、基于kafka实现内网穿透的demo,感兴趣的朋友,可以参考下

demo链接

https://github.com/lyb-geek/springboot-learning/tree/master/springboot-kafka-forward

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

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

相关文章

TPC-H数据集使用说明

TPCH数据使用说明 表模式: TPCH官网链接:TPC-H Homepage 同学们可以自行下载TPCH-tools自行生成数据(10GB),下面主要是以mysql为例说明TPC-H的使用方法。 供同学自行参考: windows :TPC-H测…

vue2+html2canvas+js PDF实现试卷导出和打印功能

1.首先安装 import html2canvas from html2canvas; import { jsPDF } from jspdf; 2.引入打印插件print.js import Print from "/assets/js/print"; Vue.use(Print) // 打印类属性、方法定义 /* eslint-disable */ const Print function (dom, options) {if (…

Simdroid-EC:液冷仿真新星,助力新能源汽车电机控制器高效散热

近年来,新能源电动车的销量呈现出快速增长的态势。据统计,2024 年1-10月中国新能源汽车销量达728万辆,同比增长37.8%。 电机控制器在新能源汽车中对于保障动力和安全性能扮演着至关重要的角色,其核心部件IGBT(绝缘栅双…

静态路由与交换机配置实验

1.建立网络拓扑 添加2台计算机,标签名为PC0、PC1;添加2台二层交换机2960,标签名为S0、S1;添加2台路由器2811,标签名为R0、R1;交换机划分的VLAN及端口根据如下拓扑图,使用直通线、DCE串口线连接…

深度学习:MindSpore自动并行

随着模型规模的逐渐增大,需要的算力逐渐增强,但是算力需求增长速度远高于芯片算力增长速度。现在唯一的解决方案只有通过超大规模集群训练大模型。 大集群训练大模型的挑战 内存墙 200B参数量的模型,参数内存占用745GB内存,训练…

前端成长之路:HTML(2)

HTML中有两个非常重要的标签——表格和表单,在介绍之前需要先了解表格和表单的区别:表格是用于展示数据的;表单是用于提交数据的。本文主要介绍表格。 表格标签 表格主要是用于显示、展示数据的,并非是页面布局。它可以使本来难…

如何使用WinCC DataMonitor基于Web发布浏览Excel报表文档

本文介绍使用 WinCC DataMonitor 的 "Excel Workbooks" 功能,通过 Excel 表格显示 WinCC 项目的过程值、归档变量值和报警归档消息。并可以通过 Web 发布浏览访问数据 1.WinCC DataMonitor是什么 ? DataMonitor 是 SIMATIC WinCC 工厂智能中…

Facebook广告突然无消耗?原因解析与解决方案。

在Facebook广告投放中,广告突然无消耗是很多广告主都会遇到的难题。这种情况不仅浪费时间,还可能导致营销活动停滞,影响业务发展。那么,广告无消耗的原因是什么?又该如何解决呢? 一、Facebook广告无消耗的…

安卓调试环境搭建

前言 前段时间电脑重装了系统,最近准备调试一个apk,没想到装环境的过程并不顺利,很让人火大,于是记录一下。 反编译工具下载 下载apktool.bat和apktool.jar 官网地址:https://ibotpeaches.github.io/Apktool/install…

shell基础知识4----正则表达式

一、文本搜索工具——grep grep -参数 条件 文件名 其中参数有以下: -i 忽略大小写 -c 统计匹配的行数 -v 取反,不显示匹配的行 -w 匹配单词 -E 等价于 egrep ,即启用扩展正则表达式 -n 显示行号 -rl 将指定目录内的文件打…

git branch -vv(显示本地分支与远程分支的最新状态和提交信息)(very verbose mode)

文章目录 字段说明下一步操作建议字段说明当前状态分析相关操作建议 -vv功能说明-vv 与单个 -v 的区别总结 出现如下状况,是因为我把本地的develop分支没有提交到gitlab上的develop分支。 而是把develop分支的内容提交到了gitlab上的master分支,这样是不…

树莓派4B android 系统添加led灯 Hal 层

本文内容需要用到我上一篇文章做的驱动,可以先看文章https://blog.csdn.net/ange_li/article/details/136759249 一、Hal 层的实现 1.Hal 层的实现一般放在 vendor 目录下,我们在 vendor 目录下创建如下的目录 aosp/vendor/arpi/hardware/interfaces/…

Apache DolphinScheduler 限制秒级别的定时调度

背景 Apache DolphinScheduler 定时任务配置采用的 7 位 Crontab 表达式,分别对应秒、分、时、月天、月、周天、年。 在团队日常开发工作中,工作流的定时调度一般不会细化到秒级别。但历史上出现过因配置的疏忽大意而产生故障时间,如应该配…

MTK Android12 开机向导

文章目录 需求-场景参考资料:博客资料官网参考资料:参考资料注意点 附件资料文件说明:推荐工具:配置定制的 声明叠加层 APK需求实现替换字符、删减开机向导界面、添加开机向导界面删除部分界面需求,官网说明如下更新部…

Text2SQL(NL2sql)对话数据库:设计、实现细节与挑战

Text2SQL(NL2sql)对话数据库:设计、实现细节与挑战 前言1.何为Text2SQL(NL2sql)2.Text2SQL结构与挑战3.金融领域实际业务场景4.注意事项5.总结 前言 随着信息技术的迅猛发展,人机交互的方式也在不断演进。…

长沙数字孪生工业互联网三维可视化技术,赋能新型工业化智能制造工厂

长沙正积极拥抱数字化转型的浪潮,特别是在工业互联网和智能制造领域,长沙数字孪生技术的广泛应用,为新型工业化智能制造工厂的建设与发展注入了强劲动力。 在长沙智能制造工厂内,三维可视化技术被广泛应用于产线设计仿真优化和产…

FPGA工作原理、架构及底层资源

FPGA工作原理、架构及底层资源 文章目录 FPGA工作原理、架构及底层资源前言一、FPGA工作原理二、FPGA架构及底层资源 1.FPGA架构2.FPGA底层资源 2.1可编程输入/输出单元简称(IOB)2.2可配置逻辑块2.3丰富的布线资源2.4数字时钟管理模块(DCM)2.5嵌入式块 …

计算机网络期末常见问答题总结

1、试说明为什么在运输建立时使用三报文握手,如果不采用三报文握手会出现什么情况? TCP三次握手的目的是确保客户端和服务器都能够接收对方的连接请求,并建立起可靠的连接。如果只进行两次握手,可能会导致以下情况的发生: - 如果客户端发送的SYN包在网…

Redis篇-4--原理篇3--Redis发布/订阅(Pub/Sub)

1、概述 Redis 发布/订阅(Publish/Subscribe,简称 Pub/Sub)是一种消息传递模式,允许客户端订阅一个或多个通道(channel),并接收其他客户端发布到这些通道的消息。 2、Redis 发布/订阅的主要概…

第六届地博会世界酒中国菜助力广州龙美地标美食公司推动地标发展

第六届知交会暨地博会:世界酒中国菜助力广州龙美地标美食公司推动地标产品创新发展 2024年12月9日至11日,第六届粤港澳大湾区知识产权交易博览会暨国际地理标志产品交易博览会在中新广州知识城盛大启幕。本届盛会吸引了全球众多知识产权领域的专业人士和…