“12306”是如何支撑百万QPS的?(nginx负载均衡与SLB怎么搭建)

“12306”是如何支撑百万QPS的?

我想从两个方面回答这个问题:

1、缓存的使用。大部分通过12306买票的人都有这样的经历,明明显示有票,但是下单的时候就提示余票不足,这就是缓存的副作用。不过使用缓存却也有很大的好处,极大降低了数据库的读取压力,可以支持更大的读吞吐量。对于买票这种场景也是读远高于写,特别是节假日的车票,很多人一直在刷,实际能下单的却很少。不过个人认为12306的缓存更新机制应该还有提升空间,目前的缓存更新还是有点慢。

2、队列的使用。购买节假日车票的时候也会经常遇到排队的情况,最终有可能买不到票。12306将买票需求加入到队列,然后一个个的处理,先到先得,这样可以极大的降低数据库的并发写压力,而且没有破坏公平原则。

还有一些朋友提到12306使用了阿里云,阿里云因为本身拥有很多的云计算资源,可以按需购买,对于节假日的购票高峰,12306服务可以很快速的水平扩展,满足业务需要,这也是其能够支撑百万并发的一个很重要因素。

首先是分布式架构,全网CDN加速技术,数据库应该是oracle或者DB2的,数据库应该是订单数据库,用户数据库,车辆运行线路库,车票库,代理商窗口管理用户库,日志库,通过几个库的关联查询,并下单购票。

每个库都有备份。这样相当于几个数据库同时协作,小型系统一般就一个库,几个表,也能做到高并发。它这样的架构部署,既高效又节省费用。

最耗资源的一个是余票查询,一个是高峰订单写入,第二个比较容易满足,队列再加上横向拓展处理服务即可,余票查询很麻烦,涉及到订单,路线图等内容的关联查询,oracle rac可以满足横向拓展资源,但是结构设计和优化需要有写入和查询的平衡点,再有就是定期的归档业务库,保证业务库的数据量在可控的范围内

队列服务也比较重要,消息内容不能太重,还需要一定程度的持久化

个人简单谈一下百万QPS下的12306如何架构,算是抛砖引玉,下图是我画的一张网络拓扑图:

我们知道当国庆节、春节来临的时候,12306会在每天的早上8点、12点、16点等各个时间点放票,这时候在极短的时间内涌入大量的流量请求,可是说是中国互联网甚至世界互联网上最大的高并发请求量了。

那首先要保证的就是网络不能挂,大家都先不用考虑服务端具体业务怎么实现的,应该首先要考虑的是多大的网络带宽能够承受住这么大的请求量?

我们常用的方式就是一个域名解析到一个ip地址,这个ip有可能是SLB,或者我们自己装的nginx,然后通过slb再将请求均衡分发到我们的服务器上,这是最简单常见的负载均衡策略。

但是这样的单台机器负载均衡是不可能承受的住12306千百万级高并发的。所以必须在域名解析处做好DNS负载均衡,再搭建好SLB集群和Nginx集群,且是多个集群,不同的集群去处理不同的业务。大家可以看到图中网络层,第一步也是最重要的一步就是要把所有的流量均摊出来,避免单机器甚至单集群无法承受住网络流量的瞬时轰炸导致网站瘫痪。

车票查询是最核心的业务,也是请求量最大的业务,不仅仅自家网站的大量请求查询,还有一个第三方开发的抢票软件也在不断地请求12306的车票查询业务。

下面有别的答主回答说需要用缓存,这是必然的,但也在抱怨明明有票但是就是显示没票,或者显示有票下单时候就提示没票了。这不是说12306的缓存一致性有问题,或者说这块只保证高并发了,对一致性就肯定做不到强一致性了。

分布式系统中的CAP理论大家应该都知道,CAP理论只能同时满足CP和AP或者CA,其中分区容忍性不可抛弃,那就剩CP和AP了。所以无法做到高并发高可用的同时还得做到强一致性。

到此,以上就是小编对于slb负载均衡 nginx的问题就介绍到这了,希望这1点解答对大家有用。

分享文章:“12306”是如何支撑百万QPS的?(nginx负载均衡与SLB怎么搭建)
网站链接:http://www.shufengxianlan.com/qtweb/news35/414085.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联