首页 > 解决方案 > 如何使用 GKE over HTTPS 提高 Google 负载均衡器的性能?

问题描述

我正在将 Heroku 迁移到 Google Cloud Platform,目前我正在运行 3 个 n1-highcpu-4 节点 GKE 集群来测试设置和我的应用程序。集群是使用默认配置构建的(抢占式节点除外)。为了创建 Ingres、LB(使用 NEG 平衡)并使用 Google 管理的 SSL 证书,我严格遵循了以下指南:

https://cloud.google.com/kubernetes-engine/docs/concepts/ingress https://cloud.google.com/kubernetes-engine/docs/tutorials/http-balancer https://cloud.google.com/ kubernetes-engine/docs/how-to/container-native-load-balancing#create_service

在我开始负载测试之前,一切都可以完美地开箱即用。

我们的 Web 应用程序正在从传感器收集数据,通过 HTTP(S) POST 发送给它。我使用 loader.io 进行测试,这个集群每秒处理大约 30k 个请求,通过 HTTP 的响应时间不到 200 毫秒。然而,当我切换到 HTTPS 并重复测试时,性能急剧下降到不到 4k RPS,响应时间为 1.7s-4s。

我尝试运行更多 pod,添加新节点;从 loader.io 向 LB 发送更多请求;配置保持活动/空闲超时;一些内核调整,但没有一个有助于跨越 4k RPS 障碍。即使用 nginx 容器替换应用程序并测试其静态欢迎页面也有相同的结果。

Stackdriver GCLB 指标显示大约 10 毫秒的前端延迟和 8 秒的后端延迟。但是,我的应用程序的指标显示请求通常需要 20 毫秒到 700 毫秒之间。

ingress.yml

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: collector-non-prod
  annotations:
    kubernetes.io/ingress.global-static-ip-name: non-prod-cluster-ip
#    kubernetes.io/ingress.allow-http: "true"
    networking.gke.io/managed-certificates: "collector-dev,collector-staging"
spec:
  rules:
    - host: events-dev.xxx.dev
      http:
        paths:
          - backend:
              serviceName: collector-dev
              servicePort: 80
    - host: events-staging.xxx.dev
      http:
        paths:
          - backend:
              serviceName: collector-staging
              servicePort: 80

service.yml

apiVersion: v1
kind: Service
metadata:
  name: collector-dev
  labels:
    environment: dev
  annotations:
    cloud.google.com/neg: '{"ingress": true}'
    beta.cloud.google.com/backend-config: '{"ports": {"80":"backend-config-non-prod"}}'
spec:
  type: NodePort
  selector:
    app: collector
    environment: dev
  ports:
    - protocol: TCP
      port: 80
      targetPort: 8080

backend-config.yml就是这样:

apiVersion: cloud.google.com/v1beta1
kind: BackendConfig
metadata:
  name: backend-config-non-prod
spec:
  timeoutSec: 60
  connectionDraining:
    drainingTimeoutSec: 60

对于提高 HTTPS 性能和减少请求延迟或帮助我进一步调查的任何建议,我将不胜感激。我现在被困住了:(谢谢!

标签: google-cloud-platformgoogle-kubernetes-enginegoogle-cloud-load-balancer

解决方案


推荐阅读