在Knative中使用MSE網(wǎng)關(guān)并實現(xiàn)自動彈性
在微服務(wù)架構(gòu)的業(yè)務(wù)場景下,推薦您使用MSE網(wǎng)關(guān)實現(xiàn)Knative服務(wù)的流量分發(fā)和路由。MSE網(wǎng)關(guān)是一款全托管免運維的網(wǎng)關(guān),支持實現(xiàn)基于請求的精準自動彈性,即精準地控制單個Pod的請求并發(fā)處理數(shù),能夠滿足大規(guī)模云原生分布式應(yīng)用的流量治理訴求。
前提條件
已在ACS集群中部署Knative。具體操作,請參見部署Knative。
已安裝MSE Ingress Controller組件,并為MSE Ingress Controller組件完成授權(quán),請參見為MSE Ingress Controller授權(quán)。
實現(xiàn)原理
在實際業(yè)務(wù)場景中,單個Pod處理請求的吞吐率有限,如果多個請求同時轉(zhuǎn)發(fā)到同一個Pod,會導致服務(wù)端過載異常。因此,您可能需要精準地控制單個Pod的請求并發(fā)處理數(shù)。例如,在AIGC場景下,由于單個請求會占用較多的GPU資源,您需要對每個Pod的并發(fā)處理請求數(shù)進行嚴格的限制。結(jié)合MSE網(wǎng)關(guān),Knative可以實現(xiàn)基于請求的精準自動彈性,以滿足大規(guī)模云原生分布式應(yīng)用的流量治理訴求。
如下圖所示,彈性插件MPA會從MSE網(wǎng)關(guān)獲取并發(fā)數(shù),并計算所需要的Pod數(shù)進行擴縮容,實現(xiàn)了基于實際請求負載的自動彈性。同時,MSE網(wǎng)關(guān)可以根據(jù)路由規(guī)則和條件,實現(xiàn)基于請求的精準轉(zhuǎn)發(fā),以滿足不同服務(wù)和版本的路由需求。
步驟一:部署MSE網(wǎng)關(guān)
登錄容器計算服務(wù)控制臺,在左側(cè)導航欄選擇集群。
在集群頁面,單擊目標集群ID,然后在左側(cè)導航欄,選擇
。在組件管理頁簽,單擊一鍵部署Knative,選擇MSE服務(wù)網(wǎng)關(guān),然后按照頁面指引完成Knative的部署。
步驟二:通過MSE網(wǎng)關(guān)訪問部署的服務(wù)
登錄容器計算服務(wù)控制臺,在左側(cè)導航欄選擇集群。
在集群頁面,單擊目標集群ID,然后在左側(cè)導航欄,選擇
。在Knative頁面的服務(wù)管理頁簽下,選擇命名空間為default,然后單擊使用模板創(chuàng)建,將以下YAML示例粘貼至模板,最后單擊創(chuàng)建。
創(chuàng)建一個名為
helloworld-go
的服務(wù)。重要請將下方代碼中的
{REGION-ID}
替換為您集群所在地域,以確保可以正確地訪問和使用鏡像。apiVersion: serving.knative.dev/v1 kind: Service metadata: name: helloworld-go spec: template: metadata: annotations: autoscaling.knative.dev/class: mpa.autoscaling.knative.dev # 表明使用MSE指標進行擴縮容,支持縮容到0。 autoscaling.knative.dev/max-scale: '20' # 擴容Pod數(shù)上限是20。 spec: containerConcurrency: 5 # 1個Pod能處理的最大并發(fā)數(shù)是5。 containers: - image: registry-vpc.{REGION-ID}.aliyuncs.com/knative-sample/helloworld-go:73fbdd56 # {REGION-ID}為對應(yīng)集群所在的地域,如cn-hangzhou。 env: - name: TARGET value: "Knative"
若目標服務(wù)的狀態(tài)列顯示成功,表明服務(wù)已部署成功。
在服務(wù)管理頁面的默認域名和訪問網(wǎng)關(guān)列,分別獲取
helloworld-go
服務(wù)的域名和網(wǎng)關(guān)地址。執(zhí)行以下命令,訪問
helloworld-go
服務(wù)。curl -H "host: helloworld-go.default.example.com" http://8.141.XX.XX # 網(wǎng)關(guān)IP和域名請以您的實際數(shù)據(jù)為準。
預期輸出:
Hello Knative!
步驟三:基于并發(fā)數(shù)實現(xiàn)自動彈性
安裝Hey壓測工具。
關(guān)于Hey壓測工具的詳細信息,請參見Hey。
執(zhí)行以下命令,對服務(wù)執(zhí)行壓測。
# 發(fā)送100000個請求,并發(fā)數(shù)為50,請求超時時間為180秒。 hey -n 100000 -c 50 -t 180 -host "helloworld-go.default.example.com" "http://8.141.XX.XX"
預期輸出:
Summary: Total: 86.0126 secs Slowest: 0.1672 secs Fastest: 0.0276 secs Average: 0.0337 secs Requests/sec: 1162.6199 Total data: 1500000 bytes Size/request: 15 bytes Response time histogram: 0.028 [1] | 0.042 [95291] |■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 0.056 [4573] |■■ 0.069 [64] | 0.083 [19] | 0.097 [2] | 0.111 [0] | 0.125 [0] | 0.139 [18] | 0.153 [23] | 0.167 [9] | Latency distribution: 10% in 0.0294 secs 25% in 0.0305 secs 50% in 0.0327 secs 75% in 0.0367 secs 90% in 0.0386 secs 95% in 0.0405 secs 99% in 0.0433 secs Details (average, fastest, slowest): DNS+dialup: 0.0000 secs, 0.0276 secs, 0.1672 secs DNS-lookup: 0.0000 secs, 0.0000 secs, 0.0000 secs req write: 0.0000 secs, 0.0000 secs, 0.0009 secs resp wait: 0.0336 secs, 0.0276 secs, 0.1671 secs resp read: 0.0000 secs, 0.0000 secs, 0.0009 secs Status code distribution: [200] 100000 responses
輸出結(jié)果表明,持續(xù)發(fā)送了100000個請求,請求成功率為100%。
執(zhí)行如下命令,實時觀察Pod的擴縮容情況。
說明這個命令會持續(xù)運行,直到您手動停止它。如果您只想觀察一段時間,可以按
Ctrl + C
組合鍵來終止命令的運行。kubectl get pods --watch
(可選)步驟三:查看服務(wù)監(jiān)控數(shù)據(jù)
Knative提供開箱即用的可觀測能力,在Knative頁面單擊監(jiān)控大盤頁簽,即可查看目標Knative服務(wù)的監(jiān)控數(shù)據(jù)情況。關(guān)于大盤信息的詳細介紹,請參見查看Knative服務(wù)監(jiān)控大盤。
相關(guān)文檔
您可以為Knative服務(wù)啟用自定義域名,請參見使用自定義域名。
您可以為Knative服務(wù)配置HTTPS證書訪問,請參見配置HTTPS證書訪問。
您可以在Knative中部署gRPC服務(wù),提升網(wǎng)絡(luò)效率,請參見在Knative中部署gRPC服務(wù)。
您可以配置探針(Probe),監(jiān)測Knative服務(wù)的健康狀態(tài)和可用性,請參見在Knative中配置端口探測。