我将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进行测试,该集群每秒处理大约3万个请求,并且通过HTTP的响应时间不到200毫秒。但是,当我切换到HTTPS并重复测试时,性能急剧下降到不到4k RPS,响应时间为1.7s-4s。
我尝试运行更多的Pod,添加新节点;从loader.io向LB发送更多请求;配置保持活动/空闲超时;进行了一些内核调整,但没有一个能够克服4k RPS障碍。甚至用nginx容器替换该应用程序并测试其静态欢迎页面也具有相同的结果。
Stackdriver GCLB指标显示了大约10ms的前端延迟和8s的后端延迟。但是,我的应用程序中的指标表明,请求通常需要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性能和减少请求延迟或帮助我进行进一步调查的任何建议,我将不胜感激。我现在被困住了:(谢谢!