[Booking System] 高并发的顺序问题

对于订票系统和秒杀系统

比如同一台服务器在短时间内有大量请求 很有可能在同一时间(比如 unix timestamp 1616217320
) 有两个request一起进来(比如一台server配两个网卡) 请问服务器是如何决定先serve哪个request? 比如谁能获得座位

这个问题牵涉到 web server 是如何接受 request 的。参考 Ngnix 的做法,有一个 acceptor thread,所有的 request 先都会到 acceptor thread,并被放到一个 Queue 里,再由 worker thread 去按顺序去取。
两个 request 同时间进来,acceptor thread 也只能一个一个处理,因为它只是一个线程。

NGINX网络IO模型应该是epoll的做法, 然后acceptor thread对file descriptor做的Round-robin. 所以基本可以感觉应该是随机的.

不知道我这个理解对不对.

我对你说的这个 Round-robin 不确定,不知道你说的是不是 Load balancing strategy. 我们在这里只讨论 Nginx receive request - 它在接收 TCP port 上的信息的时候一定是有先后的,即使在同一个毫秒。

因为NGINX网络IO模型是epoll, 所以epoll_wait的实现就决定了request顺序.

这个https://stackoverflow.com/questions/50400917/epoll-order-of-events-from-epoll-wait.