5

首先,我只有java的基本知识。我有一些微服务,目前使用 zuul/eureka 来代理这些服务。

注意到直接调用微服务时,吞吐量比通过zuul调用时快3倍。所以我想知道我的zuul配置是否错误。

ab 输出:

直接调用微服务:

Concurrency Level:      10
Time taken for tests:   5.938 seconds
Complete requests:      10000
Failed requests:        0
Total transferred:      37750000 bytes
HTML transferred:       36190000 bytes
Requests per second:    1684.20 [#/sec] (mean)
Time per request:       5.938 [ms] (mean)
Time per request:       0.594 [ms] (mean, across all concurrent requests)
Transfer rate:          6208.84 [Kbytes/sec] received

通过zuul调用:

Concurrency Level:      10
Time taken for tests:   15.049 seconds
Complete requests:      10000
Failed requests:        0
Total transferred:      37990000 bytes
HTML transferred:       36190000 bytes
Requests per second:    664.52 [#/sec] (mean)
Time per request:       15.049 [ms] (mean)
Time per request:       1.505 [ms] (mean, across all concurrent 

祖尔配置:

server:
  port: 7001

zuul:
  #Services will be mapped under the /api URI
  prefix: /api
  sslHostnameValidationEnabled: false
  host:
    maxTotalConnections: 800
    maxPerRouteConnections: 200

endpoints:
  restart:
    enabled: true
  shutdown:
    enabled: true
  health:
    sensitive: false

eureka:
  instance:
      hostname: localhost
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/

ribbon:
   eureka:
     enabled: true

spring:
  application:
    name: zuul-server
    id: zuul-server

注意到与微服务本身相比,zuul 占用了大量的 CPU。所以采取了线程转储。我的怀疑是 RibbonLoadBalancingHttpClient 似乎一直在实例化。


线程转储:https ://1drv.ms/t/s!Atq1lsqOLA98mHjh0lSJHPJj5J_I

4

1 回答 1

0

您指定的 zuul.host.* 属性仅适用于直接指定“url”的 zuul 路由,不适用于从 Eureka 获取的 serviceIds 路由。见这里。您可能希望增加功能区级别的 HTTP 连接总数和每台主机的连接数,然后重新运行测试。这是一个示例配置 -

ribbon:
  ReadTimeout: 30000
  ConnectTimeout: 1000
  MaxTotalHttpConnections: 1600
  MaxConnectionsPerHost: 800

在我对 Zuul 的测试中,我确实记得看到一些请求的最大响应时间远高于 zuul 绕过的直接到目标请求,但第 95 和第 99 个百分位数始终与直接请求的大约 200 毫秒差异相当到目标服务器。

于 2018-03-22T13:52:55.473 回答