您现在所在的位置:首页 >关于奇酷 > 行业动态 > 同为高并发,微博热搜、天猫秒杀、12306 抢票有什么不同呢

同为高并发,微博热搜、天猫秒杀、12306 抢票有什么不同呢

来源:奇酷教育 发表于:

同为高并发,微博热搜、天猫秒杀、12306 抢票有什么不同呢?

   “
 
  同为高并发,微博热搜、天猫秒杀、12306 抢票有什么不同呢?
 
  高并发大不同
 
  1、12306 抢票
 
  今年的五一假期,12306又崩上热搜。

 
  12306 崩了,网友:“我也崩了”。
 
  12306 抢票是一个类秒杀的业务,其核心为:查票、买票。
 
  那么,12306 的秒杀和电商的秒杀有什么不一样吗?
 
  电商秒杀:秒杀的对象是商品,一个商品的 sku 个数总是有限的,客户端直接将用户想要购买的 skuId 传给服务端即可。
 
  12306 抢票:秒杀的对象是票。“票”是一个很特殊的商品,比如从杭州到北京,沿路会经过若干各站点。
 
  起始站点、车次、时间,各种不同的选择会组合出各种不同的结果,即便是“查票”这一个功能,服务端可能也需要大量的计算。
 
  不同的组合方式可能就是不同的下单行为,而秒杀,直接秒对应的商品即可。
 
  这也就是为什么大家再说高并发的时候,总是会不约而同的想到12306的原因。不得不承认,12306的系统架构确实牛,说他是最复杂的购票系统都不为过。
 
  2、微博热搜
 
  「微博热搜」也是一个典型的读多写少场景,读今日的热点新闻,写自己的微博评论。

 
  作为一个后端开发,看到“读多写少”,第一反应就应该想到要加缓存。
 
  可是,为什么微博总是宕机,抵挡不住 xxx 明星出轨新闻流量?
 
  对微博来说,难点在于热点无法预测,在面对突发流量时,如何快速扩容。
 
  3、电商秒杀
 
  电商秒杀的大部分做法都是先定日子,然后上报要参与的秒杀商品,最后倒计时秒杀。
 
  也就是说什么时候会有秒杀活动,哪些商品会参与秒杀,这些数据在秒杀前服务端是都可以获取到的。
 
  而这些数据,也正是关键的“热点数据”。
 
  有了热点数据之后,服务端可以在秒杀开始前,先加载好相关热点数据的缓存,做好预热。
 
  同时,在秒杀前做好相应的限流、扩容准备,已应对即将到来的突发流量。
 
  到底何为高并发
 
  是不是很多人都认为分布式=高并发=多线程?
 
  他们三个总是相伴而生,但侧重点又有不同。
 
  1、什么是分布式?
 
  分布式更多的一个概念,是为了解决单个物理服务器容量和性能瓶颈问题而采用的优化手段。
 
  该领域需要解决的问题极多,在不同的技术层面上,又包括:
 
  分布式文件系统、分布式缓存、分布式数据库、分布式计算等,一些名词如Hadoop、zookeeper、MQ等都跟分布式有关。
 
  从理念上讲,分布式的实现有两种形式:
 
  水平扩展:当一台机器扛不住流量时,就通过添加机器的方式,将流量平分到所有服务器上,所有机器都可以提供相当的服务;
 
  垂直拆分:前端有多种查询需求时,一台机器扛不住,可以将不同的需求分发到不同的机器上,比如A机器处理余票查询的请求,B机器处理支付的请求。
 
  2、什么是高并发?
 
  高并发是系统运行过程中遇到的一种 “短时间内遇到大量操作请求” 情况。
 
  主要发生在 Web 系统集中收到大量请求时,该情况的发生会导致系统在这段时间内执行大量操作,比如在线直播服务,同时有上万人观看,再比如对资源的请求、数据库的操作等。
 
  高并发可以通过分布式技术去解决,将并发流量分到不同的物理服务器上。
 
  但除此之外,还可以有很多其他优化手段:比如使用缓存系统,将所有的,静态内容放到CDN等;还可以使用多线程技术将一台服务器的服务能力最大化。
 
  3、什么是多线程?
 
  多线程是指从软件或者硬件上实现多个线程并发执行的技术,它更多的是解决CPU调度多个进程的问题,从而让这些进程看上去是同时执行(实际是交替运行的)。
 
  这几个概念中,多线程解决的问题是最明确的,手段也是比较单一的,基本上遇到的最大问题就是线程安全。
 
  在JAVA语言中,需要对JVM内存模型、指令重排等深入了解,才能写出一份高质量的多线程代码。
 
  总结一下:
 
  分布式是从物理资源的角度去将不同的机器组成一个整体对外服务,技术范围非常广且难度非常大,有了这个基础,高并发、高吞吐等系统很容易构建;
 
  高并发是从业务角度去描述系统的能力,实现高并发的手段可以采用分布式,也可以采用诸如缓存、CDN等,当然也包括多线程;
 
  多线程则聚焦于如何使用编程语言将CPU调度能力最大化。
 
  通关高并发
 
  通关高并发,把时间投资在重要而关键的事情—学习上,将会有更大的收获。
 
  扫码加奇小酷(微信号18037498782,手机号同微信号)为好友,回复Java学习资料 ,免费领取学习资料:
 
  △奇小酷微信号:18037498782(手机号同微信号)
 
  1、阿里Java开发手册
 
  2、百度/阿里/拼多多互联网企业Java面试真题
 
  3、Java高并发电子书
 
  —————————华丽的分割线————————
 
  Java开发课程
 
  1、奇酷教育Java开发课程知识点
 
  2、奇酷教育Java开发课程实战项目
 
  3、奇酷教育Java开发课程教学服务体系
 
  一起解锁高并发的魔力,星星之火可以燎原。