12306咋抢不到票?还搞不瘫他?
12306咋抢不到票?还搞不瘫他?
学习了:http://blog.csdn.net/suifeng3051/article/details/52607544
https://my.oschina.net/xianggao/blog/524943
https://www.csdn.net/article/2015-02-10/2823900
https://www.csdn.net/article/2015-03-03/2824091
http://www.chinaz.com/web/2015/0508/404608_2.shtml
https://www.zhihu.com/question/27321479
12306是2011年底上线,2014年淘宝讨论将余票放到云上;75%的余票查询业务放到云上; 为什么是余票查询?访问量90%以上,不需要对整个网站业务架构改动; 实施过程?余票模块分离独立部署,云上部署, 云计算与堆硬件什么区别?硬件周期长、空闲多;云按量计费; 内存数据库使用VMWare的GemFire;分布式内存运算数据管理云平台-Pivotal Gemfire; 12306技术负责人朱建生说,为了应对2015年春运高峰,采用五项措施:一是利用外部 云计算资源分担系统查询业务,可根据高峰期业务量的增长按需及时扩充。二是通过 双中心运行的架构,系统内部处理容量扩充一倍,可靠性得到了有效保证。三是对系统 的互联网接入带宽进行扩容,并可根据流量情况快速调整,保证高峰时段旅客顺畅访问 网站。四是防范恶意抢票,通过技术手段屏蔽抢票软件产生的恶意流量。五是制定了多套 应急预案,以应对突发情况。 选择Pivotal Gemfire原因: 1,关联数据节点设计:可以根据客户的业务逻辑特性和数据关联性,将关联性强的数据放置于同一个服务器节点,提高系统性能,避免分布式系统服务器的频繁数据交换。 2. 将数据移到内存:由于数据是放在内存里面,屏蔽传统数据库频繁访问, CPU与数据库的交互作用,影响服务器性能。内存的数据交换速度远高于磁盘速度上千倍, 极大提高系统性能。 3. 扩展和伸缩性:以Gemfire构建的应用云平台,是以 x86 PC服务器为主的硬件基础。在保证系统的性能下,此平台可以随着客户业务的成长来任意调配x86服务器的数量,避免以后昂贵的硬件升级带来的困扰。经POC测试结果显示,整个系统性能可随着服务器的数量的增加实现几乎线性的成长。 4. 数据可靠性:在同个集群里面可以有多个数据节点备份,数据可以自动同步,或是将内存数据持久化到硬盘或是数据库 5. 跨地域的数据分布或同步 :可以透过“广域网”将指定的 Gemfire集群的内存数据“实时同步”到异地的数据中心。这是属于“应用层”的数据同步异于传统的“数据库”同步。 6. Pivotal Gemfire使用 x86 PC服务器,其性价比远远高于 Unix 小型机。 如何设计一个秒杀系统: 秒杀系统特点:同一时间峰值,请求大于库存,逻辑简单:下单减库存; 秒杀架构设计:限流(只允许少部分流量进入服务器后端), 削峰(利用缓存和消息中间件),异步处理(提高系统并发性,削峰的方式), 内存缓存(数据库瓶颈),可扩展(流量来了,拓展机器); 设计思路:将请求拦截在系统上游,降低下游压力;充分利用缓存;利用消息队列; 前端方案:页面静态化(用CDN),禁止重复提交,用户限流(只允许提交一次,IP限流) 后端方案:限制UserId访问频率; 服务层:采用消息队列缓存请求(服务层知道只有100个手机,没必要把100万请求都交到数据库,把请求交到消息队列进行缓存,数据库层订阅消息减库存,减库存成功返回秒杀成功,失败返回秒杀结束),利用缓存应对读请求(类似12306读多写少的业务,利用缓存分担数据库压力),利用缓存应对写请求(库存数据转移到Redis); 数据库层,只承担“能力范围内”的访问请求。 利用消息中间件和缓存实现简单秒杀系统:用Redis接收请求,满了就不接收了,用数据库慢慢处理请求。