微信支付商戶系統(tǒng)跨城冗災(zāi)升級指引
簡介
什么是冗災(zāi)?異地災(zāi)備的重要性?
當(dāng)光纜被挖斷、機(jī)房出現(xiàn)異常,或因不可抗拒原因(如地質(zhì)災(zāi)害)等造成正常路徑上業(yè)務(wù)不可用,通過備份路徑和措施來保證業(yè)務(wù)繼續(xù)正常進(jìn)行。
商戶實現(xiàn)跨城冗災(zāi)整體流程
公網(wǎng)商戶方案
商戶側(cè)要求 |
微信支付 |
|
---|---|---|
機(jī)房和運(yùn)營商 |
- |
商戶側(cè)DNS就近解析,微信支付提供六個接入點: |
冗災(zāi)規(guī)則 |
要求:雙活,發(fā)生故障能主備切換,恢復(fù)后能回切 1、主域名是主通道, 備用域名(跨城解析域名)可以采用1%以內(nèi)的流量做驗證 2、遇到主域名異常要能將主要通道自動切換到備用域名(跨城解析域名)訪問 3、當(dāng)主域名恢復(fù)正常后,主要通道要從備用域名(跨城解析域名)回切訪問 |
主域名:同運(yùn)營商就近解析; |
跨城冗災(zāi)方案說明:
正常使用主域名調(diào)用,備域名需有流量,保證業(yè)務(wù)能實時切換。當(dāng)域名出現(xiàn)請求超時、讀寫超時,自動換備域名重試。
交易主鏈路和交易備鏈路做好動態(tài)流量分配,保證遇到異常能夠自動切換。例如可以統(tǒng)計主備域名的連接耗時、丟包率、業(yè)務(wù)失敗率,出現(xiàn)異常情況(例如5秒鐘內(nèi)統(tǒng)計業(yè)務(wù)失敗率超過50%)可自動切換到最優(yōu)鏈路。
方案名稱 |
適用商戶 |
優(yōu)點 |
缺點 |
補(bǔ)充說明 |
方案一:統(tǒng)計主域名實際請求成功率,實現(xiàn)主備域名實時切換策略 |
交易量大 |
1、基于實際業(yè)務(wù)請求結(jié)果數(shù)據(jù),冗災(zāi)切換準(zhǔn)確率高 |
1、和業(yè)務(wù)耦合深,需要上報每次請求結(jié)果 |
增加重試邏輯:訪問一個域名失敗之后,可以換一個域名進(jìn)行重試,從而提升單次業(yè)務(wù)請求成功率 |
方案二:定時探測主域名連通性,實現(xiàn)主備域名實時切換策略 |
1、交易量較少 |
1、業(yè)務(wù)流程改動少,使用方式簡單 |
1、交易量大的商戶,探測周期過長的話,一旦出故障,影響筆數(shù)大 |
微信支付提供兩個自動切換方案供商戶自行選擇,需實現(xiàn)雙活、流量分配、域名實時切換。
方案一:統(tǒng)計主域名實際請求成功率,實現(xiàn)主備域名實時切換策略【備注說明】
主域名:api.mch.weixin.qq.com, api.weixin.qq.com
備用域名:api2.mch.weixin.qq.com, api2.weixin.qq.com
【方案流程圖】
【業(yè)務(wù)請求流程】
- 1、準(zhǔn)備好全局存儲空間(比如配置文件、內(nèi)存空間等)存放“域名信息”、“日志信息”并進(jìn)行初始化;
- 2、發(fā)起業(yè)務(wù)請求之前,從域名信息庫里面獲取域名;
- 3、使用當(dāng)前域名發(fā)起請求,成功,則上報成功結(jié)果并且流程結(jié)束;
- 4、使用當(dāng)前域名發(fā)起請求,失敗(連接超時、讀寫超時),則上報失敗結(jié)果并且獲取另一個域名進(jìn)行重試,流程結(jié)束;
- 5、因業(yè)務(wù)問題導(dǎo)致失敗,商戶側(cè)根據(jù)自身邏輯處理;
- 6、第3步和第4步中上報的請求結(jié)果存儲規(guī)則:保留主域名10分鐘內(nèi)最近100次請求,商戶也可根據(jù)實際情況自行調(diào)整。
【成功率統(tǒng)計流程】
- 1、定義主域名最小可用率,比如90%(具體數(shù)值商戶可根據(jù)實際業(yè)務(wù)情況進(jìn)行設(shè)定);
- 2、啟動定時探測器,取【業(yè)務(wù)請求流程】中的請求結(jié)果數(shù)據(jù),對其進(jìn)行匯總統(tǒng)計,計算成功率,每分鐘一次(計算頻率商戶可根據(jù)實際業(yè)務(wù)情況進(jìn)行設(shè)定);
- 3、當(dāng)主域名請求成功率大于等于最小可用率時更新當(dāng)前域名為主域名;
- 4、當(dāng)主域名請求成功率小于最小可用率時更新當(dāng)前域名為備用域名。
方案二:定時探測主域名連通性,實現(xiàn)主備域名實時切換策略
【備注說明】
主域名:api.mch.weixin.qq.com, api.weixin.qq.com
備用域名:api2.mch.weixin.qq.com, api2.weixin.qq.com
【方案流程圖】
【業(yè)務(wù)請求流程】
- 1、準(zhǔn)備好全局存儲空間(比如配置文件、內(nèi)存空間等)存放“域名信息”并進(jìn)行初始化;
- 2、發(fā)起交易前,從“域名信息”中獲取當(dāng)前域名;
- 3、使用當(dāng)前域名發(fā)起請求,成功,則流程結(jié)束;
- 4、使用當(dāng)前域名發(fā)起請求,失敗(連接超時、讀寫超時),獲取另一個域名進(jìn)行重試,流程結(jié)束;
- 5、因業(yè)務(wù)問題導(dǎo)致失敗,商戶側(cè)根據(jù)自身邏輯處理;
【定時探測流程】
- 1、啟動定時探測器,每分鐘一次進(jìn)行主域名探測(探測頻率商戶可根據(jù)業(yè)務(wù)實際情況自行設(shè)定);
- 2、連續(xù)探測主域名5次,失敗(連接超時)次數(shù)小于3次,更新域名信息為主域名,失敗(連接超時)次數(shù)大于等于3次,更新域名信息為備用域名;
- 3、探測方式可用curl、telnet等方式發(fā)起。
失敗重試策略
【備注說明】
主域名:api.mch.weixin.qq.com, api.weixin.qq.com
備用域名:api2.mch.weixin.qq.com, api2.weixin.qq.com
【方案流程圖】
【業(yè)務(wù)請求流程】
- 1、發(fā)起交易前,從“域名信息”中獲取當(dāng)前域名;
- 2、使用當(dāng)前域名發(fā)起請求,成功,則流程結(jié)束;
- 3、使用當(dāng)前域名發(fā)起請求,失敗(連接超時、讀寫超時),獲取另一個域名進(jìn)行重試,流程結(jié)束;
- 4、因業(yè)務(wù)問題導(dǎo)致失敗,商戶側(cè)根據(jù)自身邏輯處理;
實現(xiàn)雙活的流量分配策略
【備注說明】
主域名:api.mch.weixin.qq.com, api.weixin.qq.com
備用域名:api2.mch.weixin.qq.com, api2.weixin.qq.com
【方案流程圖】
【雙活域名流量分配策略】
- 1、發(fā)起交易前需配置主備切換比率,值范圍在0~99之間(具體數(shù)值商戶可根據(jù)實際業(yè)務(wù)情況進(jìn)行設(shè)定);
- 2、當(dāng)前域名是主域名的情況下,要進(jìn)行流量分配。流量分配規(guī)則:先獲取0~99的隨機(jī)數(shù),當(dāng)隨機(jī)數(shù)<主備切換比率則使用主域名發(fā)起交易,隨機(jī)數(shù)>=主備切換比率則使用備用域名發(fā)起交易;
- 3、當(dāng)前域名是備用域名的情況下,直接用備用域名發(fā)起請求。
專線商戶請參考:專線冗災(zāi)指引
驗證
1、已升級支持跨城冗災(zāi),商戶自行驗證
方案1:通過人工配置錯誤HOST模擬災(zāi)情
方案2:通過機(jī)房斷專線的方式模擬
2、微信支付側(cè)配合驗證
微信支付從7月份起,可配合對已完成升級的商戶進(jìn)行雙方驗證。請主動聯(lián)系我們發(fā)起驗證流程。
升級說明
1、微信支付側(cè)實現(xiàn)跨城冗災(zāi),為什么還需要商戶配合?
當(dāng)某個城市內(nèi)的機(jī)房都不可用,微信支付側(cè)會進(jìn)行災(zāi)備處理,通過另外一個城市提供支付服務(wù)。商戶側(cè)需要通過主備域名切換的方式,訪問微信支付正常服務(wù),減小故障帶來的影響。
2、涉及哪些API
微信支付API
公眾平臺后臺API和前臺JS資源
3、請商戶評估方案后將排期提交給微信側(cè),有疑問請到微信開放社區(qū)咨詢,發(fā)帖標(biāo)題請注明“【跨城冗災(zāi)】”
微信支付回調(diào)通知商戶
1. 商戶側(cè)與微信支付約定私有的回調(diào)域名,形如xxxx.wxpay.local
,xxxx替換為商戶名稱簡寫,具體有以下兩種方案可選:
隨機(jī)模式: xxxx.wxpay.local
為隨機(jī)回調(diào)域名,微信支付側(cè)會將該域名在配置文件中定義為全部回調(diào)IP,隨機(jī)選擇和重試;
主備模式:
s.xxxx.wxpay.local
順序模式,是將電信IP作為主回調(diào)IP的回調(diào)域名,此時聯(lián)通IP作為備用;
r.xxxx.wxpay.local
逆序模式,是將聯(lián)通IP作為主回調(diào)IP的回調(diào)域名,此時電信IP作為備用;
2. 商戶可以只用隨機(jī)模式的私有回調(diào)域名,如果想要更好控制專線選擇,可以在需要切換時使用主備模式,微信支付側(cè)回調(diào)程序根據(jù)商戶側(cè)提供的私有回調(diào)域名自動適配回調(diào)IP。
3. 走專線還是走公網(wǎng)? 商戶傳的私有回調(diào)地址就走專線回調(diào),其他回調(diào)地址類型走公網(wǎng)回調(diào)
專線冗災(zāi)演練
1. 雙方約定時間定期或者不定期演練專線冗災(zāi)自動切換
2. 商戶側(cè)排查所有專線策略是否都通
3. 微信支付側(cè)排查專線回調(diào)策略是否都通
4. 商戶側(cè)通過調(diào)整防火墻策略等方式斷開其中一條專線,驗證觀察業(yè)務(wù)是否能自動切換至另一條線路,且切換過程中業(yè)務(wù)無損失
5. 恢復(fù)后再斷開驗證另一條專線
6. 如果商戶側(cè)能實現(xiàn)兩條專線都不通自動走公網(wǎng)調(diào)用的話,可以再驗證兩條專線都斷開的情況下,是否如預(yù)期走公網(wǎng)調(diào)用和走公網(wǎng)回調(diào)
7. 如遇故障影響業(yè)務(wù),請優(yōu)先回退,之后再排查原因。
Q&A
見社區(qū)Q&A,有疑問請通過社區(qū)跨城冗災(zāi)專欄咨詢。