秒杀系统设计(二)——动静分离

138 阅读3分钟

这是我参与2022首次更文挑战的第10天,活动详情查看:2022首次更文挑战

前言

在上一篇文章中我们讨论了秒杀系统的设计考虑要素,那么今天我们来详细谈一下具体的秒杀系统要如何应用这些考虑要素的呢,今天我们要讨论第一关键点就是:数据的动静分离,在我们的秒杀的场景中,对于系统的要求就是:快,准,稳。

那么如何让系统快起来呢?一个就是提高单次请求的效率,另一个就是减少没有必要的请求。这个实质上就是把数据进行动静分离的理念,当数据分离后,请求的数据量下来了,效率提升了。

动静数据的概念

“动静分离”就是把用户请求的数据(如HTML页面)划分为“动态数据”和“静态数据”。

简单来说,“动态数据”和“静态数据”的主要区别就是看页面中输出的数据是否和URL,浏览者,时间,地域相关,以及是否含有Cookie等私密数据。以下具体说明下:

  1. 很多媒体类的网站,某一篇文章的内容不管是你访问还是我访问,它都是一样的。所以它就是一个典型的静态数据,但是它是个动态页面。

  2. 我们如果现在访问淘宝的首页,每个人看到的页面可能都是不一样的,淘宝首页中包含了很多根据访问者特征推荐的信息,而这些个性化的数据就可以理解为动态数据了。

静态数据不仅仅是传统意义上完全存在磁盘上的 HTML 页面,它也可能是经过 Java 系统产生的页面,但是它输出的页面本身不包含上面所说的那些因素。也就是所谓“动态”还是“静态”,并不是说数据本身是否动静,而是数据中是否含有和访问者相关的个性化数据。

分离了动静数据,我们就可以对分离出来的静态数据做缓存,有了缓存之后,静态数据的“访问效率”自然就提高了。如何对静态数据做缓存呢?有以下几个考虑要素:

  • 你应该把静态数据缓存到离用户最近的地方。静态数据就是那些相对不会变化的数据,因此我们可以把它们缓存起来。
  • 静态化改造就是要直接缓存 HTTP 连接。相较于普通的数据缓存而言,Web 代理服务器根据请求 URL,直接取出对应的 HTTP 响应头和响应体然后直接返回,这个响应过程简单得连 HTTP 协议都不用重新组装,甚至连 HTTP 请求头也不需要解析。

总结

今天我们了解了秒杀系统设计的一个关键点,数据的动静分离。