本文来自网易云社区

考拉凑单页为整单类活动凑单页面,从大促的表现来看,承载在考拉全站差不多5%左右的请求量,尤其在大促整单类活动比较多的情况,对于凑单商品的实时性就有更高的要求,要不然用户没有入口做凑单,已考拉目前的凑单页地址如https://www.kaola.com/activity/goods/1197184.html,效果如下

考拉目前的搜索凑单页基于杭研的ndir去构建doc,但是考拉在大促的时候零点那一个时刻,按照3月8大促的量,存在几十万商品更新索引信息,因为所有商品的促销信息都需要更新到ndir里面,随着考拉业务的不断发展,商品的数量级仍然会不断增加,但是对于ndir来说,更新索引是比较耗时,基于lucene全文检索实现,更新一般分为删除和插入操作doc,之前考拉的方案由于商品不多,所以在变更活动信息基于mq消息通知搜索,搜索触发更新索引操作会调用促销接口更新ndir,促销会给出当前的实时促销信息,活动结束的时候也会触发mq消息通知,这样保证活动开始和活动结束这个搜索可以即使的构建活动。

但是随着考拉商品sku数量不断扩大,ndir的更新瓶颈显得尤为明显,尤其在大促时候,瞬间有几十万商品参加活动,这样mq消息就显得特别的庞大,按照之前数据量全部更新一次索引差不多两个小时,但是大促开始那个时刻是下单量最大的,这段时间的凑单页不实时直接影响转化率和用户体验。

所以整个大促的活动整体优化方案

1.搜索增加一个索引字段专门为凑单页去匹配,这个字段只给凑单页使用

2.促销对于整单类活动的时间,促销提前返回全部未开始的整单类活动,整单类活动在发动发布的时候就刷新进缓存

3.促销的整单类活动的开始时间以会员时间为准,如果处于提前购阶段或者未开始的时间存在提前购增加返回提前购标示,整单类还需要把非会员开始时间,整单类结束时间落库

4.对于中途整单类活动已经刷进ndir,运营变更活动,修改,删除等活动都需要的实时刷新到ndir去

新增一个索引字段,主要是为了避免正在进行的活动和未开始的活动的区分,在考拉的主搜那边会根据goods_tag去获取正在进行的活动,用户前台可以根据是否有促销搜索商品信息,这块信息要保证实时的一致性,否则会引起很大的客诉,https://www.kaola.com/activity/goods/1197184.html凑单页的url比较固定,这样会被用户穷举,加入用户访问了一个未开始的活动,这样也会有问题。对于这个穷举问题,考拉目前的做法是页面和数据分两个请求,页面请求为同步请求,同步请求的时候会根据活动方案号去促销系统查询改方案是否有效,如果为非法的方案号,直接渲染404错误页面,否则跳转正常的凑单页,然后再根据ajax请求搜索数据

整个基于mq消息通知去更新索引信息,由于活动的数据时间经常变更,因此需要在活动发布,活动开始,价格审核通过,活动暂停,活动恢复等活动变更的流程中去控制ndir里面的索引数据,目前这块业务整合在促销的消息通知里面,为了避免一次消息量过大,促销发送消息时候做了一次分批处理

@Override
public void sendActivityNotifyMessage(List<Long> goodsIdList) {if (CollectionUtils.isEmpty(goodsIdList)) {return;}List<Long> notifyGoodsIdList = new ArrayList<>(new HashSet<>(goodsIdList));int batchSize = promotionConfig.getInteger(sendActivityNotifyBatchSize, 500);ListUtils.split(notifyGoodsIdList, batchSize, new PageProcess<Long>() {@Overridepublic void process(List<Long> pageIdList) {logger.info("send activity notify Message to rabbitmq goodsId:{}",pageIdList);Map<String,List<Long>> param = Maps.newHashMap();param.put("goodsIdList", pageIdList);rabbitTemplate.convertAndSend(param); } });}

活动变更时候为了减少发送量,只会把变更商品发送给ndir那边,变更数据主要为新增,修改和删除的商品id,促销这边基于定时任务发送变更信息,定时任务每一分钟发送一次,数据表一个商品在同一个时间点存在多个活动,这时候变更记录只会有一条,所以数据库设计以商品id和时间维度,具体表设计如下

CREATE TABLE TB_ACTIVITY_NOTIFY(ID VARCHAR2(32) NOT NULL,GOODS_ID NUMBER(10) NOT NULL,UPDATE_TIME TIMESTAMP(6) DEFAULT SYSDATE NOT NULL,SEND_FLAG NUMBER(1) DEFAULT 0 NOT NULL,CONSTRAINT PK_TB_ACTIVITY_NOTIFY PRIMARY KEY (ID));

该表为了保证通知性能,需要定时清除,因为大促的商品数据量很大,如果不做定时清理或者分区,会导致通知表的性能下降,所以增加一个send_flag表示通知标示,如果已经发送的成功的话,则修改为Y,这样定时清除就可以通过标示清除已发送数据

https://www.163yun.com/gift

