当前位置: 首页 > 网络应用技术

代理网关设计和实施(基于Netty)

时间:2023-03-06 19:29:06 网络应用技术

  从提款代理中,选择指定区域,添加认证信息并请求结果;

  本文的设计实现了传递网关:

  本文着重于代理网关本身的设计和实施,而不是代理资源的管理和维护。

  注意:本文包含大量可执行Java代码来解释与代理相关原则的原则

  本文的技术途径。在实现代理网关之前,首先介绍与代理相关的原则以及如何实现

  最后,本文是建立一个代理网关,该网关本质上是非透明的上游代理,并提供了详细的设计和实现。

  1个透明代理

  透明代理是代理机构的基础。本文使用Java Native Nios的NIO进行详细信息。实施代理网关时,实际使用是Netty框架。本机NIOS的实现有助于了解Netty的实现。

  透明代理商设计了三个交互派对,客户,代理服务和服务器。原则是:

  需要注意的重点是:

  完整的透明代理少于大约300行,并且完整的摘录如下:

  上面,向Netty学习:

  测试

  代理的测试相对简单。指向代码后,代理服务监视8006端口。此时:

  curl -x'localhost:8006'http://httpbin.org/get测试http请求

  curl -x'localhost:8006'https://httpbin.org/get测试https请求

  请注意,目前,代理服务代表HTTPS请求,但它不需要K选项即表示需要非安全代理。因为机构服务本身并不作为中级人员,也不分析客户端和远程服务器通信的内容。当非透明代理时,需要解决此问题。

  2非透明代理

  非透明代理需要分析客户端和远程服务器传输的内容并相应地进行。

  当传输是HTTP协议时,SocketPipe传输的数据是明亮文本的数据,可以在拦截后直接处理。

  当传输是HTTPS协议时,SocketPipe传输的有效数据是加密的数据,无法处理透明。加上是,无论是传输的HTTP协议还是HTTPS协议,SocketPipe read read read read read read to non -complete数据都需要处理处理,需要与之处理。聚集。

  SSLSocketchannel包装原理

  考虑到Nio的Socketchannel随当前的JDK不支持SSL。现有的sslsocket是一个阻止OIO。如图所示:

  可以看出

  下面,代码实现SSLSocketchannel

  多于:

  SSLSocketchannel测试服务器

  基于上述包装,简单的测试服务方面如下

  多于:

  SSLSocketchannel测试客户端

  基于上述服务器包装,简单的测试客户端如下

  多于:

  总结

  多于:

  3透明上游代理

  透明上游代理比透明代理更简单,差异是

  您只需要对透明代理进行以上简单的修改即可实现透明的上游代理。

  4非透明上游代理

  非透明上游代理比非透明代理更为复杂

  以上分为四个组件:客户端,代理服务(ServerHandler),代理服务(clientHandler),服务终端

  本文需要构建非透明的上游代理。以下内容使用Netty框架来提供详细的设计实现。统一的代理网关分为上面的两个部分,ServerHandler和ClientHandler,以下

  1代理网关服务终端

  主要包括

  初始化代理网关服务

  代理网关的初始化相对简单,

  代理网关服务的请求处理器在ServerChannelinitializer中定义为

  首先分析HTTP请求,然后进行聚会批准。最后,ServerChannelHandler实现了代理网关协议;

  代理网关协议:

  详细的实施为:

  2代理网关客户端

  代理网关服务器需要连接到远程服务以输入代理网关的客户端部分。

  Acting Gateway客户初始化:

  多于:

  代理网关客户端处理器的初始化逻辑:

  多于:

  代理网关实施可能面临问题:

  1个内存问题

  代理通常面对OOM。在本文中,实施代理网关时,当前在内存缓存中处理的http/https请求主体。理论上是内存使用的上限是真实时间处理的请求数*的平均大小*请求主体是HTTP/HTTPS请求的结果,直接使用外部内存堆,零副本和转发。

  2性能问题

  不应尽早考虑性能问题。本文使用Netty框架实施的代理网关。内部使用了大量外部内存。

  在代理网关的第一阶段之后,它面临着由长连接引起的性能问题。

  使用iDlestateHandler定期监视怠速TCP连接以迫使;解决这个问题。

  本文重点介绍了统一代理网关的核心,并详细介绍了与代理相关的技术原则。

  代理网关的管理部分可以在“服务器Handler”部分中维护,也可以将其保存在客户端手机部分中;

  注意:本文使用Netty的零副本;存储请求解析和流程;但这并没有意识到响应的处理;也就是说,响应直接通过网关。这在这方面避免了这一点。

  最后,在本文中实现了代理网关后,对代理资源的相应控制以及流过代理网关的请求,主要包括:

  作者|Xin跑

  来源|阿里技术公共帐户