移动互联网实战--社交游戏的排行榜设计和实现(2)

前言:
  游戏领域, 特别是移动端的社交类游戏, 排行榜成为了一种增强体验交互, 提高用户粘性的大法宝. 这边讲述在不同用户规模下, 游戏服务化/游戏平台化趋势下, 如何去设计和实现游戏排名榜. 本文侧重讲解Nosql在游戏排名榜中的作用. 小编(mumuxinfei)对这块认识较浅, 所述观点不代表主流(工业界)做法, 望能抛砖引玉.

秉承:
  上一篇文章, 详见: 社交游戏的排行榜设计和实现(1)

进阶篇:
  随着数据量/并发量的上涨, Mysql集群也呈现了一些疲态.
  (1). 数据库分库分表后, 表间的join事实上失去了意义. 要join的表数据在不同的库中.
  (2). 数据库的读写性能很容易达到上限.
  如何破解:
  我们先回过头来看些表定义以及使用
  表tb_score使用user_id访问score得分,其实user_id相当于key, score相当于value. 因此可借助Nosql的持久化key/value系统去实现,redis/mongodb/leveldb/hbase, 这样无论在读写速度上, 还是在应用扩展性上,都获得了很大的提升.
  表tb_friend借助user_id来获取friend_id列表, 其本质相当于user_id为key, list<friend_id>为value, 而key对应value列表, 可借助redis(数据结构服务器),也可借助sorted key/value db系统. 这边我们选用sorted key/value db, 因其数据按key的顺序存储.
  sorted key/value db的特点是:
  (1) 支持key的前缀查找
  (2) 支持批量/范围查询
  我们可以如下好友列表的key/value格式

key => user_id:friend_id
value => score

  评注:
  key=>user_id:friend_id表示friend_id为user_id的好友.
  那我们好友列表的查询, 就演变为前缀为"user_id"的范围查询.
  系统演变: 关系型数据库mysql转化为Nosql系统.
  

缓存篇:
   分布式缓存, 永远是互联网界的狗皮膏药, 无论什么疼痛, 贴一下总有疗效. 缓存的引入也是见血封喉, 效果非常显著, 不过需要注意数据一致性问题. 不过互联网能忍受弱事务性/弱数据一致性(C), 而强调可用性和可扩展性(AP). 移动端游戏, 其实也是类似的执行策略(除了和钱相关的业务). 常用的缓存有memcache/redis, 这些都是hash型散列的内存缓存.
  简单的采用Key/Value, 而不采用redis的key/sort-list的方式.
  value为json格式的列表:

json格式的内容 [{‘user_id‘ : ‘score‘}, {‘user_id‘ : ‘score‘}, {...}]

  排名相对静止, 因此缓存系统能挡掉大部分的数据读.

  但是引入缓存以后,数据的一致性,如何去保证?
  模拟如下应用场景:
  1). 好友破了新的记录
  2). 新增/删除好友关系
  这些情况发生后, 会更新好友的排行榜. 需要更新缓存, 使得缓存和后端服务的持久数据保持一致.
  那么如何去实现?
  这边谈谈常见的三种思路
  1). 同步更新: 当好友添加/删除以后, 主动删除排行榜缓存. 而用户的分数创新高后, 主动遍历好友列表,通知删除相应的缓存.
  2). 异步更新: 当好友添加/删除, 或者用户分数创新高, 其投递一个事件到一个队列中, 有队列消费者做这个耗时的同步操作.
  3). 缓存定期删除: 设定缓存key的有效期ttl, 不关注好友添加/删除, 得分更新事件的发生, 允许数据的一致有一定的延迟. 
  这三种方案的优缺点, 可以对比如下:

  实时性 操作代价 扩展性
同步更新 最好 有副作用,嵌入好友添加/删除代码逻辑中, 响应变大 不好, 将来的好友添加/删除逻辑会越发的臃肿
异步更新 一般 影响小 好, 引入队列, 可以由不同消费端做不同的处理
缓存定期删除 一般 几乎无影响 ---

  评注: 通知排行版更新是个重操作,比较耗时, 同步操作会影响响应时间.
  对于游戏而言, 如果排行榜不是实时排名, 采用方案2/3, 都是可接受的. 对于方案3, 这种没心没肺的做法, 其实最简单有效了(个人观点).