本文来自网易云社区,经作者李世堤授权发布。

相关文章:
【推荐】 知物由学|游戏开发者如何从容应对Unity手游风险?

搜索凑单页大促显示延迟方案设计相关推荐

  1. 阿里凑单算法首次公开!打包购商品挖掘系统解析

    阿里妹导读:你是否也曾遇到类似的情况--差5块钱就能包邮,跨店满400减50就少20怎么办?凑单作为购物券导购链路的一个重要环节,旨在帮助你找到合适的商品.如何在凑单场景突破找相似.发现惊喜的同时做到 ...

  2. 拼多多新年大促活动规则介绍,拓商科技助力店铺突围

    近日,拼多多发布了关于 2022 年新年大促的活动规则.新年大促作为拼多多年度大型营销活动,在双节流量的加持下,流量指数将会进一步暴涨. 本次活动模式主要有"跨店99元2件"和&q ...

  3. 七天学会ASP.NET MVC(七)——创建单页应用

    目录 引言 最后一篇学什么 实验32-整理项目组织结构 关于实验32 实验33--创建单页应用--第一部分-安装 什么是Areas? 关于实验33 实验34--创建单页应用--第二部分-显示Emplo ...

  4. Discuz x2.5 单页制作的教程

    2019独角兽企业重金招聘Python工程师标准>>> 首先,单页包括该单页的php文件和该单页的模板(.htm)文件,比如:host.php.host.htm 单页的php文件内容 ...

  5. discuzX1.5制作单页教程

    首先,单页包括该单页的php文件和该单页的模板(.htm)文件,比如:host.php.host.htm 本帖隐藏的内容 单页的php文件内容如下: 1.     <?php 2. 3.     ...

  6. 一度智信|为什么拼多多大促后流量会直线下降

    对于很多商家朋友来说,店铺流量是很重要的.但是在大促之后有些店铺的流量突然下降了很多,断崖式下降.所以今天小编就分享一些针对流量大幅度下降的,补救办法. 一.挽救办法 1.保持固定上新频率:我们可以保 ...

  7. 名编辑电子杂志大师教程 | 如何一页页的单页单面显示电子杂志?

    在名编辑电子杂志大师里,如果希望制作的电子杂志是一页页的单页单面显示的,而不是双页翻页显示,也就是无论翻到哪一页,都只显示一面,有以下两种方法可以做到. 方法一:单页功能 除了Neat模板不支持以外, ...

  8. 1024 大促书单丨神券在手,快乐我有

    //    把闸拉了,今天谁也别想加班!  // 又是一年1024,又是一年程序员节 这嘴上说着"今天不加班" 肉体却被牢牢封印在电脑前的日子何时是个头 擦掉泪水,生活还要继续 博 ...

  9. 图标和文字跟着div比例放大缩小_Word文档页面显示比例与单页多页,文本的输入、修改、删除与插入...

    在默认情况下,文档页面都以100%显示,但最大可放大到500%,最小可缩小到10%,可根据自己的爱好设置.一般保持默认即可.另外,还可以设置一屏显示一页还是多页:此外,还能把文档设置为页宽. 在 Wo ...

最新文章

  1. shell中字符串截取的几种方法
  2. 基于注意力机制的lstm实现_一种基于注意力机制的自动标点引擎的测试体验
  3. Ubuntu下安装make
  4. “你的手机上未安装应用程序”的解决方案
  5. LinCode落单的数
  6. python len命令_python命令行参数
  7. HDU 5305 Friends dfs
  8. 【C++】accumulate函数的用法(STL)
  9. 网易云课堂测试微专业前置课
  10. MBR磁盘分区见解笔记
  11. 高等数学 · 希腊符号
  12. 操作系统课程设计(作业调度、内存管理、进程调度、进程阻塞等)
  13. 3d文件格式转换工具
  14. 【计算机网络】数据链路层 : ALOHA 协议 ( 纯 ALOHA 协议 | 时隙 ALOHA 协议 )
  15. android 绘制坐标系(雷达探测界面)
  16. 图像形状及数量识别(matlab实现)
  17. 在番看付费美女直播,不想花钱,我这样做了!
  18. 几种常见窗函数的特性
  19. plot_2d_separator
  20. Gridmanager

热门文章

  1. [ukulele]入门指南
  2. 缺陷管理工具--Mantis
  3. CAD标注:CAD软件中如何快速进行角度尺寸标注?
  4. python 百度云搜索引擎入口_2016最新百度云网盘搜索引擎源码,附带Python爬虫+PHP网站+Xunsearch搜索引擎...
  5. ffmpeg 将文本转换成音频以及多个音频合成一个音频的方法
  6. 人见人爱A+B(C++)
  7. 网络信息安全从业者,持NISP二级或CISP证书,最高可补贴30000元
  8. 怎么用c语言编辑出天依蓝,我天依蓝
  9. apmserv 5.2.6 升级php,Windows + APMServ5.2.6/PHP5以上
  10. 使用Cytoscape画PPI网络图