如图A所示,峰值期间终端用户请求平均响应时间,从3秒左右压缩至40毫秒以内;如图B所示,峰值期间所有请求响应码200的比例从70%左右提升至100%;图C表示,峰值期间,后端CPU Idle从10%左右提高至97%左右。实测对比数据表明,API加速对降低平均响应时间、提升用户体验效果十分显著,在降低后端服务器负载方面效果更加明显,使用API加速的后端CPU Idle可保持在91%以上。 后续建议 数据库失衡和缓存Redis失衡问题已经解决,但除上述问题,还有很多环节可以改善: 1. 队列服务异步化请求 目前客户最终落地数据库请求直接请求到MySQL,未经队列缓冲,建议使用队列服务排队处理峰值请求,其好处在于能在大访问量时对请求进行调度,并可控制实际到达数据库的并发,从而有效保护数据库后端。 2. API防火墙屏蔽恶意Bot 用户日志中含有大量明显且规律的扫描软件痕迹,如sqlmap、fimap等,虽然尚未对业务造成较大影响,但却使服务端资源被占用。建议在负载均衡最前端对扫描行为予以屏蔽,以提高安全性,同时提升服务效率。除恶意Bot,抢单、刷单等行为也会对服务产生影响,建议使用API防护服务识别与拦截。 3. 产品层考虑服务降级设计 该客户在整体业务上,没有服务降级设计,产品功能优先级未做划分,导致重要的数据库、Cache等众多基础服务混杂。一旦“秒杀”导致数据库穿透等严重问题时,整体服务将不可用。这种情况应重新梳理业务单元,按照优先级切分基础服务,首屏、产品列表、购买、订单等信息优先级最高;其次是非重要功能,如评论、账单等;如果后端负载较大,必要时可直接舍弃次要功能,从而降低后端负载,保证服务稳定。 总结 解决类似“整点秒杀活动”的情景,是一个系统复杂的工程,就文中客户暴露出来的数据库负载不均匀、Cache缓存负载不均匀等问题,可通过采用数据库中间层和API加速等技术解决,最终可取得理想效果。 上述“秒杀”案例,只是API加速的一个典型应用场景,接下来我还会撰文对API加速问题进行更为系统的剖析。 (责任编辑:本港台直播) |