本篇分为代币的定义、代币服务的构建、代币业务上的落地三大部分,不感兴趣的部分可以直接跳过。
什么是代币?
盘一盘定义
先说虚拟货币:虚拟货币是指非真实的,非当局发行,不具有法偿性、强制性等货币属性,不能且不应具备流动性。
所谓代币可以说是虚拟货币的一种具像化实现:特指在限制范围内使用,不具备通货效力的物品。常用的筹码、Q币、快币、积分、游戏币,各种游戏中的“金币”、“银币”、“元宝” 其实都可以简单粗暴的理解为代币。通常来说,代币会作为凭证来使用服务、换取物品等,在计算机或者互联网时代到来之前代币通常由具备防伪标的金属或者塑胶币为主。目前代币主要的存在形式已经演变成了一串数字:当前的代币余额。
ps:这里要区分下数字货币,数字货币是以数字形式呈现的货币,是当局发行、具备流动性的、承担了实体货币相同职能的货币。
image.png
为何需要代币
在代币举的例子中,大家应该已经体会到了为什么需要代币。通常来说,除了游戏中模拟交易、储蓄等,代币作为一种凭证,在企业服务中代币往往是针对特定领域价值的载体,比如积分兑换、服务充值卡消费。基于这些手段我们可以极大程度上:预先拉取现金流、最大程度刺激复购、折扣拉新等。
在营销活动中,代币扮演的角色往往是后者,表达方式通常为各类福气值、金币、助力值等等,通过游戏或者业务任务等获得代币,使用代币完成针对商品或者权益的兑换。其中现金红包其实也是一种1:1的特殊代币,当这些“现金红包”没有真正进入银行认可的持牌机构前都可以粗暴的认为是一种代币。
关于记账
在对代币的概念有一定程度上的了解后,再来看下对于代币底层的数据,维护一个用户代币底层数据的账务模型,先来看下最基础的账务体系。
账务实质上属于会计范畴的内容,这部分不太专业,大体描述一下:记账方式分为单式记账、复式记账法。
复式记账:常见的:借贷记账法(有借必有贷,借贷必相等)、收付记账法、增减记账法,支付系统,支付、信贷系统通常是这种。
单式记账:针对余额账户进行账务记录,反应某一值的增减变化趋势,没办法进行总体试算平衡,常见的积分等代币账务通常是这种模式。
很显然我们所说的代币,由于机会没有流动性,可以大致的判定为纯余额类账户,单式记账维护一个余额,提供增减能力就足够了。
ps:作为非会计专业,尤其是产品或者技术想透彻点理解账务体系,不妨从经典的支付系统入手,一个支付流程资金流是如何转的、系统交互流程是怎样的,其中涉及到的结算账户、备付金账户、各类内部户、所谓的“余额账户”、清分-结算过程 这里就不展开描述了,后续会写一篇关于业内常见支付系统的长文。
对于活动代币场景的账务设计
盘了这么多概念性的东西,说点干货,针对活动场景下的账务模块该如何设计,这里主要从领域对象、逻辑视图、处理视图描述,对于开发视图、部署视图每个公司的技术集&部署架构都不太一样。
领域模型
一个用户的余额,可以通过accountNo(账户id)、balance(账户余额)、freezeAmount(冻结金额)、coinType(代币种类)、accountTime(账户时间)等属性构成。对外暴露增、减、冻结、解冻等领域服务,以此构建最基础的账户余额记账能力。
image.png
逻辑视图
从实现角度来看,主要分为四层,最底层dao层向上提供最原始的数据服务,主要包含:账户余额表、账户动帐流水表、冻结表、账户关系表等。
service集成dao层能力提供对于单表操作的原子能力 比如余额增减、流水插入查询、冻结解冻等,领域服务层包装底层service能力对外提供标准的具备事务特性的增、减、冻结、解冻、其他复合指令及查询等能力,最上层接口层完成鉴权等合法性校验能力。
image.png
运行视图
对于写请求(incr、decr、freeze、unfreeze),首先会过一层合法性校验这部分处理如果IO较多会进行并发处理节省耗时,合法性校验完成后会进行账户的热点判断,如果是热点数据会进行专用热点处理逻辑(这块会单独说),过完热点处理逻辑后基于数据库事务完成余额表的更新,更新完成后事务结束,通过提交线程池完成余额更新消息的异步化发放,接收异步消息后完成余额流水表更新。并且消费余额表变动binlog 完成缓存的构建、二次检查流水表情况。
对于读请求(query-balance, query-journal-account) ,同样首先进行请求合法性校验,直接命中进程内loading cache进行查询(会依次进行缓存穿透)
image.png
实践过程中的难点
在营销活动场景下将上述该系统落地主要面临2个核心问题:
1、性能方面:热点账户问题
2、一致性方面:涉及其他系统时,数据一致性保证
热点账户问题
热点账户问题域是现成的,不妨直接套用。热点账户主要分为3类:热读、热写,而热写可以大致分为热增、热减。在支付场景下,这些情况都是存在的,并且已经有了相对完备的解决方案,对于活动场景下这些热点问题并没有那么的突出,但是在某些极端状态下仍然是存在的,具体来分析下:
1、活动的特点往往是曝光量极大,实际参与人数通常会有1到2个数量级的漏斗,这就造成了读远大写。
2、对于积分金币类扣减场景来兑换服务或者权益的过程主要来源人为点击,并且为防止作弊,对c接口通常有对于用户的频次限制,但用户动作频率不会很高。
3、对于增加场景,主要是用户行为触发,但不排除用户一个动作完成n多任务,并且任务完成成本比较低,可能存在集中增加代币余额的场景。
image.png
所以看下来:活动场景下的账户热点点问题主要是:1、读热;2、可能增热。
对于读热,系统从一开始就采用完全读写分离的方式,读前挡了n层缓存,可以很好的缓解读热的问题,对于缓存的延迟性,营销活动场景下是可以小时间片内可容忍的,并不像支付场景下那么强。
对于增热,上面热点处理部分采用的是合并入账的方式,识别出来是热点用户之后,该用户的增的写操作并不会直接入账,而是先进行一次insert,等insert的量到达一定程度(时间、数量)时对于这部分请求进行合并入账。
至此热点账户的问题就解决的差不多了,就场景来说如果没有像是支付场景下对公结算的场景,减热是很少出现的,如果出现了也不用慌,采用“子账户”拆热点就可以了,就是rebalance的过程相对有点费劲。
一致性保证
首先代币节点内部的思路是:
1、核心余额表起本地事务进行操作。
2、对于流水等可容忍延迟的数据进行异步持久化,并且binlog、mq两条链路尽可能保证数据不丢。
做到以上两点基本就解决了服务本地的数据一致性问题,但是对于代币服务作为参与者的场景,比如积分兑换券的场景,很容易出现部分失败:代币扣减成功、券发放失败等。
业界常见解决分布式数据一致性的方式通常有:
1、分布式事务(比如常见支付工具的支付系统)
2、建立唯一单号,围绕业务状态机,同步链路最大程度推至成功 + 对账补单
这里并不是支付场景,而且分布式事务的代价实在太高了(开发成本、性能成本),如果用分布式事务来解决实在得不偿失,所以这里用的是第二种方式:
首先发起节点批发唯一id(常见的雪花、segment、自增id都是可以的),然后建立同步调用链路上的状态机,并且设置状态机临界节点(节点前失败回放已执行部分、节点后失败补单后续动作),分布式服务节点内保证本地事务&幂等处理,最大程度上保证同步链路成功。出现数据不一致的情况,依靠对账补单,保证最终一致性。
回到业务
上面简单提到了营销活动场景下可以利用代币完成拉新、促转化等业务目标,这里就展开描述下,利用上面的系统我们可以来干啥,常见的场景有哪几种:
消费充值
如果通过现场直接支付的方式进行消费,如果不叠加其他权益的发放,复购率是比较低的,如果采用充值的方式 将现金转化为针对于服务或者商品的次卡、代币等(充值过程中进行一定程度的折扣即可),这样就完成了对于资金流的拉取,并且用户几乎百分百是会回来消费的,有助于养成消费习惯,并且这种模式还会节省之后交易发生时的操作成本,比较适合小型门店、某一垂直领域的营销方式。
image.png
会员积分
常见交易场景下的营销策略有:1、直接折扣;2、优惠满减;3、返现;4、优惠折扣 等几种方式。策略相对单一,往往需要把权益(定价策略、发放、核销)根据商品或者场景进行强绑定,而如果是使用积分来操作,相当于把承诺放在远期,给予了用户一种将来可使用的价值,至于价值当前的定价与未来的定价都是灵活可控的,营销初期大力度拉用户、后期适当调整定价都是可行的。不仅如此,历史获取积分数量还以作为权益定价依据。
image.png
兑换
兑换算是会员积分的一种核销策略吧,当然兑换的来源也不一定是会员积分,可能仅仅是某场活动中的一个助力值。兑换的好处主要是用于解决权益的获得&选择问题。
我们经常会批量发大量的权益给用户,这里经常会把整体的预算拆碎,每个权益的价值相对较小,这时用户面向权益时是不太感冒的,并且领取后也不一定会进行核销转化。换个思路,我们可以提高权益价值控制权益的发放量,让用户参与一些有门槛的任务获得代币,然后使用代币兑换自己感兴趣的权益。
这样的好处有:
1、高价值权益能增加营销活动的吸引力,噱头更大。
2、完成任务的过程增加品牌的了解程度,一种具备参与感的品牌营销。
3、过滤掉一部分本身就不会参与的用户,减少无效发放,选择兑换哪个权益的过程,也能留下用户的需求现场供分析。
在一些大品牌或者大厂的交叉营销场景下,这种方式是非常适合的。
image.png
现金红包
上面提到了红包本质上也是代币的一种,常见的现金红包的玩法儿有:
1、任务红包模式,得到一个红包,然后可提现至个人某支付账户。
2、冻结红包模式,给你一个噱头,一笔笔解冻一笔笔提现。
3、冻结红包模式,一个大的噱头,门槛解冻。
4、裂变红包模式
获得活动内现金红包时,实质上是代币账户完成了一笔增,或者一笔增并冻结,然后提现的过程完成真实支付账户的增(真实到账)、代币账户的减。
image.png
模拟交易
模拟经营,养成类游戏规则中作为支持,长线的互联网营销活动中比较常见。注意哈,对于代币进行市面流通,并对各类服务或者商品进行支付,账户之间随意转账,构建流动性通路,是不合法的。
代理计数
在一些复杂养成类活动中,通常有n多的属性值,这些属性值能进行转化,比如耗费多少体力达成某个目标获得现金,这种本质也是用户代币账户的一种变相的体现。
这一篇就先说这么多啦,下一篇:《通用奖励模型的建立》敬请期待
网友评论