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

标签 redis express-gateway

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

对于某些端点,我需要基本身份验证,因此我需要设置持久性。

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

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

结果汇总

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

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

    我不需要出色的性能,但对我来说,基本Auth / Redis实现存在问题。

    这是预期的吗?我需要一个庞大的Redis数据库吗?
    如何解决此问题?

    结果详情

    共享

    HTTP基准测试通过HEY完成。

    Express-Gateway docker 镜像: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
    

    高速网关资源:
    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
    

    最佳答案

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

    我在云上创建了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网络配置中正在发生某些事情。

    关于redis - Express-Gateway-基本身份验证/Redis性能问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58977214/

    相关文章:

    docker - 当我使用docker-compose运行时,Express网关始终返回Bad Gateway

    user-management - 在快速网关中创建用户

    jwt - Express Gateway JWT 问题

    python - Redis 服务器间歇性响应 Python 客户端

    laravel - docker : Worker keep exiting and respawn and 99% CPU

    redis - 如何将 Bytes/Slice(UInt8) 作为字符串存储在 Crystal 中?

    caching - 配置 Redis 以始终如一地首先驱逐旧数据

    java - 如何在运行时编辑 application.properties(供下次使用)