服务/平台化
  当一个社交类App演化为一个平台时, 好友模块和游戏模块就自然分开了, 其数据库/Nosql系统逻辑上不在一块了,比如微信App, 其内部肯定把各类服务做了拆分, 其数据是彼此隔离的. 在这种服务/平台化的演进下, 好友特定的游戏排行榜, 又该如何破?
  我们假定如下的服务, 其交互流程如下.
  GameService/FriendService模块
  
  评注:好友更新事件主动触发Game模块, 代价也特别大(如之上所述). 同时也需要Friend模块添加相关的逻辑代码,这使得模块之间紧耦合了.
  借助队列, 采用异步的方式来实现. 这相当于在模块之间采用了观察者(Observer)模式, 事件的触发者只要简单的投递事件于(topic模式)队列中. 然后由需要关注该事件的服务模块主动去订阅它. 新模式转化为如下:
  
  评注: 通过队列异步化事件, 采用订阅的方式, 来实现解耦.
  服务平台化后, 这种做法, 在工业界常常被采用.

后记:
  本来只想写一篇文章, 关于社区游戏排行榜的设计的. 但发现内容有些长, 于是就拆分成了两篇, 里面的内容简单的涉及了一些, 并没有具体展开. 小编(mumuxinfei)对这块还是入门尚浅, 如果有什么不足, 希望能指正.

移动互联网实战--社交游戏的排行榜设计和实现(2),布布扣,bubuko.com

时间: 2024-11-05 12:30:20

移动互联网实战--社交游戏的排行榜设计和实现(2)的相关文章

移动互联网实战--社交游戏的排行榜设计和实现(1)

前言: 游戏领域, 特别是移动端的社交类游戏, 排行榜成为了一种增强体验交互, 提高用户粘性的大法宝. 这边讲述在不同用户规模下, 游戏服务化/游戏平台化趋势下, 如何去设计和实现游戏排名榜. 本文侧重于传统关系型Mysql的方案实现, 后续会讲解Nosql的作用. 小编(mumuxinfei)对这块认识较浅, 所述观点不代表主流(工业界)做法, 望能抛砖引玉. 需求分析 曾几何时, 微信版飞机大战红极一时. 各路英雄刷排名, 晒成绩. 不过该排名限制在自己的好友圈中, 而每个用户的好友圈各不一

游戏UI框架设计(五): 配置管理与应用

游戏UI框架设计(五) --配置管理与应用 在开发企业级游戏/VR/AR产品时候,我们总是希望可以总结出一些通用的技术体系,框架结构等,为简化我们的开发起到"四两拨千金"的作用.所谓"配置管理"是指一个游戏项目(软件项目),很多需要经常变化的需求或者数据,最好以配置文件的形式存在,从而代替"硬编码"方式.      这里笔者就对游戏产品中大量应用到动态加载的情形,开发出一套通用的配置管理(脚本)工具.该工具可以很方便的对于具备"键值对&

游戏开发与设计

最近大家对游戏设计和开发热情度很高,经常有小伙伴跟小编在后台聊游戏开发的书,这不,赶紧整理一下,嘿,游戏开发的书还真是不少,12本. 通读类 作者:加藤洁 译者:徐谦 书号:978-7-115-37581-0 定价:59.00 元 页数:264 揭示游戏逼真.流畅的秘密 42个编程实例,打通游戏开发的任督二脉 134张图解,清晰讲解游戏编程五大基本实现 <游戏开发的数学和物理>严格选取了游戏开发中最常用的数学和物理学知识,通过游戏开发实例,配上丰富的插图,以从易到难的顺序进行讲解.第1章到第5

移动互联网实战--资源类APP的数据存储处理和优化

