前言
  春节快到了, 今年的互联网红包大战打得特别的火热.
  阵容强大, 腾讯微信/手Q, 阿里支付宝, 新浪微博, 还有千呼万唤始出来, 犹抱琵琶半遮面的百度钱包.
  类型多样, 有秒杀型的红包, 如微信的摇一摇, 支付宝的"打地鼠", 也有常规红包, 如支付宝新春红包.
  与去年的一家独大相比, 今年是你方唱罢我登场, 各领风骚数十载.
  对于我个人而言, 印象最深的不是戳破手机屏的"打地鼠", 而是接龙红包, 本文尝试去分析接龙红包背后的技术实现, 以及接龙红包本身所隐藏的强大社交性.

游戏模型:
  让我们先来阐述下接龙游戏怎么玩?
  1). 大财主发放某个特定数值的红包
  2). 好友猜测该数字, 若猜中则平分红包,若失败则收敛并继续传递下去(接龙)

  一图胜千言,大财主发放了66块的红包, 由3个好友分支尝试猜测该数值.
  1). 小狗旺旺, 刚要猜的时候, 却发现慢了半拍, 接龙游戏已结束
  2). 小红猜测失败, 但没有继续传递下去
  3). "斗地主联盟"经过两轮收敛猜对了数值
  因此该接龙游戏的优胜者是"斗地主联盟", 其接龙传递链上成员共享奖金, 如66元的红包, 每人各得33元

  当然在一次接龙游戏中, 一个用户只能参与一次, 这样接龙游戏的图模型具备如下约束:
  1). 不能构成环
  2). 用户节点不能同时出现在2个及以上的子树分支中

  结合简单示例, 我们可以最终得出接龙模型为树结构. 而且其树结构有如下特征:
  1). 节点分支多, 好友社交关系决定
  2). 树深度浅, 二分逼近收敛快, log(n)指数 (100块, 最多需要7次)
  3). 向上回溯,树节点只需维护父节点, 不需要维护子节点

架构设计:
  如何选用合适的存储来维护该树结构,并完美的支撑其业务需求. mysql,key/value系统, 还是自定义存储结构?
  其实我们不用烦恼了,支付宝已经给了明确的答案.
  
  对, 你猜得没错,这就是key/value系统.
  让我们来简单分析下, 为何key/value系统是最适合的存储技术.
  1). 接龙游戏本身的树节点本身是松散自由的, 每个节点都是一个信息入口
  2). key/value能快速访问各个树节点
  3). key/value读写性能优异

  对于所发的红包,我们还是采用mysql表来存储:

  对于接龙的用户而言,采用分布式的key/value来存储,假设这边采用leveldb.
  key为接龙的数字, 用整数表示
  value采用protobuf格式

message tw_envelop {required int32 user_id = 1;            // 当前节点的用户required int32 type = 2;         // type表示用户性质, 0:主人, 1:接龙者required int32 envelop_id = 3;   // 红包idrequired int32 pioneer_key = 4; // 承接的上一个接龙keyrequired int32 lower_val = 5;    // 当前接龙红包数值的下限required int32 upper_val = 6;    // 当前接龙红包数值的上限
};

  key/value系统维护的树结构, 可以用下图来描述:

  对于每个接龙游戏只允许用户参与一次, 这种情景限定如何实现呢?
  其实这类去重问题很普遍, 解决的技术手段也容易,这边采用最简单的key/value去重即可.
  key的设计如下:

envelop_id:user_id

  注: envelop_id为红包id, 而user_id则为实际的用户帐号

  抛开树形结构如何去存储的问题后, 我们来看看, 什么是红包游戏最核心的技术呢?
  口令ID生成器, 如何保证id生成是唯一的, 另一方面保证ID生成没有规律.
  这边就不再具体展开, 但这个技术问题, 是有一定挑战性的.

挑战:
  接龙游戏当前所遇到的问题, 我觉得是安全问题, 随意输入口令是否存在窃取他人红包的风险. 技术本身反而是简单的.

总结:
  不管怎么说, 支付宝的红包(特别是接龙红包)无疑是成功的, 借助社交(微信)来做病毒式传播, 起到了很好的效果. 本篇文章, 是个人对接龙红包实现的理解, 有不足之处, 还请轻拍. 如有机会, 让我们谈谈秒杀型红包的实现。

写在最后:
  如果你觉得这篇文章对你有帮助, 请小小打赏下. 其实我想试试, 看看写博客能否给自己带来一点小小的收益.

  

转载于:https://www.cnblogs.com/mumuxinfei/p/4290576.html

