2020年真是多灾多难的一年
前几天公司上线的项目,突然之间,不能进行访问,而且是时灵时不灵的那种
经过排查,发现‘微信网页授权接口’大概率发生请求超时的情况,导致项目无法正常访问。并且最近一两天,社区里也有其他同学有请求超时的情况发生,所以写这篇文章。
我们服务器买的云服务器,第一直觉是云服务器是稳定可靠的,不会出问题的,然后发帖提问,社区star【橱窗旁的小辣椒】排查后发现是我们的云服务器网络不稳定导致的,建议我们用备灾域名,看能否项目正常访问,替换成备灾域名后,问题完美解决。
刚接触微信相关开发的时候,看过备灾域名的介绍,然后觉得项目一直很稳定(老子用不到这个备灾域名),直到自己项目出问题。。。
- 我们常用的微信相关api接口,有两大部分
一部分是公众号api相关接口用的通用域名api.weixin.qq.com,此域名所能替换的备灾域名有api2.weixin.qq.com、sh.api.weixin.qq.com、sz.api.weixin.qq.com、hk.api.weixin.qq.com。【微信官方文档·接口域名说明】
一部分是支付相关api接口用的主域名api.mch.weixin.qq.com,次域名所能替换的备灾域名有api2.mch.weixin.qq.com【微信官方文档·最佳安全实践】
- 解决方案
为了保证项目安全顺利进行,一般的项目,可以采用下面这样的解决方案
实现主备域名实时切换策略、请求失败后切换备用域名重新发起请求策略
- 定时探测主域名连通性,实现主备域名实时切换策略【备注说明】
主域名:api.mch.weixin.qq.com, api.weixin.qq.com
备用域名:api2.mch.weixin.qq.com, api2.weixin.qq.com
【方案流程图】
【业务请求流程】
- 1、准备好全局存储空间(比如配置文件、内存空间等)存放“域名信息”并进行初始化;
- 2、发起交易前,从“域名信息”中获取当前域名;
- 3、使用当前域名发起请求,成功,则流程结束;
- 4、使用当前域名发起请求,失败(连接超时、读写超时),获取另一个域名进行重试,流程结束;
- 5、因业务问题导致失败,商户侧根据自身逻辑处理;
【定时探测流程】
- 1、启动定时探测器,每分钟一次进行主域名探测(探测频率商户可根据业务实际情况自行设定);
- 2、连续探测主域名5次,失败(连接超时)次数小于3次,更新域名信息为主域名,失败(连接超时)次数大于等于3次,更新域名信息为备用域名;
- 3、探测方式可用curl、telnet等方式发起。
失败重试策略【备注说明】
主域名:api.mch.weixin.qq.com, api.weixin.qq.com
备用域名:api2.mch.weixin.qq.com, api2.weixin.qq.com
【方案流程图】
- 【业务请求流程】1、发起交易前,从“域名信息”中获取当前域名;
- 2、使用当前域名发起请求,成功,则流程结束;
- 3、使用当前域名发起请求,失败(连接超时、读写超时),获取另一个域名进行重试,流程结束;
- 4、因业务问题导致失败,商户侧根据自身逻辑处理;
- 网络排查指引