新一代Serverless平臺(tái) Knative的應(yīng)用實(shí)踐
 業(yè)務(wù)介紹
1. 單品API服務(wù)是當(dāng)當(dāng)網(wǎng)技術(shù)平臺(tái)中核心的基礎(chǔ)服務(wù)之一
2. 由一系列與商品相關(guān)的API服務(wù)構(gòu)成
3. 單品API完成大量后臺(tái)API的接口聚合并實(shí)現(xiàn)接口性能的加速
4. 單品API為所有相關(guān)上游服務(wù)提供高效可靠的底層服務(wù)支持。
技術(shù)現(xiàn)狀
1. 開(kāi)發(fā)語(yǔ)言構(gòu)成有PHP、JAVA。
2. 以K8S原生方式部署運(yùn)行。
運(yùn)行環(huán)境
• Knative: v0.8.0
• Istio: v1.3.0
• Kubernetes:v1.14.4
• Docker: v18.06.3
• Centos:v7.5
• Promethues v2.2.1
• Grafana v5.0.3
• Tekton Pipelines: v0.8.0 
• Server: 8cores /32G mem/500GB HD
用戶容器的構(gòu)建與編排
1. 編寫用戶容器相應(yīng)的dockerfile
用戶容器的構(gòu)建與編排 
1. 編寫用戶容器相應(yīng)的dockerfile
2. Tekton構(gòu)建代碼打包運(yùn)行時(shí)容器推送到私有鏡像倉(cāng)庫(kù)
用戶容器的構(gòu)建與編排
1. 編寫用戶容器相應(yīng)的dockerfile
2. Tekton構(gòu)建代碼打包運(yùn)行時(shí)容器推送到私有鏡像倉(cāng)庫(kù)
3. 編寫knative的service.yaml 配置文件
Blue/Green部署
… 
traffic: - tag: current
revisionName: productapi
-v1
percent: 100
- tag: candidate
revisionName: productapi
-v2
percent: 0
- tag: latest
latestRevision: true
percent: 0
性能測(cè)試
評(píng)估Knative平臺(tái)對(duì)應(yīng)用代碼的性能影響
請(qǐng)求總并發(fā):200
Knative環(huán)境每個(gè)POD并發(fā)數(shù):40
Knative環(huán)境啟動(dòng)POD數(shù):6個(gè)
K8s環(huán)境啟用POD數(shù):6個(gè)
 
問(wèn)題與后續(xù)改進(jìn)
性能問(wèn)題:
• Queue Proxy
1. 負(fù)責(zé)所有用戶容器流量的轉(zhuǎn)發(fā)
2. 向Autoscaler報(bào)告客戶端指標(biāo)
• 帶來(lái)的問(wèn)題:
調(diào)用鏈中增加了一層代理,在我們的測(cè)試場(chǎng)景中,QueueProxy帶來(lái)了27ms的延遲以及約120m的CPU
資源消耗。
• 未來(lái)可能的解決方案
直接使用Istio的sidecar(envoy)來(lái)替換Queue Proxy,但這樣有可能會(huì)帶來(lái)對(duì)service mesh層的耦合。
運(yùn)維工具
• 日志中心:EFK
• 監(jiān)控:Promethues & Grafana
• 服務(wù)網(wǎng)格可視化: Istio & Kiali,Jaeger(調(diào)用鏈跟蹤)
服務(wù)可視化工具
服務(wù)網(wǎng)格的可視化工具- Kiali
1. 服務(wù)拓?fù)鋱D
2. 健康檢查
3. 分布式跟蹤
4. 指標(biāo)度量收集
5. 配置校驗(yàn)
監(jiān)控工具
 
性能優(yōu)化(一)
降低冷啟動(dòng)延遲的解決方案
• 保留服務(wù)最小副本數(shù)避免冷啟延遲
autoscaling.knative.dev/minScale: “n” // n 為1或者對(duì)應(yīng)業(yè)務(wù)估算的最小副本數(shù)
• 微服務(wù)化優(yōu)化服務(wù)啟動(dòng)速度
A. 減小用戶容器鏡像的大小,方便快速分發(fā)
B. 減少用戶容器的啟動(dòng)時(shí)間
性能優(yōu)化(二)
對(duì)可預(yù)見(jiàn)的高并發(fā)場(chǎng)景的解決方案
為服務(wù)預(yù)設(shè)預(yù)期最小所需副本數(shù)
例如:autoscaling.knative.dev/minScale: “200”
為服務(wù)預(yù)設(shè)最大所需副本數(shù)避免資源過(guò)度分配
例如:autoscaling.knative.dev/maxScale: “500"
為服務(wù)的每個(gè)POD設(shè)置最大并發(fā)請(qǐng)求數(shù)上限保障POD的可用性
例如:autoscaling.knative.dev/target: “100”
后續(xù)發(fā)展與改進(jìn)
支持更多彈性伸縮指標(biāo)
• 當(dāng)前支持的metrics
HPA: CPU使用率,不支持縮容到0
KPA: 并發(fā)請(qǐng)求數(shù), 支持縮容到0
• 新版本新增Metrics:
KPA: RPS/QPS/OPS
結(jié)論
• Knative對(duì)于Serverless平臺(tái)的標(biāo)準(zhǔn)化意義重大。
• Knative當(dāng)前正逐步成熟但大規(guī)模應(yīng)用還需要進(jìn)一步完善。
• Knative的發(fā)展前景廣闊,有望成為未來(lái)的主流無(wú)服務(wù)架構(gòu)管理平臺(tái)。
 






















 
 
 




 
 
 
 