Alibaba Cloud Linux 3提供的共用記憶體通訊(Shared Memory Communication)是一種相容socket層、使用遠程記憶體直接存取(RDMA)技術的高效能核心網路通訊協定棧,能夠透明最佳化TCP應用網路通訊效能。然而,在原生ECS環境中使用SMC技術最佳化網路效能時,使用者需要謹慎維護SMC白名單以及容器網路命名空間中的配置,以防止SMC非預期降級到TCP。ASM為使用者提供了可控的網路環境(叢集內)SMC最佳化能力,能夠自動最佳化服務網格Pod間的流量,使用者無需關心具體的SMC配置。
前提條件
使用限制
節點使用支援配置eRDMA的ECS執行個體。詳細資料,請參見在企業級執行個體上使用eRDMA。
節點作業系統使用Alibaba Cloud Linux 3,詳情參見Alibaba Cloud Linux 3。
ASM執行個體版本為1.23及以上。關於如何升級執行個體,請參見升級ASM執行個體。
ACK叢集使用Terway網路外掛程式,詳情參見使用Terway網路外掛程式。
ACK叢集配置API Server公網訪問能力,詳情參見控制叢集API Server的公網訪問能力。
操作步驟
步驟一:節點環境初始化
SMC利用eRDMA網卡加速網路效能,在啟用之前需要對節點進行相應的初始化準備。
Alibaba Cloud Linux 3系統核心為5.10.134-17.3及以上,升級方式可參見更換核心版本。
為節點安裝 erdma-controller 組件,並開啟 SMC-R 透明加速,詳情參見使用eRDMA加速容器網路。
步驟二:部署測試應用
為測試使用的default命名空間啟用自動注入,具體請參見啟用自動注入。
使用以下內容,建立fortioserver.yaml檔案。
使用ACK叢集的KubeConfig,執行以下命令,部署測試應用。
kubectl apply -f fortioserver.yaml執行以下命令,查看測試應用的狀態。
kubectl get pods | grep fortio預期輸出:
NAME READY STATUS RESTARTS fortioclient-8569b98544-9qqbj 3/3 Running 0 fortioserver-7cd5c46c49-mwbtq 3/3 Running 0預期輸出表明兩個應用均正常啟動。
步驟三:在基礎環境運行測試,查看基準測試結果
fortio應用啟動後,會暴露8080連接埠監聽,訪問該連接埠將開啟fortio應用的控制台頁面。為了產生測試流量,可以將fortioclient的連接埠映射到當前所用機器,在當前所用機器上開啟fortio的控制台頁面。
使用ACK叢集的KubeConfig,執行以下命令,將fortio用戶端的Service監聽的8080連接埠映射到本地的8080連接埠。
kubectl port-forward service/fortioclient 8080:8080在瀏覽器中輸入
http://localhost:8080/fortio地址,訪問fortio用戶端控制台,並修改相關配置。
請按照下表修改頁面上的參數。
參數
樣本值
URL
http://fortioserver:8080/echo
QPS
100000
Duration
30s
Threads/Simultaneous connections
64
Payload
填寫以下字串(128 Byte):
xhsyL4ELNoUUbC3WEyvaz0qoHcNYUh0j2YHJTpltJueyXlSgf7xkGqc5RcSJBtqUENNjVHNnGXmoMyILWsrZL1O2uordH6nLE7fY6h5TfTJCZtff3Wib8YgzASha8T8g
配置完成後,在頁面下方,單擊Start開始測試,等待進度條結束,測試完畢。

測試回合完畢後,頁面將給出本次測試的結果。下圖僅供參考,測試結果請以實際環境為準。

頁面輸出的測試結果橫座標為請求的Latency,觀察直條圖在橫座標上的分布可以得出請求延遲的分布情況,紫色曲線為在不同回應時間範圍內完成的請求數量。縱座標為完成的請求數。同時,圖表頂部給出了P50/P75/P90/P99/P99.9的請求Latency資料。得到基礎環境資料後,需要為應用啟用SMC,準備進行SMC加速後的效能驗證。
步驟四:為ASM執行個體和工作負載啟用SMC加速
使用服務網格的KubeConfig編輯網格配置,添加"smcEnabled: true",以啟用SMC加速功能。
$ kubectl edit asmmeshconfig apiVersion: istio.alibabacloud.com/v1beta1 kind: ASMMeshConfig metadata: name: default spec: ambientConfiguration: redirectMode: "" waypoint: {} ztunnel: {} cniConfiguration: enabled: true repair: {} smcEnabled: true使用ACK叢集的KubeConfig,執行以下命令,修改fortioserver和fortioclient的Deployment,為Pod添加Annotation。
為網格執行個體啟用加速後,還需要進一步為工作負載啟用加速,通過為Pod添加Key為
smc.asm.alibabacloud.com/enabled,值設定為true的Annotation,可以為工作負載啟用SMC加速,您需要同時為需要最佳化的兩端工作負載均啟用加速。編輯fortioclient的Deployment定義。
$ kubectl edit deployment fortioclient apiVersion: apps/v1 kind: Deployment metadata: ...... name: fortioclient spec: ...... template: metadata: ...... annotations: smc.asm.alibabacloud.com/enabled: "true"編輯fortioserver的Deployment定義。
$ kubectl edit deployment fortioserver apiVersion: apps/v1 kind: Deployment metadata: ...... name: fortioserver spec: ...... template: metadata: ...... annotations: smc.asm.alibabacloud.com/enabled: "true"
步驟五:加速後環境運行測試,查看啟用最佳化後的測試結果
由於修改Deployment將使工作負載重啟,因此您需要參考步驟三重新進行fortioclient連接埠映射,再次發起測試,等待測試結束查看結果。

與加速前的結果對比,可以看到啟用ASM SMC加速後,延遲下降,QPS明顯提升。
FAQ
為什麼啟用SMC後訪問某些資料庫服務卡住,無法完成串連建立?
這是因為訪問資料庫服務大多經過負載平衡網元,而部分網元實現沒有嚴格遵守TCP option標準,錯誤識別SMC協議規範中的254類型TCP option,導致網路連接建立失敗,無法訪問服務。
您可以通過如下方式確認此問題:
在節點上安裝aliyun-smc-extensions工具包:
sudo yum install -y aliyun-smc-extensions使用aliyunsmc-check對目標URL進行通訊鏈路檢查:
aliyunsmc-check syn_check --url <url>aliyunsmc-check會檢查目標URL訪問路徑上的TCP option重放,衝突以及超長問題。輸出結果樣本如下:

若檢查探索服務訪問路徑上確實存在對TCP option的非標處理,建議在訪問此服務的POD中關閉SMC加速。