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