Express-Gateway-基本身份验证/ Redis性能问题

时间:2019-11-21 14:26:21

标签: redis express-gateway

我们开始使用express-gateway作为具有一些重写和jwt验证的简单代理(jwt来自Auth0)。没问题。

对于某些端点,我需要basic-auth,因此需要设置持久性。

我们使用Kubernetes在相同的云提供商上运行我们的应用程序和托管数据库。

我注意到使用basic-auth的端点响应时间长。 我开始运行一些基本基准。这是结果。

结果摘要

  1. 直接调用我的应用
    • 284个请求/秒
  2. Express Gateway-仅代理
    • 每秒285个请求
  3. Express Gateway-代理+日志
    • 每秒270个请求
  4. Express Gateway(托管Redis)-代理+日志+基本身份验证
    • 每秒7个请求
  5. Express Gateway(嵌入式Redis)-代理+日志+基本身份验证
    • 每秒7个请求

首先,我管理的Redis性能很差(它应该在同一个数据中心中具有kubernetes集群),但是嵌入式Redis具有相同的性能。

我不需要出色的性能,但是它向我表明,基本Auth / Redis实现存在问题。

这是预期的吗?我需要一个庞大的Redis数据库吗? 我该怎么做才能解决此问题?

结果详细信息

共享

HTTP基准测试是通过HEY完成的。

Express-Gateway码头工人镜像:express-gateway:1.16.x

Express-Gateway gateway.config.yml(已编辑):

http:
  port: ${HTTP_PORT:-8080}
admin:
  port: ${ADMIN_PORT:-9876}
  host: ${ADMIN_HOSTNAME:-localhost}
apiEndpoints:
  app-api:
    - host: ${APP_HOST}
      paths:
        - '/some/path'
      methods: ["POST"]
      scopes: ["scope:write", "scope:read"]
serviceEndpoints:
  app-api:
    url: ${SERVICE_HOST_APP}
policies:
  - log
  - proxy
  - basic-auth
pipelines:
  app-api:
    apiEndpoints:
      - app-api
    policies:
      - log: 
        - action:
          message: "${req.method} ${req.originalUrl}"
      - basic-auth:
      - proxy:
        - action:
            changeOrigin: false
            serviceEndpoint: app-api

Express-Gateway资源:

resources:
  requests:
    memory: "512M"
    cpu: "500m"
  limits:
    memory: "1024M"
    cpu: "1000m"

应用程序资源:

resources:
  requests:
    memory: "512M"
    cpu: "500m"
  limits:
    memory: "1024M"
    cpu: "1000m"

1。直接调用我的应用

命令:

./hey_linux_amd64 -n 10000 -m POST -T "application/json" -d <body> <app url>

结果:

Summary:
  Total:    35.2033 secs
  Slowest:  0.6221 secs
  Fastest:  0.0335 secs
  Average:  0.1685 secs
  Requests/sec: 284.0639


Response time histogram:
  0.034 [1] |
  0.092 [2689]  |■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
  0.151 [1830]  |■■■■■■■■■■■■■■■■■■■■■■■■■■■
  0.210 [1781]  |■■■■■■■■■■■■■■■■■■■■■■■■■■
  0.269 [2197]  |■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
  0.328 [1271]  |■■■■■■■■■■■■■■■■■■■
  0.387 [130]   |■■
  0.446 [31]    |
  0.504 [37]    |■
  0.563 [22]    |
  0.622 [11]    |


Latency distribution:
  10% in 0.0435 secs
  25% in 0.0852 secs
  50% in 0.1643 secs
  75% in 0.2434 secs
  90% in 0.2834 secs
  95% in 0.3056 secs
  99% in 0.3944 secs

Details (average, fastest, slowest):
  DNS+dialup:   0.0007 secs, 0.0335 secs, 0.6221 secs
  DNS-lookup:   0.0001 secs, 0.0000 secs, 0.0316 secs
  req write:    0.0000 secs, 0.0000 secs, 0.0083 secs
  resp wait:    0.1676 secs, 0.0334 secs, 0.6217 secs
  resp read:    0.0001 secs, 0.0000 secs, 0.0027 secs

