秒杀系统架构关键技术-热点数据
作者:互联网
为什么要关注热点
我们一定要关注热点,因为热点会对系统产生一系列的影响。 首先,热点请求会大量占用服务器处理资源,虽然这个热点可能只占请求总量的
亿分之一,然而却可能抢占 90% 的服务器资源,如果这个热点请求还是没有价值的无效请求,那么对系统资源来说完全是浪费。
其次,即使这些热点是有效的请求,我们也要识别出来做针对性的优化,从 而用更低的代价来支撑这些热点请求。
什么是
“
热点
”
热点分为
热点操作
和
热点数据
。所谓“热点操作”,例如大量的刷新页面、大量的添加购物车、双十一零点大量的下单等都属于此类操作。对系统来说,这
些操作可以抽象为“读请求”和“写请求”,这两种热点请求的处理方式大相径
庭,读请求的优化空间要大一些,而写请求的瓶颈一般都在存储层,优化的思路
就是根据 CAP 理论做平衡。
而“热点数据”比较好理解,那就是用户的热点请求对应的数据。而热点数 据又分为“静态热点数据”和“动态热点数据”
所谓“静态热点数据”,就是能够提前预测的热点数据
。例如,我们可以通
过卖家报名的方式提前筛选出来,通过报名系统对这些热点商品进行打标。另
外,
我们还可以通过大数据分析来提前发现热点商品
,比如我们分析历史成交记 录、用户的购物车记录,来发现哪些商品可能更热门、更好卖,这些都是可以提
前分析出来的热点
所谓“动态热点数据”,就是不能被提前预测到的,系统在运行过程中临时产生 的热点。例如,
卖家在抖音上做了广告,然后商品一下就火了
,导致它在短时间
内被大量购买,由于热点操作是用户的行为,我们不好改变,但能做一些限制和保护,
发现静态热点数据 如前面讲的,静态热点数据可以通过商业手段,例如强制让卖家通过报名参 加的方式提前把热点商品筛选出来,实现方式是通过一个运营系统,把参加活动 的商品数据进行打标, 然后通过一个后台系统对这些热点商品进行预处理,如提 前进行缓存 。但是这种通过报名提前筛选的方式也会带来新的问题,即增加卖家 的使用成本,而且实时性较差,也不太灵活。 不过,除了提前报名筛选这种方式,你还可以通过技术手段提前预测,例如 对买家每天访问的商品进行大数据计算,然后统计出 TOP N 的商品,我们可以 认为这些 TOP N 的商品就是热点商品。 发现动态热点数据 我们可以通过卖家报名或者大数据预测这些手段来提前预测静态热点数据, 但这其中有一个痛点,就是实时性较差,如果我们的系统能在秒级内自动发现热 点商品那就完美了。 能够动态地实时发现热点不仅对秒杀商品,对其他热卖商品也同样有价值,所以 我们需要想办法实现热点的动态发现功能。 一个动态热点发现系统的具体实现 1. 构建一个异步的系统,它可以收集交易链路上各个环节中的中间件产品 的热点 Key,如 Nginx、缓存、RPC 服务框架等这些中间件(一些中间件 产品本身已经有热点统计模块)。 2. 建立一个热点上报和可以按照需求订阅的热点服务的下发规范,主要目 的是通过交易链路上各个系统(包括详情、购物车、交易、优惠、库存、 物流等)访问的时间差,把上游已经发现的热点透传给下游系统,提前做 好保护。比如,对于大促高峰期,详情系统是最早知道的, 在统一接入层 上 Nginx 模块统计的热点 URL 。 3. 将上游系统收集的热点数据发送到热点服务台,然后下游系统 (如交易系统)就会知道哪些商品会被频繁调用,然后做热点保护。 我们通过部署在每台机器上的 Agent 把日志汇总到聚合和分析集群中,然后把符合一定规则的热点数据,通过订阅分发系统再推送到相应的系统中。你可以是 把热点数据填充到 Cache 中,或者直接推送到应用服务器的内存中,还可以对这些数据进行拦截,总之下游系统可以订阅这些数据,然后根据自己的需求决定 如何处理这些数据。 处理热点数据 处理热点数据通常有几种思路:一是优化,二是限制,三是隔离 。 先来说说优化。优化热点数据最有效的办法就是缓存热点数据,如果热点数据做 了动静分离,那么可以长期缓存静态数据。但是,缓存热点数据更多的是“临 时”缓存,即不管是静态数据还是动态数据,都用一个队列短暂地缓存数秒钟,由于队列长度有限,可以采用 LRU 淘汰算法替换。 再来说说限制。限制更多的是一种保护机制,限制的办法也有很多,例如对被访 问商品的 ID 做一致性 Hash,然后根据 Hash 做分桶,每个分桶设置一个处理 队列,这样可以把热点商品限制在一个请求队列里,防止因某些热点商品占用太多的服务器资源,而使其他请求始终得不到服务器的处理资源。 最后介绍一下隔离。秒杀系统设计的第一个原则就是将这种热点数据隔离出来,不要让 1% 的请求影响到另外的 99%,隔离出来后也更方便对这 1% 的请 求做针对性的优化。 具体到“秒杀”业务,我们可以在以下几个层次实现隔离。 1. 业务隔离 。把秒杀做成一种营销活动,卖家要参加秒杀这种营销活动需 要单独报名,从技术上来说,卖家报名后对我们来说就有了已知热点,因 此可以提前做好预热。 2. 系统隔离 。系统隔离更多的是运行时的隔离,可以通过分组部署的方式 和另外 99% 分开。秒杀可以申请单独的域名,目的也是让请求落到不同 的集群中。 3. 数据隔离 。秒杀所调用的数据大部分都是热点数据,比如会启用单独的Cache 集群或者 MySQL 数据库来放热点数据,目的也是不想 0.01% 的 数据有机会影响 99.99% 数据
标签:缓存,架构,请求,热点,商品,秒杀,关键技术,数据,隔离 来源: https://blog.csdn.net/kingSolider/article/details/115495082