从地铁高峰期运营策略到高并发网站解决方案
随着互联网的发展,越来越多的网站会遇到高并发问题,解决方法很复杂,对于新手程序员来说,是个很棘手的事情,而且也没有环境实验(一般公司的负责人不敢给这样的机会)。今天在早高峰坐地铁时,发现地铁的面临高并发(单位时间内涌进来很多乘客,又称为高峰期)措施跟网站的处理方案很类似。下面就把地铁和网站的高并发做个形象的对比,看看其有哪些相似的地方:
1、队列
地铁站处理方式是:排队进站还必须沿着回形围栏绕上很多圈才能进站。
网站处理方式:抢小米手机、抢火车票、高峰期时打滴滴,都是差不多的道理。总是,先来后到嘛,谁先来谁有机会.
2、分时分批
地铁站处理方式:跟排队配合使用,预估这一班地铁能上去多少个人,就放行多少个,放行的再多,也上不完。
网站处理方式:同样,如果能处理过来1万个请求,那么就放行1万个访问到队列中
3、缓存
地铁处理方式:对于老弱病残孕以及十分着急的乘客,直接走快速通道,不必要走复杂的流程。一方面是人文关怀,另一方面,他们可能走的也比较慢。
网站处理方式:对于不需要实时反馈真实数据的访问,可以直接通过缓存来返回。如果可以不用CPU来计算,就不用CPU来计算;能不读取/写入数据库,就不写入数据库。
这条比喻可能不是十分的恰当,但道理差不多
4、服务降级
地铁处理方式:电梯设备停止运行,这样不至于让人群过快的进入到站台上,而且也降低电梯故障率,因为高峰时,电梯肯定是超负荷运载,一旦停止,可能会发生严重事故。
京东、天猫在大型的促销活动时(如双11、618),都会把实效性不强的服务关闭,比如说评论、反馈、修改头像、修改用户名、退款等功能关闭,减少对系统资源的占用。
5、负载均衡
地铁处理方式:如果压力还是大,可以把用户引导向地面交通工具,起到一部分分流的作用
网站处理方式:尽可能的让访问平均分不到不同的服务器上,这样可以使每台服务的压力平均,不至于把某几台服务器压垮了。
其实说了这么多,重要的是核心资源总是供应不足且价格昂贵,要省着点儿用。网站中核心资源是数据库和CPU,地铁的核心资源是铁轨,你可以花钱买列车,但是修一条铁轨可就没那么容易了。尽可能不要让人群/访问一下子涌到核心资源上,否则可能会发生停运、崩溃等事件。