Status code distribution:
  [200] 10000 responses

资源使用情况:

> kubectl top pods
NAME                                       CPU(cores)   MEMORY(bytes)   
app-6fb8b4787d-9qpf2                       920m         254Mi

2。 Express Gateway-仅代理

命令:

./hey_linux_amd64 -m POST -T "application/json" -d <body> <express-gateway url>

结果:

Summary:
  Total:    35.0445 secs
  Slowest:  0.7521 secs
  Fastest:  0.0349 secs
  Average:  0.1672 secs
  Requests/sec: 285.3516


Response time histogram:
  0.035 [1] |
  0.107 [3145]  |■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
  0.178 [2298]  |■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
  0.250 [2286]  |■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
  0.322 [2046]  |■■■■■■■■■■■■■■■■■■■■■■■■■■
  0.394 [153]   |■■
  0.465 [32]    |
  0.537 [25]    |
  0.609 [9] |
  0.680 [4] |
  0.752 [1] |


Latency distribution:
  10% in 0.0450 secs
  25% in 0.0865 secs
  50% in 0.1628 secs
  75% in 0.2436 secs
  90% in 0.2796 secs
  95% in 0.2989 secs
  99% in 0.3538 secs

Details (average, fastest, slowest):
  DNS+dialup:   0.0009 secs, 0.0349 secs, 0.7521 secs
  DNS-lookup:   0.0000 secs, 0.0000 secs, 0.0074 secs
  req write:    0.0000 secs, 0.0000 secs, 0.0042 secs
  resp wait:    0.1662 secs, 0.0348 secs, 0.7520 secs
  resp read:    0.0001 secs, 0.0000 secs, 0.0028 secs

Status code distribution:
  [200] 10000 responses

资源使用情况:

> kubectl top pods
NAME                                       CPU(cores)   MEMORY(bytes)   
express-gateway-56699967d8-hnvzw           320m         50Mi
app-6fb8b4787d-9qpf2                       743m         252Mi

3。 Express Gateway-代理+日志

命令:

./hey_linux_amd64 -m POST -T "application/json" -d <body> <express-gateway url>

结果:

Summary:
  Total:    36.9277 secs
  Slowest:  0.6278 secs
  Fastest:  0.0356 secs
  Average:  0.1796 secs
  Requests/sec: 270.7991


Response time histogram:
  0.036 [1] |
  0.095 [1595]  |■■■■■■■■■■■■■■■■■■■■■■■■
  0.154 [2616]  |■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
  0.213 [2604]  |■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
  0.272 [1756]  |■■■■■■■■■■■■■■■■■■■■■■■■■■■
  0.332 [996]   |■■■■■■■■■■■■■■■
  0.391 [301]   |■■■■■
  0.450 [71]    |■
  0.509 [22]    |
  0.569 [32]    |
  0.628 [6] |


Latency distribution:
  10% in 0.0734 secs
  25% in 0.1195 secs
  50% in 0.1709 secs
  75% in 0.2316 secs
  90% in 0.2932 secs
  95% in 0.3262 secs
  99% in 0.4061 secs

Details (average, fastest, slowest):
  DNS+dialup:   0.0007 secs, 0.0356 secs, 0.6278 secs
  DNS-lookup:   0.0000 secs, 0.0000 secs, 0.0038 secs
  req write:    0.0000 secs, 0.0000 secs, 0.0053 secs
  resp wait:    0.1787 secs, 0.0355 secs, 0.6275 secs
  resp read:    0.0001 secs, 0.0000 secs, 0.0063 secs

Status code distribution:
  [200] 10000 responses

资源使用情况:

> kubectl top pods
NAME                                       CPU(cores)   MEMORY(bytes)   
express-gateway-56699967d8-hnvzw           760m         94Mi 
app-6fb8b4787d-9qpf2                       898m         253Mi

4。 Express Gateway(托管Redis)-代理+日志+基本身份验证

命令:

./hey_linux_amd64 -m POST -H "Authorization: Basic ..." -T "application/json" -d <body> <express-gateway url>

结果:

Summary:
  Total:    1386.7479 secs
  Slowest:  11.4025 secs
  Fastest:  0.2489 secs
  Average:  6.9121 secs
  Requests/sec: 7.2111


