看了很多高并发的文章和秒杀文章,我个人观点就是两个问题:
1、解决并发压力问题,这是系统性问题,涉及架构,布局,网络等综合性很强
2、解决公平竞争,不超卖问题,这是技术性问题,需要熟悉数并发编程,数据库,缓存等技术问题
如果纯解决高并发 那就是 为了化解压力,让服务器正确,准确运行, 服务器负载, java多线程 和 分布式事务锁 就可以了,这样一秒钟有百万访问量 通过这方案 也能化解 ,使请求有序的执行,
疑问:
如果高并发 ,是对同一资源 瞬间高并发查询和更新,那问题来了,上面的架构能化解 服务压力,那排队 也得排很久(用锁机制),就达不到 秒杀感觉,个人觉得秒杀的 概念 应该是从 应用层顺序截取前 指定数量的请求,到数据库或者缓存 完成秒杀,比如 库存就100个,实现秒杀,就通过截取 前100个请求 到数据库完成秒杀,后请求的 就无效了,返回 “速度过慢” 的提示 .
如果一亿个库存,那取前一亿个请求 这过程必须 在应用端 完成 请求截取,同时后台 需要将库存分散,用多服务器,多线程完成 库存更新,否则,即使数据,逻辑,和压力都没问题,那排队 也得排很久,就像 一亿个人 排队到一个家店了 买东西 ,
一亿个人抢 同一种资源,要么用锁机制排队(算不上秒杀),要么 用多线程真实的抢,可这种抢 怎么管理和监控资源正确 ,在多线程有个原子操作,可以实现,但我还是理解不了这逻辑,如何用 人抢资源来说清楚,请大神指导