快捷搜索:  汽车  科技

秒杀系统流程(2.跟我学秒杀-秒杀系统的关键技术)

秒杀系统流程(2.跟我学秒杀-秒杀系统的关键技术)存储格式:一般(如果)分离出的动态数据同时被其他多个模块使用,可以将这些信息以json格式输出,更具有通用性,方便前端获取解析。动态数据思考淘宝首页,每个人见到的页面可能是不一样的,它参杂了很多个性化推荐信息,而这些个性化的信息就属于动态数据。动静分离:理解了动态数据和静态数据之后,我们就可以实现将静态数据做缓存,实时的去服务端获取动态数据,再组装成页面需要展示的样式,从而提升秒杀页面的响应时间。静态数据缓存考虑的3个要点

秒杀系统流程(2.跟我学秒杀-秒杀系统的关键技术)(1)

何谓动静分离

何谓动静数据:所谓动静数据,就是把用户请求的页面数据划分为动态数据和静态数据。动态数据和静态数据的主要区别是,页面中输出的数据是否和URL、浏览者即用户、时间、地域相关,以及是否含有cookie等私密数据。

比如:

媒体类的文章内容不管是哪个用户访问,内容都是一样的,这就属于一个典型的静态数据。

淘宝首页,每个人见到的页面可能是不一样的,它参杂了很多个性化推荐信息,而这些个性化的信息就属于动态数据。

动静分离:理解了动态数据和静态数据之后,我们就可以实现将静态数据做缓存,实时的去服务端获取动态数据,再组装成页面需要展示的样式,从而提升秒杀页面的响应时间。

静态数据缓存考虑的3个要点

  • 将静态数据缓存到距离用户最近的节点:常见的方式有用户浏览器、CDN、服务端Cache。
  • 缓存HTTP连接:直接缓存HTTP连接,而不是仅仅缓存数据。
  • 谁来缓存静态数据:一般直接在web代理服务器上做缓存,web代理服务器也更擅长处理大并发的静态文件请求,如Nginx、Apache、Varnish。

秒杀系统流程(2.跟我学秒杀-秒杀系统的关键技术)(2)

动态数据思考

存储格式:一般(如果)分离出的动态数据同时被其他多个模块使用,可以将这些信息以json格式输出,更具有通用性,方便前端获取解析。

动态数据处理方式:ESI方案、 CSI方案

  • ESI(Edge Side Includes)方案:在web代理服务器上做动态内容请求,并将返回信息插入到静态页面组装成一个完整的页面输出给前端,用户体验好。
  • CSI(Client Side Include)方案:在前端页面单独发起一个异步的请求,从服务端获取动态内容再实时地填充到前端,用户端页面会有延迟。

如何做动静分离

动静分离就是需要我们将动态页面改造成适合缓存的静态页面和动态数据,那么从哪些方面做改造?

  • URL唯一化:可以实现前面说的缓存整个HTTP连接。比如商品详情页,每个商品都是有唯一的ID标识,那么 http://item.xxx.com/item.htm?id=xxxx 就可以作为唯一的 URL 标识。
  • 分离出浏览者相关的因素:比如浏览者的登录信息身份等,将这些数据独立出来,通过动态请求去获取。
  • 分离时间因素:页面展示的时间要以服务端为准,动态的从服务端获取时间。
  • 异步化地域因素:页面展示的地域相关的数据最适合通过异步的方式去服务端获取。
  • 去掉Cookie:缓存的静态数据中需要去除服务端返回的cookie数据,不能包含个性化的cookie数据。

动静分离的架构方案

方案一实体机单机部署

实现:反向代理服务器和缓存服务器和应用服务器都在同一台机器上部,将虚拟机改为实体机,增大Cache容量。对Cache层进行适当的分组,并采用一致性hash算法提高缓存命中率。

优点:

1.没有网络瓶颈,增大了Cache层的内存。

缺点:

1.增加了单机的容量,加大了对CPU资源的浪费,单个java进程很难用完整个实体机的CPU资源。

2.java应用和Cache应用部署在同一实体机上,加大了运维的复杂度。

如下一个Nginx Cache java的实体机部署架构图:

秒杀系统流程(2.跟我学秒杀-秒杀系统的关键技术)(3)

方案二:统一Cache层

实现:将单机的Cache统一分离出来,形成一个单独的Cache集群,可以给其他静态系统共用。

优点:

1.Cache更易维护、升级。

2.减少对服务端接入Cache的复杂度,服务端不需要再维护Cache层。

3.共享内存、最大化利用内存。

缺点:

1.应用服务器与Cache层交互存在网络瓶颈。

2.缓存较为集中,如果机器少热点数据较为集中(可以对Cache做hash分组)。

上面的架构改造成如下:

秒杀系统流程(2.跟我学秒杀-秒杀系统的关键技术)(4)

方案三:上CDN

为了更好的做动静分离,可以将Cache前移到CDN上,因为CDN离用户最近。

引入CDN有哪些考虑点:

  • 失效问题:你应该了解所有的静态数据不变都是相对的,我们需要做到CDN可以在秒级内让分布在全国各地的Cache失效。
  • 命中率问题:Cache最重要的一点是命中率,CDN作为Cache的一种,将数据分散在全国各地的CDN上,必然导致了缓存太分散。
  • 发布更新问题:系统需要满足快速发布生效,失败快速回滚和排查问题简单高效。

所以,将商品详情系统放到全国所有CDN节点不太现实,存在失效问题、命中率问题以及发布更新问题。我们可以选择特殊的若干节点来实施CDN缓存。

这样的节点需满足以下条件:

  • 靠近访问量比较集中的区域
  • 离主站相对远点
  • 节点到主站的网络延迟低切稳定
  • 节点容量大,不会占用其他CDN太多资源
  • 节点不能太多

基于以上几点考虑,我们可以选择CDN的二级Cache功能(二级cache是指cdn设置多级回源机制)。因为二级Cache数量少,容量大,让用户的请求先回源到CDN的二级Cache。如果没有命中,再回源到源站获取数据。

优点:

1.整个页面都是缓存在用户的浏览器中

2.如果强制刷新整个页面,也会请求CDN

3.实际的有效请求只是动态数据获取的请求

引入cdn架构改造成如下:

秒杀系统流程(2.跟我学秒杀-秒杀系统的关键技术)(5)

秒杀系统流程(2.跟我学秒杀-秒杀系统的关键技术)(6)

今天就分享到这里,喜欢我的读者可以支持一波【点赞】、【关注】、【转发】,后续有更精彩的内容。可以在我的头条小程序页面领取自己喜欢的资料或者选择阅读自己喜欢的类型文章。

猜您喜欢: