绿色排版工具|热门专题|网站地图|移动官网
您的当前位置:网站首页 > 网站分析 > 正文

京东商品详情页应对“双11”大流量的技术实践(3)

来源:未知 编辑:狂奔小蚂蚁 时间:2016-03-07 22:30:04 阅读:

  部署和分组隔离。比如我们有一个业务,这个业务可能非常非常多人依赖我,我就可以进行分组。A部门调这个分组,B部门调那个分组。为什么这么做呢?因为你不能保证所有人按照你的流程来做。像压测没有告诉你,导致你没有增加流量等等。对于这种情况我尽量分离,你这样了对其他人是不受影响的。分组,就是不同的部门调不同的分组,或者按照调用方分级进行不同的分组。
  到最后的时候,假设一个应用里面牵扯的服务特别特别多,但是这些服务又特别重要,像价格一天可能几百亿的量,这个时候就可以做一个单独服务。像促销、库存等等都可以单独拆出来做一个服务。如果前期没有问题的话,大家更多时候是把它做成一个大的项目。大项目一重启就会产生抖动,而抖动是对所有服务的。因此我们需要拆应用隔离。
  对于分布式缓存大家应用比较多的可能是Redis、Memcached。这里我们前端Nginx会用一致性哈希的概念,如通过分类进行一致性哈希,让它一致性哈希到不同的Nginx实例增加命中率。还有对于一些错误数据或者一些兜底的数据是不做缓存的。
  对于突发流量,我们使用比较多的是高效缓存,最有效的就是把数据拿到你这边缓存,这样这个数据就受你控制了。还有如你一个机房有一套数据,这样的话没有跨机房,整体的效率可能会有提升。这里用的比较多的就是多级缓存,先做本地缓存,本地缓存没有命中就走分布式。另外我们会做一些自动降级处理,像一些不是特别重要,我们自动根据超时时间降级,如第三方的配送时效,对于这个信息几秒钟或者几分钟没有给用户展示,并不会影响他的购买,对于这种数据我们会做一个,比如超过500毫秒或者200毫秒就自动降级,就是这个数据不输出了。还有一些数据没法儿降级的,比如价格,没有的话可能页面就是空,我们不会对它进行缓存。还有库存,我们没法儿做很大的缓存。还有我们尽量减少回源量,就是用一致性哈希。我们还会用非阻塞锁和304响应,如304响应适合如秒杀时一直点刷新按钮,而此时的一些异步加载数据没必要请求到服务端重新计算,此时就适合设置过期时间,如10s,10s内都返回304。还有对一些恶意访问,这个我们只能更多的去提升我们的扛恶意的。比如我们通过KV存储数据,这样在KV命中的情况下是不怕刷的,因为我们流量是足够的,除非它们把我们带宽打满。还有就是提升缓存命中率,减少回源冲击。还有我们会考虑把一些恶意的流量导流到另外一个分组,就是给一些恶意的用户使用的,就是它也能用,但是慢。还有就是对N页以后的请求做特殊处理,比如访问一个列表的时候,像大家访问更多的是前十页,对后十页就可以做特殊处理,比如限速,比如这个服务正常10毫秒就出来了,我给它放到100毫秒,这个我们都是在Nginx上做的,让他把刷你的速度给降下来。
  还有一些就是我们的兜底的数据,一种就是做静态化。像我们会对前几页数据进行数据静态化,像服务挂了,可以把这个静态化的数据给大家提出来,不至于大家看到503页面或404的状况。还有就是没法儿做缓存,就是说我们没有降级方案的。
  对于降级的话我们有两种:
  第一,人工降级。比如一些库存,对于这种服务我们都是人工去监控,我们后台都会有报警系统,像超过多少毫秒都会有报警,都会通过人工来控制。还有自动降级。刚才提到了像超时降级,还有大访问量的时候会自动降级,因为访问量你的系统承载不住了,否则的就会挂掉。我们做这个就是对一些用户可用,对一些就是降级掉。
  还有连接池超时时间,像大家都不去设置或者设置比较大,像一般访问都没有问题,但是一旦发生异常情况,像网络抖动或者其他的情况,你的整个系统可能就会挂掉。还有就是重试时机和次数。重试时机,第一次访问已经挂,接着第二次、第三次访问,其实这个请求是没有作用的。通过阶梯式的方式或者阶程式的方法慢慢做恢复。
  还有CDN回源,我们做了版本化,现在评价也是版本化,为什么做版本化呢?因为之前双十一导致评价量非常非常大,你直接回源的话是扛不住的。所以我们现在做了评价版本化,有了版本号,这个页面可以缓存很长时间,比如可以缓存一天、两天;如果没有版本号,只能缓存几分钟,然后回源。对于这种方式可以更高效的做CDN缓存。爬虫不回源,不让它到后端服务。返回历史数据,非阻塞锁。

相关文章推荐:

图文精选:

Copyright©2012-2019 小蚂蚁信息网版权所有 粤ICP备14061018号-1


郑重声明:本网站资源、信息来源于网络,完全免费共享,仅供学习和研究使用,版权和著作权归原作者所有,如有不愿意被转载的情况,请通知我们删除已转载的信息。

Top