秒杀系统,即一个在多用户在极短时间内争夺有限资源的问题。
如何设计一个秒杀系统,秒杀系统主要的难点在于:
1、不能因为并发高,而导致实际被抢占资源数目超过实际数目。
2、尽量遵从先到先得的公平原则。
个人有这么几个思路:
1、将并发度降低,通过一定算法,只让具备一定特征的用户能抢到,如用户的uid取摸。
这样的好处是通过简单的策略控制使问题变简单了,但是违背了先到先得的公平原则。这样在参与度不高的情况下也极容易露出马脚,自己抢不到,但资源仍剩余。
2、将过程分成两步,一为每个用户请求标序号,二客户端隔一秒后请求后端,获取最早请求的用户即为获胜者。
为用户请求标序号可通过往数据库中插入记录的方式,自然就能分清先后。隔一秒客户端再发请求从数据库查找时,也能找到前排的记录。
这样保证了公平性,但客户端和服务器端增加的交互。
3、加锁