浅谈接龙红包的技术实现相关推荐

  1. 浅谈GCC预编译头技术

    浅谈GCC预编译头技术 文/jorge --谨以此文,悼念我等待MinGW编译时逝去的那些时间. 其 实刚开始编程的时候,我是丝毫不重视编译速度之类的问题的,原因很简单,因为那时我用BASICA.后来 ...

  2. 浅谈云计算和大数据技术

    浅谈云计算和大数据技术 背景: 随着计算机技术的发展,数据量日益增长,现有技术也很难满足业务的发展需求,在代码的层层迭代和优化之后,还是很难满足数据的增长需求,迫切需要一项新的技术来从事数据计算,因为 ...

  3. 浅谈存储重删压缩技术(一)

    浅谈存储重删压缩技术(一) 作为一个做企业存储市场的存储人,最近两年我不断被重删压缩撩拨着.对于重删压缩这个技术的好坏,真实需求还是伪需求大家看法不一.今天我就只能谈谈我个人的看法.更多观点请关注&q ...

  4. 计算机网络入侵技术初探论文答辩,浅谈关于计算机网络入侵报警系统技术的研究.doc...

    浅谈关于计算机网络入侵报警系统技术的研究.doc 浅谈关于计算机网络入侵报警系统技术的研究 摘 要:计算机在虚拟世界中的合法性制约着它的前进的脚步,所以渐渐的虚拟警报的构造变得复杂,但是风险性也变得更 ...

  5. 浅谈 SOLIDWORKS 的同步建模技术 | 产品探索

    浅谈 SOLIDWORKS 的同步建模技术 | 产品探索 SOLIDWORKS 可以用"同步建模"的方式进行产品设计,在 SOLIDWORKS 中这种建模方式我们称之为直接编辑.直 ...

  6. 浅谈当前的手机开发技术

    浅谈当前的手机开发技术 作者:陈跃峰 出自:http://blog.csdn.net/mailbomb 随着3G时代的到来,手机软件开发成为了一个热门的软件开发技术,但是由于手机种类等一系列的原因,使 ...

  7. 浅谈用户密码保护与相关技术

    浅谈用户密码保护与相关技术(上) 一.  全文涉及 上篇:哈希,彩虹表 下篇:加盐加密,慢哈希,非对称加密与HTTPS 二.  主题引入 2011年12月21日,CSDN后台数据库被黑客恶意发布到互联 ...

  8. 浅谈计算机科学与现代教育技术,现代教育技术浅谈论文

    正确.充分地认识现代教育技术在促进教育变革方面的作用和功能,有利于进一步推动教育技术在教学实践中的应用,有利于推进教育教学改革的深入发展.下面是学习啦小编给大家推荐的现代教育技术浅谈论文,希望大家喜欢 ...

  9. 2019FME博客大赛——浅谈FME在国土空间规划技术服务中的实践和应用

    参赛单元:传统GIS数据处理 作者:施仲添 单位:杭州市城市规划信息中心(杭州市地理信息中心) [摘要] 随着规划行业对空间数据的利用分析和需求日益增加,在日常的国土空间规划技术服务中涉及空间数据的情 ...

  10. 浅谈晏殊几何学知识图谱技术

    <[花间流风]神国?净土:尘世,姿与心的人和守则,靖逸杏>第四节 人生意气场采用"几何公理体系的严谨性"检验"气质砥砺学因果论断过程推理逻辑"的普适 ...

最新文章

  1. 华为程序员发现孩子不是自己的!怒提离婚!但老婆只要房子车子!不要孩子!绿他的竟然是个酒吧混混!...
  2. 10.6 捕获处理异常
  3. MyBatis Plus——启动/关闭控制台LOGO
  4. Ibatis XML 配置文件注释引起错误及解决方案
  5. 使用parted划分GPT分区(转)
  6. wxpython textctrl_wxPython TextCtrl类
  7. 3.3.1网络原理数据链路层之差错控制(检错编码和纠错编码)->(奇偶校验码、CRC循环冗余码、海明码)(转载)
  8. dskinlite(uieasy mfc界面库)使用记录3:绘制动态元素(按钮控件通过隐藏方式修改图片显示)...
  9. LSJ_NHibernate第一章 NHibernate介绍
  10. Selenium笔记:PO模型
  11. [转载] python学习-基础教程、深度学习
  12. 阿里大淘系模型治理阶段性分享
  13. 虚拟光驱下载安装和使用,Windows系统如何直接打开iso文件
  14. android系统内置第三方app
  15. edge浏览器开启ie兼容模式
  16. TypeScript 中括号用法笔记
  17. history linux 位置,Linux基础知识之history的详细说明
  18. 天下文章一大抄,你抄我来我抄它
  19. 22春天津大学《国际经济法学》在线作业二
  20. 无源波分和彩光模块_波分光模块详细介绍

热门文章

  1. 编译OpenCV:cv2.cpp:23:33: fatal error: numpy/ndarrayobject.h: 没有那个文件或目录
  2. 无锡硕放机场建议改名为金苏机场
  3. jpeglib画质的代码分析
  4. 吾有个怪习惯:看书时经常把ABC结构的词看成ACB
  5. using编译指令和using声明比较
  6. python smooth函数_利用Python程序完成ABAQUS中的一些重复性操作
  7. linux系统vi编辑器按esc没反应,关于ubuntu14.04版本vi编辑模式按下ESC无法回到一般模式的问题...
  8. apache评分表的意义_APACHE-II评分表
  9. 计算机怎么给课程表涂颜色,Excel做自动统计课时数的彩色课程表
  10. linux 修改文件夹权限_Linux新手非常实用的20个命令