闲鱼玩法平台系列文章——双11实操篇

2023-11-08

背景

  营销玩法是电商行业进行商品促销和用户增长的重要手段,上一篇中介绍了闲鱼的玩法平台——多啦A梦,本篇将介绍在该系统上承接的玩法。闲鱼作为闲置循环工厂也参与了大促,为了让更多闲置在闲鱼游起来,在商品侧设计了《转卖抽奖》活动玩法;为了能让更多用户在闲鱼玩起来,在用户侧设计了 “摇钱树“活动玩法。

  下面详细介绍“转卖抽奖“和“摇钱树“的活动玩法以及技术实现上注意的细节。

转卖抽奖

  商品是闲鱼的必要组成部分,为了让用户可以在大促期间买买买,闲鱼在节前设计了转卖抽奖的活动帮助用户舍断离,具体详细玩法如下:

玩法介绍

  用户发布商品后,将会获取一次抽奖机会,抽奖机会每天最多可以获取50次,活动期间抽奖机会可以累积,活动结束后抽奖机会清零;当用户拥有抽奖机会后即可抽奖,每次抽奖将会消耗抽奖机会,当抽奖机会为零时则不可以抽奖;每次抽奖用户将有概率获得支付宝现金红包和双十一店铺优惠券。

  用户可以通过在闲鱼内发布商品或是在淘宝的闲鱼小程序中一键转卖商品参与活动,商品发布后如果用户获取到了抽奖机会,则在闲鱼端内弹出POP提醒用户获取到一次抽奖机会,并引导用户跳转到活动落地页,在落地页用户可以参与抽奖。

技术方案

  转卖抽奖活动从实现上分为两个活动,一个是完成发布获取抽奖机会,另外是消耗抽奖机会进行概率抽奖。进一步抽象两个活动可以发现他们对应一个共同的业务模型:前置条件->抽奖->奖励。对于发布获取抽奖机会来说,前置条件是发布,抽奖是领取抽奖机会,奖励就是抽奖机会;对于消耗抽奖机会进行概率抽奖来说,前置条件是抽奖机会,抽奖是进行概率抽奖,奖励是红包或是优惠券。所以这个活动的底层实现方案使用的是闲鱼的业务玩法平台哆啦A梦,下面详细介绍这两个活动的技术实现。

  发布后获取抽奖机会,首先需要感知到用户的发布行为,在实现上可以通过硬编码的方式,侵入到商品发布过程中但是这种方案显然过耦合,本文采用的是OMEGA事件采集能力,该方案可以无侵入的感知用户的发布行为,同时可以在采集过程中定制逻辑例如对特定类目、标题进行筛选。用户发布后需要累计抽奖机会,在本方案中抽奖机会累计使用的是积分系统实现,但是要注意在业务上要做好幂等防止一次发布多次累计,同时每个用户每天最多获取50次机会,所以在给单用户发放机会过程中要进行单用户的全局锁,防止发放超出50次。

  消耗抽奖机会进行概率抽奖,用户在进行抽奖前防止并发操作造成抽奖次数过多消耗,所以用户进行抽奖操作时首先进行并发控制,然后消耗抽奖机会再进行最终的抽奖,奖品发放是按照概率进行发放,在概率设计中价值越高的奖品中奖的概率越低,同时考虑活动效果和保证用户参与感,需要保证活动期间都有可抽取的奖品,这就要考虑奖品的发放排期,按照小时级别和天级别对奖品进行排期,保证奖品在活动中均匀分布。在活动期间对于按照价值对奖品进行分组,在高价值组中限制用户的中奖次数,保证高价值奖励能让更多的用户获取。

关键技术点:

1.用户公平性,活动初期活动中的现金红包按照每小时生效进行排期,通过活动监控发现整点参与量都会有一个峰值,分析发现这些用户掌握了红包生效的规律,整点来参与活动刷红包导致红包快速耗光,这对于大多数用户来说是不公平的,所以技术侧做了一个小时内随机多次生效红包,保证用户参与的公平性。

2.疲劳度,控制用户单位时间内可领取的次数,疲劳度的设计利用的是Tair分布式缓存的Incr自增能力,通过设计业务和key的映射实现对用户领取疲劳度的控制,但是在分业务进行疲劳度控制之上建议设计一个基于用户维度的总疲劳度,这样保证在业务疲劳度控制失效时,由用户疲劳度做兜底的控制。

摇钱树

  经过双十一疯狂的剁手后闲鱼帮你来回血,在用户侧闲鱼设计了摇钱树活动,通过用户裂变的玩法对闲鱼用户进行拉新拉活,具体详细玩法如下:

玩法介绍

  用户首先进入活动页面,可以领取一颗摇钱树,在领取摇钱树时会为每个用户分配一个随机的初始现金金额。领取摇钱树后可以通过分享按钮把自己的摇钱树分享给好友,好友通过分享口令进入闲鱼后,会帮助用户进行摇树,摇树成功后双方都可获取现金奖励。但一个用户每天最多只能成功邀请4个好友为自己摇树,超出后不计数,同时每天每人只能帮别人摇树一次。具体如下所示:

  用户可以在闲鱼端内和手淘投放的Banner进入到活动页面,开启自己的摇钱树后可以通过淘口令、微信、当面扫一扫等方式把自己的摇钱树分享给好友,累计到一元即可提现。

技术方案

  摇钱树活动是一种典型的用户裂变玩法,从技术上看可以分为三个部分,第一部分是领取自己的摇钱树获取奖励,第二部分是自己帮助好友摇树获取奖励,第三部分邀请好友为自己摇树获取奖励。进一步抽象三个部分其实对应一个业务模型:关系系统->领取奖励->获取奖励。在第一部分中关系系统中存储的是自己和自己的映射关系,在第二部分中关系系统存储的是自己和好友的映射关系,在第三部分中存储的是好友和自己的映射关系,同时在第二部分和第三部分两个的关系是同时存在的。所以整个实现方案如下所示:

  本方案中领取奖励的部分是基于多啦A梦和拉菲已有的能力实现的,在设计关系系统时存储采用的是基lindorm(HBase)设计,主态和客态关系存在一个表中,通过对Key的设计满足查询的功能和性能要求。当然也可以基于mysql的数据模型设计,对于主态和客态关系建立两个表,分别以主态和客态的用户ID作为分库分表设计;之所以没有采用mysql的数据模型是因为需要维护两个表的事务性和一致性成本过高。

  在整个方案设计上主要关注的点有两个,第一个是资损,在活动中一个用户只能领取1次摇钱树,每天只能帮好友摇树1次,每个用户每天最多可以成功邀请4个用户,这些规则即是玩法规则也是资损易发点,在本文中采用了实时对账和领取限制实现对资损现象的监控和兜底保证,保障无资损是技术侧底线在方案设计上要优先考虑。第二个是并发控制,在活动中用户邀请多个好友为自己摇树,但是一天只能成功邀请4位,所以要做好邀请人侧的并发控制防止出现超过4人的邀请。 

关键技术点:

1.幂等性,幂等能力是每个营销活动必要的能力,常用的方法有利用数据库乐观锁、Tair(redis)分布式缓存、zookeeper等方案实现分布式全局锁,本文中采用的是Tair缓存分布式锁方案。

2.对账校验,对账是营销的一个必要环节,可以通过数据库层面的对账实现数据校验,也可通过业务上的对账进行校验领奖资格,本文采用的是业务上的对账,通过接受领奖后的消息,反查领取用户的资格实现实时的对账能力。

总结与展望

  限于篇幅的限制本文主要介绍了相关的玩法以及在设计玩法过程中需要注意的技术点,后面会对每个技术点的实现单独进行介绍。目前多啦A梦已经在功能上实现了组件化,例如疲劳度校验、并发控制、人群校验的常用能力,这些能力会极大的方便新玩法的开发,未来除了在实现功能组件化以外会逐步实现玩法的组件化,这样运营同学可以直接利用玩法组件拼装自己的业务玩法。

闲不住?来闲鱼!

PICK ME

闲鱼技术团队通过创新追寻更多价值,不断驱动业务变革。

从闲置生意的老本行,到打造“无忧购”“会玩社区““新线下”,

从出版书籍、峰会发声,到开源专利、海外传播,

闲不住,上闲鱼——技术团队对极致的探索与深耕是我们的底气。

 立即加入 

1、招客户端/服务端/前端/架构/质量工程师

2、发简历给guicai.gxy@alibaba-inc.com

