Hertz 是一个超大规模的企业级微服务 HTTP 框架,具有高易用性、易扩展、低时延等特点。
Hertz 默认使用自研的高性能网络库 Netpoll,在一些特殊场景中,相较于 go net,Hertz 在 QPS、时延上均具有一定优势。
在内部实践中,某些典型服务,如框架占比较高的服务、网关等服务,迁移 Hertz 后相比 Gin 框架,资源使用显著减少,CPU 使用率随流量大小降低 30%—60% 。
关于 Hertz 更多的信息可移步至 cloudwego/hertz
反向代理在计算机网络中是代理服务器的一种。
服务器根据客户端的请求,从其关系的一组或多组后端服务器(如 Web 服务器)上获取资源,然后再将这些资源返回给客户端,客户端只会得知反向代理的 IP 地址,而不知道在代理服务器后面的服务器集群的存在。
在 Hertz 中使用反向代理需要拉取社区提供的 reverseproxy 拓展。
我们通过 函数设置了反向代理的目标路径 。接下来注册路由的路径为反向代理目标路径的子路径 ,最后通过注册 映射反向代理服务 。这样我们通过 GET 方法访问 时就会访问到 中的内容。
当然,拓展不只是能够实现简单的反向代理,在 reverseproxy 拓展中提供了许多可以自定义的可选项。
SetDirector & SetClient
我们通过实现一个简单的服务注册发现来进实践使用 和 。
Server
这里使用了 hertz-contrib/registry 拓展中 server 端的示例代码,由于这并不是本文的主要内容所以不做展开,关于更多信息可以去到 registry 库中。
Client
Client 部分中我们在服务发现使用了反向代理。首先通过 将使用了服务发现中间件的客户端指定为我们的转发客户端,再使用 指定了我们的 protocol.Request ,并在新的 Request 中配置了服务发现的使用。
SetModifyResponse & SetErrorHandler
与 分别设置来自后端的响应以及到达后台错误的处理。 实则是在设置反向代理拓展中的 ,如果后端返回任意响应,不管状态码是什么,这个方法将会被调用。如果 方法返回一个错误, 方法将会使用错误做入参被调用。
SetModifyResponse
在这里通过 修改 进以改变响应的处理内容。
SetErrorHandler
我们通过 指定如何处理到达后台的错误,当有错误到达后台或有来自 的错误时就会运行指定的处理逻辑。
除了基本使用外,Hertz 反向代理还支持在中间件中使用。
在这段实例代码中,首先初始化了两个 Hertz 实例,接着使用 设置反向代理目标为 9997 端口,在最后对两个实例分别注册了两个路径相同的路由。
测试1
这段代码的主要部分为中间件使用部分,我们通过 使用中间件,在中间件逻辑中,当 逻辑成立时调用 使用反向代理,此时再通过实例 r 请求 时就会请求到反向代理目标 9997 端口中的内容。
以上就是本篇文章【Go HTTP 框架之 Hertz —— 通过 reverseproxy 进行反向代理实战】的全部内容了,欢迎阅览 ! 文章地址:http://dfvalve.xrbh.cn/news/7759.html 资讯 企业新闻 行情 企业黄页 同类资讯 首页 网站地图 返回首页 迅博思语资讯移动站 http://keant.xrbh.cn/ , 查看更多