前言: 对于资源类的APP, 其音频/图形占据了APP本身很大的比例. 如何存储和管理这些资源文件, 成了一个颇具挑战性的难点. 移动端的碎片化, 高中低端手机的并存, 需要开发者不光是具备基础的存储知识, 更需要基本优化的能力. 本文首先介绍手机硬件的基础, 后续会分别介绍存储方式, 资源打包, 最后以一个具体例子作结. 内容还是浅显, 望能抛砖引玉. *) 硬件基础 作为手机开发者人员, 你是否知道RAM/ROM/存储卡的区别? 而产商所宣传的运行内存, 机身内存又是什么? 1). RAM/

游戏UI框架设计(五): 配置管理与应用

游戏UI框架设计(五) --配置管理与应用 在开发企业级游戏/VR/AR产品时候,我们总是希望可以总结出一些通用的技术体系,框架结构等,为简化我们的开发起到"四两拨千金"的作用.所谓"配置管理"是指一个游戏项目(软件项目),很多需要经常变化的需求或者数据,最好以配置文件的形式存在,从而代替"硬编码"方式. 这里笔者就对游戏产品中大量应用到动态加载的情形,开发出一套通用的配置管理(脚本)工具.该工具可以很方便的对于具备"键值对"

献给chinajoy:社交游戏死期将至?

一个公认的事实是,社交游戏的生命周期平均只有6个月左右,快速的崛起和快速的没落,几乎成为了无论移动还是网页形态的社交游戏们一贯宿命.而社交游戏依然是中国游戏行业的宠儿,只是方向从网页转向了移动端. 文_张书乐 刊载于<创意世界>2014年8月刊 4月初,日本知名游戏厂商万代南梦宫(NBGI)副社长鹈之泽对外表示,PS4和Xbox One将逐渐改变日本游戏市场中社交游戏泛滥的状况.显然,鹈之泽并不是第一个预言社交游戏未来的"毒舌".在去年12月底以色列的一次活动上,现代MMO

这个必须有,用真实社交游戏遏制“蓝鲸”

要遏制"蓝鲸"这类死亡游戏带来的强迫症式体验,建议采取"以毒攻毒"的"替代疗法".比如让玩家在社交基础上获得更有成就感的游戏体验,真正达到治本的效果. 文/张书乐 人民网.人民邮电报专栏作者,著有<微博运营完全自学手册> 曾有人总结过玩家患上游戏强迫症的状态:套装.成就全收集:地图.场景全探索:射击游戏打了两枪就换子弹:地图上的箱子必须全部开启:将NPC全部对话一遍:一分钟一存档:精心创造一个独特角色:场景内物品全破坏:见到新游戏就下

《游戏脚本的设计与开发》-(RPG部分)3.8 通过脚本来自由控制游戏(一)

注意:本系列教程为长篇连载无底洞,半路杀进来的朋友,如果看不懂的话,请从第一章开始看起,文章目录请点击下面链接. http://blog.csdn.net/lufy_legend/article/details/8888787 一,内容预览 算起来,游戏脚本系列文章已经很久没更新了,虽然该系列文章更新缓慢,但是确实还是能够帮到一些朋友,前段时间,仅仅因为做毕业设计通过邮件联系我的就有4位学生.有鉴于此,我还是挤点儿时间来继续慢慢更新一下了.另外,我想再声明一下,目前该脚本引擎还处在移植开发阶段,

移动互联网:社交的发展,人脉的扩展

随着移动互联网的发展,已经受到了越来越多的企业的高度重视.从移动互联网覆盖面的不断扩大.网速的提高及智能终端的不断配合发展,都创造了极大的发展空间. 在移动互联网开头,以SNS.微博及LBS等各式各样为代表的社交网络应用,为整个人类的交流沟通带来了深刻的变化,人们的交往更加便利,信息的传播更加迅速,这一切也为企业营销创造了极为有利的条件. 针对智能手机用户的研究发现,74%的人使用他们的智能手机访问社交网络,42%的人每天都会使用社交网络.根据无线互联网数据和移动数据采集合作伙伴,社交网络是首要