3、你还可以在头条、知乎、掘金、facebook、twitter找到我们

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

闲鱼玩法平台系列文章——双11实操篇 的相关文章

  • Java中有没有一种方法可以通过名称实例化一个类?

    我正在寻找问题 从字符串名称实例化一个类 https stackoverflow com questions 9854900 instantiate an class from its string name它描述了如何在有名称的情况下实例
  • 序列的排列?

    我有具体数量的数字 现在我想以某种方式显示这个序列的所有可能的排列 例如 如果数字数量为3 我想显示 0 0 0 0 0 1 0 0 2 0 1 0 0 1 1 0 1 2 0 2 0 0 2 1 0 2 2 1 0 0 1 0 1 1 0
  • Spring应用中Eureka健康检查的问题

    我正在开发一个基于 Spring 的应用程序 其中包含多个微服务 我的一个微服务充当尤里卡服务器 到目前为止一切正常 在我所有其他微服务中 用 EnableEurekaClient 我想启用这样的健康检查 应用程序 yml eureka c
  • Java 枚举与创建位掩码和检查权限的混淆

    我想将此 c 权限模块移植到 java 但是当我无法将数值保存在数据库中然后将其转换为枚举表示形式时 我很困惑如何执行此操作 在 C 中 我创建一个如下所示的枚举 public enum ArticlePermission CanRead
  • 如何在java中将一个数组列表替换为另一个不同大小的数组列表

    我有两个大小不同的数组列表 如何从此替换 ArrayList
  • HSQL - 识别打开连接的数量

    我正在使用嵌入式 HSQL 数据库服务器 有什么方法可以识别活动打开连接的数量吗 Yes SELECT COUNT FROM INFORMATION SCHEMA SYSTEM SESSIONS
  • 如何获取之前的URL?

    我需要调用我的网络应用程序的 URL 例如 如果有一个从 stackoverflow com 到我的网站 foo com 的链接 我需要 Web 应用程序 托管 bean 中的 stackoverflow 链接 感谢所有帮助 谢谢 并不总是
  • 在接口中使用默认方法是否违反接口隔离原则?

    我正在学习 SOLID 原则 ISP 指出 客户端不应被迫依赖于他们所使用的接口 不使用 在接口中使用默认方法是否违反了这个原则 我见过类似的问题 但我在这里发布了一个示例 以便更清楚地了解我的示例是否违反了 ISP 假设我有这个例子 pu
  • 无法创建请求的服务[org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]-MySQL

    我是 Hibernate 的新手 我目前正在使用 Spring boot 框架并尝试通过 hibernate 创建数据库表 我知道以前也问过同样的问题 但我似乎无法根据我的环境找出如何修复错误 休眠配置文件
  • 如何在用户输入数据后重新运行java代码

    嘿 我有一个基本的java 应用程序 显示人们是成年人还是青少年等 我从java开始 在用户输入年龄和字符串后我找不到如何制作它它们被归类为 我希望它重新运行整个过程 以便其他人可以尝试 的节目 我一直在考虑做一个循环 但这对我来说没有用
  • 如何在谷歌地图android上显示多个标记

    我想在谷歌地图android上显示带有多个标记的位置 问题是当我运行我的应用程序时 它只显示一个位置 标记 这是我的代码 public class koordinatTask extends AsyncTask
  • Java 和 Python 可以在同一个应用程序中共存吗?

    我需要一个 Java 实例直接从 Python 实例数据存储中获取数据 我不知道这是否可能 数据存储是否透明 唯一 或者每个实例 如果它们确实可以共存 都有其单独的数据存储 总结一下 Java 应用程序如何从 Python 应用程序的数据存
  • 获取文件的总大小(以字节为单位)[重复]

    这个问题在这里已经有答案了 可能的重复 java 高效获取文件大小 https stackoverflow com questions 116574 java get file size efficiently 我有一个名为 filenam
  • java for windows 中的文件图标叠加

    我正在尝试像 Tortoise SVN 或 Dropbox 一样在文件和文件夹上实现图标叠加 我在网上查了很多资料 但没有找到Java的解决方案 Can anyone help me with this 很抱歉确认您的担忧 但这无法在 Ja
  • Eclipse 选项卡宽度不变

    我浏览了一些与此相关的帖子 但它们似乎并不能帮助我解决我的问题 我有一个项目 其中 java 文件以 2 个空格的宽度缩进 我想将所有内容更改为 4 空格宽度 我尝试了 正确的缩进 选项 但当我将几行修改为 4 空格缩进时 它只是将所有内容
  • 使用 AsyncTask 传递值

    我一直在努力解决这个问题 但我已经到了不知道该怎么办的地步 我想做的是使用一个类下载文件并将其解析为字符串 然后将该字符串发送到另一个类来解析 JSON 内容 所有部件都可以单独工作 并且我已经单独测试了所有部件 我只是不知道如何将值发送到
  • 如何将双精度/浮点四舍五入为二进制精度?

    我正在编写对浮点数执行计算的代码的测试 不出所料 结果很少是准确的 我想在计算结果和预期结果之间设置一个容差 我已经证实 在实践中 使用双精度 在对最后两位有效小数进行四舍五入后 结果始终是正确的 但是usually四舍五入最后一位小数后
  • 双枢轴快速排序和快速排序有什么区别?

    我以前从未见过双枢轴快速排序 是快速排序的升级版吗 双枢轴快速排序和快速排序有什么区别 我在 Java 文档中找到了这个 排序算法是双枢轴快速排序 作者 弗拉基米尔 雅罗斯拉夫斯基 乔恩 本特利和约书亚 布洛赫 这个算法 在许多数据集上提供
  • 如何防止在Spring Boot单元测试中执行import.sql

    我的类路径中有一个 import sql 文件 其中包含一些 INSERT 语句 当使用 profile devel 运行我的应用程序时 它的数据被加载到 postgres 数据库中 到目前为止一切正常 当使用测试配置文件执行测试时 imp
  • Spring Boot 无法更新 azure cosmos db(MongoDb) 上的分片集合

    我的数据库中存在一个集合 documentDev 其分片键为 dNumber 样本文件 id 12831221wadaee23 dNumber 115 processed false 如果我尝试使用以下命令通过任何查询工具更新此文档 db

