1、需求背景
1.1 外患
微信公众号获取access_token存在每天一万次的限制,如果每个用户的每次请求先去请求获取access_token,再去获取用户的基本信息。在大并发之下,不用几分钟基本上业务就不可用了。
作为一名优秀的程序员,有问题我们更得迎难而上,思考方案去解决它。
1.2 方案
既然有次数限制,并且access_token得过期时间有2个小时之久,自然而然地想到了缓存大法,既满足了高并发读取又满足了不频繁请求微信公众号的接口。鉴于该数据的重要性,我们采用了将access_token存在生产redis。生产的中间件都通过内网访问,但是开发和测试环境都需要获取该access_token(否则刷新之后上次的access_token 5分钟后会过期)。于是我们在生产的redis开了公网地址,并且部署上SSL证书。
2、技术选型
为了最好地保护我们的生产redis, 我们在测试环境的ECS上搭建代理连接到生产redis。如此,我们在网络安全组配置仅仅该ECS的IP可以访问,减少不安全的风险。我们采用了 Stunnel 作为代理软件,是一款可以加密网络数据的TCP连接,并可工作在Unix和Windows平台上,它采用Client/Server模式,将Client端的网络数据采用SSL(Secure Sockets Layer)加密后,安全的传输到指定的Server端再进行解密还原,然后再发送到访问的服务器。详细参考 Stunnel官网,使用方式可以参考 华为云redis SSL实现公网访问。这样我们在非正式环境 连接到Stunnel暴露出来地端口即可。