Response time histogram:
  0.249 [1] |
  1.364 [15]    |
  2.480 [77]    |■
  3.595 [148]   |■
  4.710 [236]   |■■
  5.826 [493]   |■■■■
  6.941 [2836]  |■■■■■■■■■■■■■■■■■■■■■
  8.056 [5292]  |■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
  9.172 [595]   |■■■■
  10.287 [231]  |■■
  11.403 [76]   |■


Latency distribution:
  10% in 5.8535 secs
  25% in 6.8129 secs
  50% in 7.0067 secs
  75% in 7.1767 secs
  90% in 7.8473 secs
  95% in 8.5065 secs
  99% in 10.0107 secs

Details (average, fastest, slowest):
  DNS+dialup:   0.0008 secs, 0.2489 secs, 11.4025 secs
  DNS-lookup:   0.0001 secs, 0.0000 secs, 0.0252 secs
  req write:    0.0000 secs, 0.0000 secs, 0.0072 secs
  resp wait:    6.9111 secs, 0.2488 secs, 11.4024 secs
  resp read:    0.0001 secs, 0.0000 secs, 0.0090 secs

Status code distribution:
  [200] 9990 responses
  [502] 10 responses

资源使用情况:

> kubectl top pods
NAME                                       CPU(cores)   MEMORY(bytes)   
express-gateway-56699967d8-hnvzw           966m         62Mi
app-6fb8b4787d-9qpf2                       20m          245Mi  

5。 Express Gateway(嵌入式Redis)-代理+日志+基本身份验证

命令:

./hey_linux_amd64 -m POST -H "Authorization: Basic ..." -T "application/json" -d <body> <express-gateway url>

结果:

Summary:
  Total:    1395.9956 secs
  Slowest:  11.2510 secs
  Fastest:  0.2258 secs
  Average:  6.9731 secs
  Requests/sec: 7.1633


Response time histogram:
  0.226 [1] |
  1.328 [3] |
  2.431 [13]    |
  3.533 [3] |
  4.636 [12]    |
  5.738 [145]   |■
  6.841 [2597]  |■■■■■■■■■■■■■■■
  7.943 [6804]  |■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
  9.046 [375]   |■■
  10.148 [29]   |
  11.251 [18]   |


Latency distribution:
  10% in 6.3767 secs
  25% in 6.8170 secs
  50% in 6.9824 secs
  75% in 7.1205 secs
  90% in 7.5867 secs
  95% in 7.8832 secs
  99% in 8.5095 secs

Details (average, fastest, slowest):
  DNS+dialup:   0.0007 secs, 0.2258 secs, 11.2510 secs
  DNS-lookup:   0.0000 secs, 0.0000 secs, 0.0093 secs
  req write:    0.0000 secs, 0.0000 secs, 0.0053 secs
  resp wait:    6.9722 secs, 0.2255 secs, 11.2504 secs
  resp read:    0.0001 secs, 0.0000 secs, 0.0126 secs

Status code distribution:
  [200] 9993 responses
  [502] 7 responses

资源使用情况:

> kubectl top pods
NAME                                       CPU(cores)   MEMORY(bytes)  
express-gateway-56699967d8-hnvzw           651m         57Mi
app-6fb8b4787d-9qpf2                       2m           252Mi

1 个答案:

答案 0 :(得分:0)

我已经尽可能多地复制了您在此处发布的相同设置,但并没有获得与您所遇到的同样糟糕的效果。

我在云上创建了Azure Redis缓存并在计算机(MacBook Pro 2019)上本地运行EG,结果如下:

Concurrency Level:      50
Time taken for tests:   3.425 seconds
Complete requests:      500
Failed requests:        0
Non-2xx responses:      500
Total transferred:      99500 bytes
HTML transferred:       6000 bytes
Requests per second:    145.99 [#/sec] (mean)
Time per request:       342.478 [ms] (mean)
Time per request:       6.850 [ms] (mean, across all concurrent requests)
Transfer rate:          28.37 [Kbytes/sec] received

我一直在使用相同的网关配置。我想说您的Kubernetes网络配置中正在发生某些事情。