随机推荐

  • 【简单工具】BurpSuite截获请求并生成文件

    目录 1 实验目标 2 实验环境及靶机设置 2 1 实验环境 2 2 靶机设置 3 实验过程 3 1 前期准备 3 2 BurpSuite设置与操作 3 3 查看结果 4 总结 1 实验目标 设置BurpSuite为浏览器代理 拦截浏览器的
  • Django-登录demo

    本demo的登陆逻辑 如果账号密码正确 跳转至百度页面 账号密码错误 提示登录失败 正确的 账号 admin 密码 123 1 views下添加一个login方法 2 urls中去绑定一下 3 创建一个login xml 运行一下
  • AD18导入的3D模型颜色是白色解决

    问题描述 从Solidworks导入AD18的step文件 显示为白色 解决方法 Solidworks中保存step文件时选AP214格式 不要选择AP203 建议 重新导出时建议起一个和上一次不一样的名字 不然重新导入AD依然是白色 效果
  • Unity自带IAP插件使用

    Unity Services里的Unity IAP对于IOS和GooglePlay的支付用这个插件就足够了 Unity官方文档 1 集成插件 Window Services Ctrl 0 在Services面板Link你的工程 启用In A
  • 抽象问题方法论

    文章目录 模型简化 问题分解到base 流式处理 只关心当前节点问题 从设计者角度出发 思考问题 前后逻辑串联 穷举 细节是魔鬼 基础无穷尽 更高的秩序意味着更先进的文明 设计要小而美 而不是大而全 升维 降维 基于以上逻辑 需要做熵减行为
  • uniapp小程序

    uniapp小程序 uni app之响应式单位upx和rpx upx rpx简介 upx 1 动态绑定的 style 不支持直接使用 upx 2 使用 uni upx2px Number 转换为 px 后再赋值 rpx responsive
  • 华为OD机试 - N进制减法(Java)

    题目描述 主管期望你实现一个基于字符串的N进制的减法 需要对输入的两个字符串按照给定的N进制进行减法操作 输出正负符号和表示结果的字符串 输入描述 输入有三个参数 第一个参数是整数形式的进制N值 N值范围为大于等于2 小于等于35 第二个参
  • 【视频篇】创作的基石,如何找素材?

    前言 工作学习中免不了要搜集素材 然后进行二次创作 这些素材从哪来呢 别告诉我你还在直接百度之后慢慢翻 针对如何找素材 我在打算做一个专题分享一下我的 路子 常见的素材类型比如图片 视频 字体 海报模板 PPT模板等等 想到什么写什么吧 这
  • 一个人如何做抖音矩阵

    随着抖音发展的越来越成熟 不少企业 公司都开始在抖音上发力 但由于人员不够迟迟没有开始布局抖音矩阵 今天小编就来和大家聊一聊一个人怎么做抖音矩阵 一个人做抖音矩阵其实也非常简单 只需要借助矩阵管理系统即可 很多小伙伴迟迟没有做抖音矩阵营销的
  • python 字符串截取_python字符串截取、查找、分割

    Python 截取字符串使用 变量 头下标 尾下标 就可以截取相应的字符串 其中下标是从0开始算起 可以是正数或负数 下标可以为空表示取到头或尾 例1 字符串截取 str 12345678 print str 0 1 gt gt 1 输出s
  • QT 控件重绘

    前言 转载请附上连接 本帖原创请勿照抄 QT重绘控件是指通过实现控件头文件 使用QSS或者样式表来对某个控件进行重新绘制 1 重绘QButton按钮 2 重绘QComboBox下拉框 3 其它控件重绘的办法 1 重绘QButton 重绘控件
  • 竞赛选题 基于机器视觉的二维码识别检测 - opencv 二维码 识别检测 机器视觉

    文章目录 0 简介 1 二维码检测 2 算法实现流程 3 特征提取 4 特征分类 5 后处理 6 代码实现 5 最后 0 简介 优质竞赛项目系列 今天要分享的是 基于机器学习的二维码识别检测 opencv 二维码 识别检测 机器视觉 该项目
  • 深度学习手记(七)之MNIST实现CNN模型

    手写字体识别是一个很好练习CNN框架搭建的数据集 下面简单讲述一下整个模型构建的思路 整个模型通过两次卷积 两次亚采样以及两次全连接层 整个结构比较简单 也易理解 其中 两次卷积层的大小都为5x5 过滤器分别为32和64个 为了不改变图片的
  • 【Docker】Docker 如何在容器内安装vi命令(vi不能使用)

    文章目录 1 背景 1 背景 mac下安装了docker 然后用docker 安装了grafana软件 然后进入grafana base lcc lcc prometheus docker exec it 4b5f517f4340 bash
  • 火车进站

    import java util 火车进站 1 先求出所有可能的出栈序列 不一定合法 2 判断出栈序列是否合法 3 对合法的出栈序列进行排序后输出 public class solution private static List
  • 密码学哈希函数

    哈希函数H使用变长数据分组M作为输入 生成定长结果h H M 这一结果也称哈希值 哈希码或散列值 好的哈希函数的特点如下 对大输入集合使用该函数时 输出是均匀分布的且是明显随机的 概括的说 哈希函数的主要目标是保证数据的完整性 在安全应用中
  • Visual Studio 2019 Community 版离线注册

    本文主要参考 https blog csdn net songfuliang2011 article details 102486451 Visual Studio 2019 Community 虽然是免费使用 但必须在线注册一个账号 否则
  • Spring Boot 事务详解

    自己学习事务做的笔记 方便记忆和复习 1 事务是为了解决数据安全问题而存在的 最经典的例子就是银行转账问题 A账户给B账户转账100元 A账户扣除100元后由于不可抗力因素导致程序中断 B账户没有收到那100元 A账户那100元凭空消失 肯
  • Ubuntu IDEA安装和配置以及eclipse下载

    Idea2022版本官网下载 https www jetbrains com idea download section linux sudo tar zxvf ideaIU 2022 3 3 tar gz C usr local sudo
  • 闲鱼玩法平台系列文章——双11实操篇

    背景 营销玩法是电商行业进行商品促销和用户增长的重要手段 上一篇中介绍了闲鱼的玩法平台 多啦A梦 本篇将介绍在该系统上承接的玩法 闲鱼作为闲置循环工厂也参与了大促 为了让更多闲置在闲鱼游起来 在商品侧设计了 转卖抽奖 活动玩法 为了能让更多