Google cloud platform 如何通过GKE over HTTPS提高Google负载平衡器的性能?

Google cloud platform 如何通过GKE over HTTPS提高Google负载平衡器的性能?,google-cloud-platform,google-kubernetes-engine,google-cloud-load-balancer,Google Cloud Platform,Google Kubernetes Engine,Google Cloud Load Balancer,我正在将Heroku迁移到Google云平台,目前我正在运行3 n1-highcpu-4节点GKE集群来测试设置和我的应用程序。集群是使用默认配置构建的(上的可抢占节点除外)。要创建Ingres、LB(带NEG平衡)和使用Google管理的SSL证书,我严格遵循以下指南: 在我开始进行负载测试之前,一切都完美无缺 我们的web应用程序正在从传感器收集数据,并通过HTTP(S)POST发送给它。我使用loader.io进行测试,这个集群通过HTTP每秒处理大约30k个请求,响应时间不到200m

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

在我开始进行负载测试之前,一切都完美无缺

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

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

Stackdriver GCLB指标显示前端延迟约为10ms,后端延迟约为8s。然而,我的应用程序的指标表明,请求通常需要20毫秒到700毫秒

ingres.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性能和减少请求延迟的建议,或者帮助我进一步调查,我将不胜感激。我现在陷入困境:(谢谢!

假设流量对后端进行负载平衡,您将不得不执行一项计算密集型任务,即SSL终止和卸载,其中涉及加密/解密和证书验证。此任务位于负载平衡器。此Google服务不在您的控制范围内。您将无法获得与HTTP相同的性能。您可以未指定测试数据包的大小。假设数据包为128字节,则几乎没有数据会占用大量cpu周期。请尝试使用实际负载大小进行测试(添加TCP数据包大小)这与您的真实世界相匹配并重新比较。谢谢@JohnHanley。平均JSON负载为1.2Kb。我使用真实数据进行了测试。当您将每秒1.2Kb x 30K数据包计算在内时,即为每秒288Mbits。对于HTTPS,每秒1.2Kb x 4K数据包为每秒38Mbits。这两个数字都不是很高。如果您实际上指的是每数据包1.2kbit(这就是Kb的意思),那么这些都是糟糕的性能数字。测试服务器在哪里?K8s群集在哪里?您可以在群集所在的同一区域内尝试不同的测试吗?在测试中删除Internet作为变量。Google HTTP的已发布数字负载均衡器是每秒100万个请求。您的数字清楚地显示了一个问题。我会打开一个问题跟踪项。幸运的话,一位工程师会帮助进行内部测试。假设流量是后端的负载平衡,您将被困在计算密集型任务、SSL终止和卸载中,其中涉及加密/解密和证书验证。此任务在负载平衡器上。此Google服务不在您的控制范围内。您将无法获得与HTTP相同的性能。您没有指定测试数据包的大小。假设数据包为128字节,则几乎没有数据需要花费大量cpu周期。请尝试使用实际负载大小进行测试(添加TCP数据包大小)这与您的真实世界相匹配并重新比较。谢谢@JohnHanley。平均JSON负载为1.2Kb。我使用真实数据进行了测试。当您将每秒1.2Kb x 30K数据包计算在内时,即为每秒288Mbits。对于HTTPS,每秒1.2Kb x 4K数据包为每秒38Mbits。这两个数字都不是很高。如果您实际上指的是每数据包1.2kbit(这就是Kb的意思),那么这些都是糟糕的性能数字。测试服务器在哪里?K8s群集在哪里?您可以在群集所在的同一区域内尝试不同的测试吗?在测试中删除Internet作为变量。Google HTTP的已发布数字负载平衡器是每秒一百万个请求。你的数字清楚地显示了一个问题。我会打开一个问题跟踪项目。幸运的话,一位工程师会帮助进行内部测试。