在移动互联网蓬勃发展的今天,用户的选择日益多元化,App市场的竞争也愈发白热化。为了在激烈的市场竞争中脱颖而出,提升用户获取效率并增强用户粘性,越来越多的应用开始采用积分兑换、抽奖等互动玩法。这些精心设计的运营策略不仅能够满足用户的参与感和成就感需求,更能有效促进社交传播,提升品牌忠诚度。通过持续优化和迭代,开发者能够在竞争激烈的市场中占据优势地位,实现用户的可持续增长和长期留存。
基于提升系统复用性和稳定性的考量,我们构建了一个统一的兑换商城中台系统。该中台旨在为各上游业务线提供标准化的积分兑换和奖励机制,使各类应用和服务能够快速接入并享受便捷的服务支持。通过这一中台架构,我们不仅实现了核心业务逻辑的集中化管理与维护,更为后续的功能扩展(如抽奖、彩票等多样化玩法)奠定了坚实基础,从而显著提升了开发效率和用户体验。
在用户增长和留存策略的探索中,增长团队先后推出了多种互动类玩法,如每日签到、星愿森林、心愿海洋以及早期的点鞋成金等。这些玩法通过积分或虚拟货币的积累,不仅增强了用户的参与感,也为用户提供了丰富的奖励机制。然而,随着玩法的多样化,如何高效管理这些积分或货币的消耗途径,成为提升用户体验和趣味性的关键。
面对这一挑战,团队意识到为每个互动玩法单独开发兑换功能不仅需要前后端的全面支持,还需重复搭建复杂的监控和预警系统以防范潜在的资损风险。这种重复开发的模式不仅成本高昂,而且难以保证系统的一致性和稳定性。因此,构建一个统一的积分商城,为各互动玩法提供通用化的兑换系统,成为了提升开发效率和确保系统安全性的必然选择。这样不仅优化了资源配置,也为后续的玩法扩展和用户体验升级奠定了坚实的基础。
在既有兑换业务的基础上,我们也成功沉淀并提炼了多个核心领域模型。后续基于这些通用化的领域模型,我们逐步探索并实现了多种新型玩法的快速落地,包括老虎机、盲盒以及抽奖券等多样化互动形式。
业务架构图
业务架构概述
业务架构主要分4级:
整体玩法总览
本次玩法迭代的介绍主要以积分兑换玩法为主,参考样式如下:
要想兑换具体的商品需要经过一系列流程,下图为兑换的主流程介绍,包含了用户从发起兑换到最终兑换成功或失败的流程。主要为用户选择某个奖品兑换需要处理的一系列业务逻辑。
如上文所说,在玩法层面,主要使用了设计模式中的模板模式,利用自己领域模型的能力,优先搭建好兑换玩法的骨架,比如有效性校验、库存扣减、奖品发放等逻辑,然后将一些关键步骤如前置自定义检查、扣减货币、回滚操作交由上游应用自定义实现。
玩法内置逻辑是由商城内部的领域模型实现,主要包含通用逻辑如下:
即下图灰色模块是由商城自己的玩法模板实现。
需业务方对接逻辑主要包含:
即黄色箭头及模块是由商城侧发起,调用上游接入应用,由上游应用处理相关逻辑,然后通知商城成功与否。
RPC调用迭代
1.0版本
在最初的版本中,黄色模块(如前置自定义检查、扣减货币、回滚操作)的实现方式较为繁琐。具体流程如下:
这种实现方式存在以下问题:
2.0版本
为了减少商城侧的开发成本,我们借鉴了Java的SPI(Service Provider Interface)概念,对RPC调用进行了优化。具体实现如下:
这种实现方式带来了以下优势:
通过这种优化,我们不仅实现了RPC调用的高效复用,还为未来的业务扩展和系统优化奠定了坚实的基础。这种模块化、可配置的设计理念,不仅提升了开发效率,还增强了系统的灵活性和可扩展性。
库存设计迭代
一开始库存只有每日及总库存的概念,实现也比较简单。为了保障库存扣减的并发安全,使用Redis作为库存的存储。具体的库存扣减则通过提前设置好Redis值并不断扣减即可。由于Redis的单线程特性,也不用担心并发重复扣减的风险。Redis一直扣减直至数值小于0就表示库存已被耗尽。
rest, err := redis.decr(key)if err { ... return err}
if rest < 0 { return limitErr}
而后需求迭代中出现了分时间段库存,每天需要分成多个时段来分配库存,每个时间段的库存如果未被耗尽会累积到下一个时段。这个时候通过简单的Decr命令就不能满足需求了。
考虑到实现成本,我们选择了方案二。具体逻辑如下:
为了解决并发问题,我们引入了Lua脚本,确保库存扣减的原子性。
LUA脚本伪代码:
# KEYS[1] 为 redis的key# ARGV[1] 为 提前算出的剩余未释放库存# return的值 < 0 代表库存扣减失败local _args1 = ARGV[1]local stock = redis.call('GET', KEYS[1])if stock < _args1 then return -1else local rest = redis.call('DECR', KEYS[1]) return restendreturn -1
奖品横向迭代
商城内部的奖品都统一维护在奖品库里,每个类型的奖品都有通用属性和扩展属性,同时不同的奖品背后对应着不同的资产,需要有独立的发奖逻辑(资产发放)。因此每增加一个类型的奖品,不仅需要增加奖品类型的枚举,也需要对接下游资产的发放功能。
商城从一开始便不断的在新增不同类型的奖品,从优惠券、代金券、津贴,到后面拓展出现金、虚拟奖品、道具等奖品。
而一些特殊的奖品,比如抽奖券,单独实现一个发奖逻辑就不能实现一个完整功能,为此我们还特地拓展出抽奖券玩法。具体玩法是:用户需要在开奖前获得抽奖券,这时会发放一个抽奖码给用户,我们会在指定时间根据规则进行开奖并通知获奖的用户。这里除了发放抽奖券的逻辑之外,我们还需要一个独立的开奖功能。
开奖流程如下图:
抽奖券的玩法迭代:
抽奖券玩法的核心在于开奖定时任务的逻辑,这类抽奖券活动不同于奖品兑换,单次活动可能有百万人参与,一万人中奖的情况。那么这样开奖Job的实时计算量就过于庞大了,测试环境按照这个量级进行开奖的话,耗时就已达到10多分钟之久。这个时长对于开奖脚本来说是不可接受的了,不仅用户体验达不到预期,而且时长太长,这段时间如果服务一旦出现其他情况(如新功能部署、容器节点被调度等)中断开奖流程更是会阻塞流程。
为此我们做了以下迭代优化:
最终效果:经过以上优化,正式版上线时,100万人的开奖时长从10多分钟缩短了30倍,仅需20秒即可完成开奖。这不仅大幅提升了用户体验,还增强了系统的稳定性和可靠性。
兑换防刷迭代
针对于防刷策略,项目从最开始只是通过接口验签及H5参数加密进行防控,但这种方式的破解成本比较低,也很容易被黑灰产刷接口。到后面我们便系统梳理了从业务层、接口层及黑灰产防控三方面对代码进行加固。
项目稳定性建设
商城作为一个潜在的资损高危区,在稳定性建设上投入大量资源是必要的。本文我们首先聚焦于问题发现及应急止血方面的工作,包括通过监控和告警快速发现问题,以及通过一键止损开关及时对发生异常的业务进行熔断。
监控告警
在监控告警方面,我们采用了多种技术手段来确保系统的稳定性和及时发现潜在问题:
业务监控组件:对于一些明细数据的同环比对比,我们使用了得物通用的业务监控组件。这种组件能够实时监控业务数据的变化,帮助我们快速发现异常情况。
Prometheus SDK埋点:对于一些需要分位数统计的数据,我们使用了Golang的Prometheus SDK进行埋点,并统一收集上报。
最终这些数据统一接入到增长的监控大盘中,能够清晰地看到各个接入方实时的访问数据、兑换数量及面额等。
告警配置:根据采集到的数据,我们根据规则指标制作了各类告警通知,确保在异常情况发生时能够及时响应:
一键止损开关
为了在发生异常时能够快速响应,我们引入了一键止损开关。这个开关能够在检测到异常情况时,立即对相关业务进行熔断,防止资损进一步扩大。通过这种机制,我们能够在最短时间内控制问题,减少损失。
抽奖组件搭建器
为了进一步提升抽奖玩法的易用性和灵活性,我们与前端团队联合打造了可视化的H5抽奖组件。该组件基于商城中台,提供了完整的抽奖解决方案,运营人员只需按照SOP文档进行配置,即可快速接入抽奖玩法并投入使用,真正实现了抽奖玩法的“开箱即用”。
产品特性:
部分组件样式如下,也支持在可视化的H5搭建器内自定义组件样式。
在抽奖组件的设计中,抽奖次数的获取是一个关键环节。最初,这一功能完全依赖于业务方自行实现,这导致只有已经接入过商城玩法的业务方才能使用H5的抽奖组件。为了提升组件的通用性和易用性,我们进行了以下优化:
引入增长的任务中台
为了简化抽奖次数的获取流程,我们引入了增长的任务中台。通过这一中台,用户可以完成配置的指定任务来获得积分,这些积分可以直接用于参与抽奖。
打造简易的积分系统
我们打造了一个完整的积分系统,实现了从获得积分、消耗积分到领取奖励的闭环流程。具体实现如下:
这种闭环流程的设计带来了多重优势:
本文讲述了增长兑换商城整体的业务框架及部分功能的实现细节。兑换商城作为一个中台,承接了不同上下游提出的需求,很多功能的实现都需要考虑到通用性及拓展性,而一些复杂需求或功能的实现,是否会加重配置的难度,影响后续业务方的接入成本,都是需要在项目迭代中不断思考的问题。不仅如此,在迭代过程中的稳定性保障也会是商城自始至终的基本要求。
对于兑换商城之后的规划:
文 / 麦饼
关注得物技术,每周更新技术干货
要是觉得文章对你有帮助的话,欢迎评论转发点赞~
未经得物技术许可严禁转载,否则依法追究法律责任。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有