一個服務具備好的魯棒性,肯定要相容下游各種各樣的非預期返回,防止下游API改動影響服務穩定性。
如何驗證呢?肯定不能手動改下游程式碼實現指定的錯誤返回,操作成本太大了。去開發或基於開源二次開發一個代理服務成本有比較高。iptables
則是一個不錯的選擇。大概的實現方式可見下圖:
iptables用途及用到的命令
iptables可以實現路由轉發,且由於是linux網路層,效能極佳,一臺Linux服務可以滿足N多對被測服務和下游服務的故障驗證。
在測試時,可以透過手工、指令碼、或封裝一個執行命令服務,來對網路進行操作,實現向下遊請求的干擾(請求丟棄、請求拒絕)、隨機/指定錯誤(NAT到對應的外掛服務)。
NAT
# 查詢 iptables -t nat -L # 配置埠轉發,將本機的埠轉發到其他機器上 # 例:透過 192.168.1.10 的 9996 埠轉發到 192.168.1.10 的 9650 埠 # 先設定允許ip_forward sysctl -w net.ipv4.ip_forward=1 # 配置DNAT iptables -t nat -A PREROUTING -p tcp -m tcp --dport 9996 -j DNAT --to-destination 192.168.1.10:9650 # 配置SNAT iptables -t nat -A POSTROUTING -p tcp -m tcp -d 192.168.1.10/32 --dport 9650 -j SNAT --to-source 192.168.1.10 # 刪除則是將 -A 修改爲 -D 即可,或獲取到對應的規則num,使用 iptables -t nat -D <num>
DROP / REJECT
# 查詢 iptables -L # 請求丟棄 iptables -A OUTPUT -p tcp -d 192.168.1.10 --dport 9650 -j DROP # 請求拒絕 iptables -A OUTPUT -p tcp -d 192.168.1.10 --dport 9650 -j REJECT # 刪除則是將 -A 修改爲 -D 即可,或獲取到對應的規則num,使用 iptables -D <num>
外掛服務
該服務可以用flask實現一個輕量級的HTTP服務,設定好啟動引數,動態啟停即可。
當設定下游響應錯誤、指定錯誤返回、或隨機修改真實返回內容時,啟動該服務指令碼,NAT到該服務上。由這個外掛服務實現對應的各種各樣的錯誤。