Медлительность прокси-сервера zuul - RibbonLoadBalancingHttpClient

Во-первых, у меня есть только базовые знания в java. У меня есть несколько микросервисов, и в настоящее время я использую zuul/eureka для проксирования сервисов.

Заметил, что при вызове микросервиса напрямую пропускная способность в 3 раза выше, чем при вызове через zuul. Поэтому мне интересно, неверна ли моя конфигурация zuul.

аб выход:

Прямой вызов микросервиса:

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

Звонок через зуул:

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 занимает много ресурсов процессора по сравнению с самим микросервисом. Так что взял дамп потока. И я подозреваю, что RibbonLoadBalancingHttpClient, похоже, продолжает создавать экземпляры.


Дамп темы: https://1drv.ms/t/s!Atq1lsqOLA98mHjh0lSJHPJj5J_I


person Raman Sachdev    schedule 03.12.2016    source источник


Ответы (1)


Указанные вами свойства zuul.host.* предназначены только для маршрутов zuul с прямым указанием «url» и не применяются к маршрутам serviceIds, полученным из Eureka. см. здесь. Вы можете увеличить общее количество HTTP-соединений на уровне ленты и соединений на хост и повторно запустить тест. Вот пример конфига -

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

В моих тестах с Zuul я помню, что время максимального ответа для некоторых запросов было намного выше, чем для прямых запросов с обходом zuul, но 95-й и 99-й процентили всегда были сопоставимы с разницей примерно в ~ 200 мс с прямыми запросами. на целевой сервер.

person Satya    schedule 22.03.2018