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