On this page
流量鏡像
Traffic Shadowing
流量鏡像 (Traffic Shadowing) 作為一種進階的流量管理技術,主要用於測試和確保系統的穩定性和性能。
其核心概念為將線上生產環境的真實流量複製一份,並發送到另個獨立運作的平行測試環境中進行相關驗證,而不影響生產環境的運作。
由於測試副本中的服務會獨立處理這些流量,不會影響線上服務的正常運行 (需確保測試副本與生產環境兩者皆為獨立)。
主要實踐步驟包括:
- 流量捕捉:在生產環境的數據傳輸點(如 API 端點)捕捉出站和入站的流量。
- 流量複製:複製捕捉到的流量,並將其導向到一個或多個測試副本。
- 平行處理:測試副本接收和處理這些複製的流量,就如同處理真實流量一樣,但不會對外發送任何實際響應或執行生產級的操作。
- 分析與比較:分析測試副本的處理結果,並與生產系統的結果進行比較,以檢測差異和潛在的問題。
透過 Syntixi 的流量鏡像功能,使用者可以輕鬆地將生產環境的 HTTP 流量複製到測試環境中來進行相關的驗證和分析。
Syntixi 流量鏡像實現原理
單叢集流量複製
- 使用者設定流量鏡像規則後,系統會將 Ingress 原先送往
Function v1
的流量送到 Request Forwarder - Request Forwarder 會將正常流量送到
Function v1
- 同時複製一份透過 Traffic Gateway 送到另個叢集的
Function v2
進行平行測試 - Prometheus 會從 Request Forwarder 收集相關指標 Metrics 進行分析
多叢集流量複製
- 使用者設定流量鏡像規則後,系統會將 Ingress 原先送往
Function v1
的流量送到 Request Forwarder - Request Forwarder 會將正常流量送到
Function v1
- 同時複製一份送到
Function v2
進行平行測試 - Prometheus 會從 Request Forwarder 收集相關指標 Metrics 進行分析
流量鏡像設定
通過增加 mirror
欄位,使用者可以在 HttpTrigger
資源中設定流量鏡像規則。
apiVersion: trigger.syntixi.dev/v1
kind: HttpTrigger
metadata:
name: hello
namespace: demo
spec:
host: 'example.com'
ingressClassName: nginx
paths:
- function:
name: fnv1
port: 80
mirror: # enable traffic shadowing
to:
- function:
name: fnv2 # function name that will receive mirrored traffic
port: 80 # port number
# sampling rate. integer between 1~10000.
# 1 represent 0.01% (1/10000) traffic and 100 represents 1% (100/10000) of traffic.
percent: 10000
path: /foobar
pathType: Prefix
- HTTP Trigger 可以設定多個路徑,每個路徑可以設定不同的流量鏡像規則
- 採樣比例 (
spec.paths[*].mirror.to[*].percent
) 是一個介於 1~10000 之間的整數,用於控制複製流量的比例
啟用跨叢集流量鏡像功能
如果需要將流量複製到另個叢集,則需要在 Function 添加下面的 Labels
與 Annotations
以實現跨叢集流量傳送
apiVersion: core.syntixi.dev/v1
kind: Function
metadata:
annotations:
linkerd.io/inject: enabled
labels:
mirror.linkerd.io/exported: "true"
Was this page helpful?