如下场景:
一台机器上运行一个数据库server进程,同时有多个client发送读写请求。
问题一:
此时该server进程内部如何处理。 在同一时刻,只能处理一个请求。可能在下一个时刻切换到另一个请求?
或者更详细一点。server中有一个thread pool. 每次收到一个请求,就分配一个thread给该请求。待处理的thread保存在队列里。每个时间片会自动切换thread,挑一个来执行。是这样吗?
问题二:
考虑春运火车票抢购系统。在大量的访问情况下,也是按照thread pool进行分配,按thread正常处理的吗?
------解决思路----------------------
1:不管你什么服务器,在系统内部CPU需要切换线程,你线程池数量越大,他切换的越频繁,这里需要你预估一个峰值,对于多核来说,多线程是有优势的,如果请求过多,而队列太小,一般会有超时机制。底层上来讲 他的backlog会去排队,超过了那个值,会被拒绝,但由于你处理的线程过多,导致你整个系统切换变慢,他会导致你的业务逻辑变慢,造成单机雪崩现象,所以这个线程池设置是比较有讲究的。
2:在12306中,单台服务武器已经承受不起了,QPS太小,所以需要分布式部署服务器,对于分布式处理来说,又会涉及到多个系统通信,服务器负载均衡,智能CDN,系统运维监察,服务治理等,往往会设计到上百台服务器,对于12306 可能更多,他春运的相应量不亚于taobao11.11 ,具体可以看下淘宝的技术架构,这不是一个人所能做到的,当然大系统也是由各个小系统构成的,以前的一些同步策略要改成大量的异步通知,可能只有你订单是同步的,而多个系统异步,又会涉及到消息机制等。