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

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

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

  商品详情页统一服务系统的建立
  商品详情页上异步加载的服务非常多,因此我们做了一套统一服务系统。为什么做这个系统?我们的目标就是所有在页面中接入的请求或者接入的服务,都必须经过我们这个系统。
  监控,监控每个服务的服务质量;
  随时通过我们自己的开关去做一些降级的处理。比如促销慢了,可以随时对它降级,保证后端的服务不被异常的流量打出问题来。这个系统前端是用的Nginx+Lua。
  数据异构系统。像我们的库存,大家可能看到我们的库存,跟淘宝的库存不太一样。因为京东有自营的和第三方的,看库存的话显示的有如有货还是没货,是否有预订,以及第三方可能还有运费的概念,第三方还存在配送时效问题,比如你买了多少天之后发货。对于这些数据我们可以做异构,异构过来我们只依赖于自己不依赖其他人。其他人服务出问题了,抖动了或者响应慢了,对我们是没有影响的。
  核心的设计思想
  异构的思想。我们把别人的数据按照我们自己的维度,或者按照我们自己想要消费的数据的格式进行存储。存储之后我们只消费我们自己的数据,其他人的数据我们都不依赖了。相当于别人的接口怎么抖动对我不影响的。像双十一我们有一个集群,比如商品挂了,前端还是可以提供服务,只是数据不更新了。还有一个如双十一期间一些商品不更新但是要做秒杀,我们可以通过前端逻辑处理,在系统里进行人工打上标签,打上之后就可以进行秒杀了。
  服务闭环的思想。假设我们在设计页面的时候有很多服务依赖于别人,出问题之后肯定先找我们。找我们的时候我们又需要去联系其他的部门,就会存在沟通的问题。如果我们能够及早发现这个问题,进行预案处理,比如降级,如库存出问题了,让我们第一时间知道,我们可以降级为全部有货,让大家都有货可买,这就形成了服务闭环。所有服务接入都通过我们的系统接入,出现问题我们及时发现,进行降级处理。
  维度化存储。在存储数据的时候我们都是按照维度进行存储的。然后我们按照使用方式获取。比如我们进行一个详情页的时候只需要两次获取,一次是拿商品信息,另外是拿商家分类等等。
  统一接入层和代理层
  统一入口,形成闭环。所有接入通过我们系统接入,这样出问题后我非常容易找。
  做监控。比如这个接口响应慢了,我可以督促我这个依赖的业务。还有缓存前置,在前端有5-10秒缓存,对于这个时间大家是可以忍受的。我们把缓存前置,我们Nginx+Lua,它的并发是非常高的。缓存前置后很多流量导不到你的业务层;即我们尽量让流量在前端处理掉,而不到达我们的业务层。
  业务前置,像库存封装,我们会在Nginx+Lua做一些简单的处理。做一些简单的数据处理,像一些人为非法传入的数据,都会在这一层过滤掉。
  新版测试。像我们做了一个延保服务,我想知道它的之前和之后的效果怎么样的,我就需要对一部分人用A版,一部分人用B版,在我们这层可以实现。比如根据用户的ID,或者每次用户访问的时候都会用UUID。而且在这里通过Nginx+Lua,通过Lua写一些程序,在这里都是通过程序控制AB测试的。还有像引流,发布,流量切换都是在这层完成的。
  比如我们在上线的时候都会有一些开关的概念,在Nginx+Lua这一层我们会通过写代码的方式,有50%的用户用新版,然后慢慢一步一步往上加,而且大多数流量控制在我们的前端。
  做一些线上压测,通过Lua协程机制,把一个请求并发分成两个请求打到后端,然后你再做一些逻辑的验证。
  降级开关前置
  监控服务质量
  限流等
  我们做实践的时候会做服务的隔离。为什么做隔离呢?非常简单,假设你的一个系统里进行http调用,而忘了设超时时间,此时流量很大时,http服务出问题了,这很可能会导致应用挂掉。所以我们设计的时候会把我们的业务进行分级,在一个应用里对业务分级:0级业务,1级业务;如库存,这里面库存就是必须的,没有这个业务,页面不会进行下一步流程,我们设置为0级服务;而如延保服务没有也不影响,我们设置为1级。在这里我们用了servlet3异步化,通过异步化我们把请求接收到,然后存到隔离的池子里,然后这些池子的请求是相互隔离的,假如一个池子出问题了不会对另一个产生影响的。之前在做的时候其实是遇到过,比如在开发试用报告,没有加超时时间,把我们的应用打挂了。

相关文章推荐:

图文精选:

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


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

Top