城联优品电商的抢购
- 供应商
- 东莞市数云网络科技有限公司
- 认证
- 联系电话
- 18665158422
- dapp开发
- 18665158422
- 商业模式架构导师
- 杨小花
- 所在地
- 东莞市
- 更新时间
- 2024-06-24 07:07
城联优品电商的抢购城联优品电商的抢购城联优品电商的抢购城联优品电商的抢购城联优品电商的抢购城联优品电商的抢购城联优品电商的抢购城联优品电商的抢购城联优品电商的抢购城联优品电商的抢购城联优品电商的抢购城联优品电商的抢购城联优品电商的抢购城联优品电商的抢购城联优品电商的抢购城联优品电商的抢购城联优品电商的抢购城联优品电商的抢购城联优品电商的抢购城联优品电商的抢购城联优品电商的抢购城联优品电商的抢购城联优品电商的抢购城联优品电商的抢购城联优品电商的抢购城联优品电商的抢购城联优品电商的抢购城联优品电商的抢购
,对我们来说,都不是一个陌生的东西。然而,从技术的角度来说,这对于web系统是一个巨大的考验。当一个web系统,在一秒钟内收到数以万计甚至更多请求时,系统的优化和稳定至关重要。这次我们会关注和抢购的技术实现和优化,同时,从技术层面揭开,为什么我们总是不容易抢到火车票的原因?
一、大规模并发带来的挑战
在过去的工作中,我曾经面对过5w每秒的高并发功能,在这个过程中,整个web系统遇到了很多的问题和挑战。如果web系统不做针对性的优化,会轻而易举地陷入到异常状态。我们现在一起来讨论下,优化的思路和方法哈。
1. 请求接口的合理设计
一个或者抢购页面,通常分为2个部分,一个是静态的html等内容,另一个就是参与的web后台请求接口。
通常静态html等内容,是通过cdn的部署,一般压力不大,核心瓶颈实际上在后台请求接口上。这个后端接口,必须能够支持高并发请求,同时,非常重要的一点,必须尽可能“快”,在短的时间里返回用户的请求结果。为了实现尽可能快这一点,接口的后端存储使用内存级别的操作会更好一点。仍然直接面向mysql之类的存储是不合适的,如果有这种复杂业务的需求,都建议采用异步写入。
当然,也有一些和抢购采用“滞后反馈”,就是说当下不知道结果,一段时间后才可以从页面中看到用户是否成功。但是,这种属于“偷懒”行为,同时给用户的体验也不好,容易被用户认为是“暗箱操作”。
2. 高并发的挑战:一定要“快”
我们通常衡量一个web系统的吞吐率的指标是qps(query persecond,每秒处理请求数),解决每秒数万次的高并发场景,这个指标非常关键。举个例子,我们假设处理一个业务请求平均响应时间为100ms,同时,系统内有20台apache的web服务器,配置maxclients为500个(表示apache的大连接数目)。
那么,我们的web系统的理论峰值qps为(理想化的计算方式):
20*500/0.1 = 100000 (10万qps)
咦?我们的系统似乎很强大,1秒钟可以处理完10万的请求,5w/s的似乎是“纸老虎”哈。实际情况,当然没有这么理想。在高并发的实际场景下,机器都处于高负载的状态,在这个时候平均响应时间会被大大增加。
就web服务器而言,apache打开了越多的连接进程,cpu需要处理的上下文切换也越多,额外增加了cpu的消耗,然后就直接导致平均响应时间增加。因此上述的maxclient数目,要根据cpu、内存等硬件因素综合考虑,不是越多越好。可以通过apache自带的abench来测试一下,取一个合适的值。然后,我们选择内存操作级别的存储的redis,在高并发的状态下,存储的响应时间至关重要。网络带宽虽然也是一个因素,不过,这种请求数据包一般比较小,一般很少成为请求的瓶颈。
城联优品电商的抢购城联优品电商的抢购城联优品电商的抢购城联优品电商的抢购城联优品电商的抢购城联优品电商的抢购城联优品电商的抢购城联优品电商的抢购城联优品电商的抢购城联优品电商的抢购城联优品电商的抢购城联优品电商的抢购城联优品电商的抢购城联优品电商的抢购城联优品电商的抢购城联优品电商的抢购城联优品电商的抢购
展开全文