一个秒杀或者抢购页面,通常分为2个部分,一个是静态的HTML等内容,另一个就是参与秒杀的Web后台请求接口。 通常静态HTML等内容,是通过CDN的部署,一般压力不大,核心瓶颈实际上在后台请求接口上。这个后端接口,必须能够支持高并发请求,同时,非常重要的一点,必须尽可 能“快”,在最短的时间里返回用户的请求结果。为了实现尽可能快这一点,接口的后端存储使用内存级别的操作会更好一点。仍然直接面向MySQL之类的存储是不合适的,如果有这种复杂业务的需求,都建议采用异步写入。
通常衡量一个
Web
系统的吞吐率的指标是
QPS
(
Query Per Second
,每秒处理请求数),解决每秒数万次的高并发场景,这个指标非常关键。
高并发下的解决方案:
乐观锁思路
乐观锁,是相对于
“
悲观锁
”
采用更为宽松的加锁机制,大都是采用带版本号(
Version
)更新。实现就是,这个数据所有请求 都有资格去修改,但会获得一个该数据的版本号,只有版本号符合的才能更新成功,其他的返回抢购失败。这样的话,我们就不需要考虑队列的问题,不过,它会增大CPU
的计 算开销。但是,综合来说,这是一个比较好的解决方案。例如Redis
中的
watch
就是其中之一。通过这个实现,我们保证了数据的安全。