当前位置: 首页 > 知识库问答 >
问题:

Spring云网关:流澄清

王翰墨
2023-03-14

我正在使用SpringCloudGatewayHoxton。M1发布以实现API网关。我可以看到以下格式的日志-

[2019-11-13 18:33:09,432] [448877242] [reactor-http-epoll-5] [DEBUG] [r.n.r.PooledConnectionProvider] - [id: 0xfc0b1eb2, L:/x.x.x.x:42538 - R:xxxx4076.x.x.com/x.x.x.x:5001] Channel connected, now 1 active connections and 0 inactive connections
[2019-11-13 18:33:09,679] [448877489] [reactor-http-epoll-5] [DEBUG] [r.n.r.PooledConnectionProvider] - [id: 0xfc0b1eb2, L:/x.x.x.x:42538 - R:xxxx4076.x.x.com/x.x.x.x:5001] onStateChange(POST{uri=/gateway/api/public/process, connection=PooledConnection{channel=[id: 0xfc0b1eb2, L:/x.x.x.x:42538 - R:xxxxx4076.x.x.com/x.x.x.x:5001]}}, [request_sent])
[2019-11-13 18:33:09,880] [448877690] [reactor-http-epoll-5] [DEBUG] [r.n.r.PooledConnectionProvider] - [id: 0xfc0b1eb2, L:/x.x.x.x:42538 - R:xxxx4076.x.x.com/x.x.x.x:5001] onStateChange(POST{uri=/gateway/api/public/process, connection=PooledConnection{channel=[id: 0xfc0b1eb2, L:/x.x.x.x:42538 - R:x.x.x.com/x.x.x.x:5001]}}, [response_received])

我也可以在下面的访问日志中看到-

x.x.x.x - - [13/Nov/2019:18:33:09 +0800] "POST /x/x/x HTTP/1.1" 200 14895 5556 455 ms

从这看来-

  1. 下游耗时约200毫秒

没有配置全局筛选器。此外,路由仅使用重写路径和添加请求头筛选器。下面是路线。它还使用redis的速率限制功能。

      - id: xxxx
        uri: http://xxxxx.xxx.xxx.com:5001
        predicates:
        - Path=/x/x/x
        - Method=POST
        filters:
        - RewritePath=/x/x/x,/gateway/api/public/process
        - AddRequestHeader=xxxxx,yyyyy
        - AddRequestHeader=appid,zzzzz
        - SecureHeaders
        - name: RequestRateLimiter
          args:
            key-resolver: "#{@userRemoteAddressResolver}"
            redis-rate-limiter.replenishRate: 10
            redis-rate-limiter.burstCapacity: 20

当下游只需要200毫秒时,SpringCloudGateway需要的255毫秒看起来有点高。

我已经为网关应用程序提供了足够的堆内存,在gc分析中,我没有发现任何内存问题。

对如何优化网关性能有何建议?

共有1个答案

长孙阳州
2023-03-14

老实说,我也有同样的问题,因为你试图改善网关的可怕性能的开箱即用。我建议首先在pom或gradle文件中包含Blockhound代理依赖项。

这是我的gradle依赖项编译组:'io。项目Reactor。工具,名称:“blockhound”,版本:“1.0.2”。发布“”。然后在Spring Boot应用程序的主界面中,您可以调用Blockhound。安装()。这将监视网关中任何位置的阻塞代码。

接下来我要添加的是一个jvm选项-Dreactor。内蒂。ioWorkerCount=50。这将迫使netty使用超过默认数量的事件循环线程。空闲时间的其他选项也可以更改。但在我看来,这些改变是行不通的。我认为SpringGateway将大部分过滤器工作负载放在了事件循环线程上,这就是为什么perf现在和将来总是不好的原因。

 类似资料:
  • 我有一个带有一些endpoint的anexo API,比如: 如何将Spring Cloud Gateway与这些endpoint一起使用?

  • 我为所有传入请求创建了全局路由,并使用AbstracTerrorWebExceptionHandler。 我的application.yml 运行应用程序时的日志: 谢谢你的帮助。

  • 我使用的是堆栈下 SpringCloudGatewayHoxton发行版,Java1.8,Linux操作系统 我看到下面的异常在重启后消失,但在一段时间后再次出现。我没有为直接内存做任何显式设置。下面是使用的JVM参数- 有人能告诉我错误的原因吗?

  • 我还需要NGINX来服务静态内容,如JS等,并向后端反向代理请求,还是可以用Spring Cloud Gateway来完成?Spring docs有以下图像: 我没有发现关于如何将静态内容返回给客户端的描述,这是否意味着它被认为是糟糕的做法,我需要额外的反向代理步骤来增加它的延迟?如果没有,我可以在哪里找到更多关于如何使用Spring Cloud Gateway实现这一点的信息,尤其是如果我要使用

  • 当我使用spring cloud gateway集成spring cloud sleuth时,我发现性能比单独使用spring cloud gateway慢得多。是否有优化方案? 机器配置:6芯,16g Spring云网关:5331.9 tps Spring云网关Spring云侦探:4119.47 tps “Spring云网关”比“Spring云网关Spring云侦探”慢约1000-2000tps

  • 我一直在读关于spring cloud gateway在我的微服务架构中实现API网关的文章。我需要阻止某些URL我一直在使用一些内部操作。但是,我已经像在Zuul中一样在gateway中使用了IgnoredServices和IgnoredPatterns,但是在Spring cloud gateway链接中没有这样的东西。我的内部API以/internal/{something}开头。 同样,我