大规模游戏平台云缓存技术研究与实践
发布时间:2017-12-20
陈杰1,庞涛2,付志鹏1,唐勇1,杨维云1
(1. 炫彩互动网络科技有限公司,江苏 南京 210029;
2. 中国电信股份有限公司广州研究院,广东 广州 510630)

【摘要】传统的缓存处理机制难以满足互联网业务高并发、高性能的需求,因此提出了动静结合的多级云缓存架构,可支持大规模数据存储和快速检索查询服务,并基于一致性哈希算法,实现了对多分布式服务节点的统一管理和调度效率提升,最后通过在大规模游戏业务平台开展的实践,验证了平台性能和访问速度的大幅提升。
【关键词】大规模游戏平台    云缓存    数据存储

1   引言
    近年来,以游戏、视频为代表的移动互联网应用高速发展。与传统电信应用相比,大型移动互联网应用具有以下特点:
    (1)高并发、大流量:数以亿计规模的高并发用户,长时间的大流量访问;
    (2)海量数据:存储、管理海量数据,需要使用大量服务器;
    (3)用户接入环境复杂:面向全球用户提供服务,用户网络环境千差万别;
    (4)短时间用户增长迅速,急需大量资源;
    (5)产品复杂多样,需求快速变更。
    为了满足多网络用户快速接入需求,提升用户体验,传统电信业务平台多采用内容分发(CDN)缓存机制。但动态缓存数据管理较为复杂,缺乏灵活性,无法满足快速增长和超高的游戏业务峰值并发服务需求。
    基于此,本文接下来将提出动静结合的多级云缓存框架,以适应大规模移动互联网业务平台的承载需求。在传统CDN文件缓存基础上引入Varnish静态缓存、基于MAP的本地动态缓存和Redis远程动态缓存,构建多级云缓存,并通过实践证明其实现了高性能I/O吞吐能力,减少了服务器和核心数据库的交互次数,提高了接口访问速度和并发量。同时将缓存处理逻辑封装,面向应用层业务需求统一开放接口,提高了上层应用开发效率。

2   动静结合的云缓存架构
    常见的互联网业务多采用分布式的内容分发(CDN,Content Delivery Network)缓存机制。在中国电信、中国移动、中国联通网络中部署服务器节点,以某一节点为中心,实现多节点间的数据共享和同步。不同网络的用户可以就近接入CDN节点,快速、高效地获取应用内容。如图1所示:
 
图1    基于CDN机制的缓存架构图


在实际业务运营中,传统的CDN缓存机制对动态缓存数据管理较为复杂,缺乏灵活性。尤其是新业务上线时,需要大量人力检查并修改缓存文件,给业务快速部署和服务灵活提供带来了严重的挑战。

    针对上述问题,本文提出了动静结合的云缓存架构,以满足高并发的移动互联网业务承载需求。该架构具备横向扩展能力,相对上层业务系统透明,可根据业务的发展,平滑扩展存储性能与容量,动态满足业务需求,有效地提升系统资源利用率。系统架构如图2所示:
 
图2    动静结合的云缓存架构图


中心数据库采用关系型数据库MySQL和非关系型数据库MongoDB。本地动态缓存采用MAP内存处理技术,远程动态缓存采用Redis技术;本地缓存和远程缓存之间通过事件驱动模型实时更新和维护数据;采用XML标记语言,以标准格式封装缓存处理逻辑以及各种查询、数据同步、容灾备份等统一数据服务的业务逻辑,并以Java接口方式封装成API,提供给相关业务统一调用。各种业务调用缓存机制后,输出结果采用静态缓存Varnish技术进行加速,以提升效率。

    通过对缓存处理逻辑的封装,为应用业务层提供了统一的存储访问接口,使开发人员从繁杂的缓存维护同步工作中解脱出来,专注于业务开发,从而提高了开发效率,减少了由于缓存数据维护不一致而导致的系统漏洞和缺陷,提升了系统稳定性。

3   关键技术方案
3.1  静态缓存和动态缓存机制
    在静态缓存方面,采用高性能的开源HTTP加速器Varnish技术,缓存静态页面和一些重要业务的静态数据。Varnish基于内存进行缓存,性能好,单台服务并发可达到5000次/s。采用反向代理web容器定期维护缓存数据。当Tomcat服务器出现故障时,可自动切换到Varnish,提高了平台的稳定性。
    在本地动态缓存方面,将用户访问频繁的静态数据备份到本地基于MAP的内存缓存中,以减少网络I/O的消耗,提高平台的并发量。
    本地缓存中各集群节点的数据维护采用组播技术实现。所有节点均为对等模式,节点自动发现,不存在主节点选举。每个节点都维护一份集群成员表,新节点加入时,通知集群其他成员更新成员列表,以便每个节点都能及时更新成员列表。如图3所示,节点1、节点2、节点3分别维护一份成员列表,定期通过组播更新自己节点消息,当节点4新加入集群组时,向节点1、节点2和节点3组播自身的节点消息,节点1、节点2和节点3接收到该信息后,将节点4加入到其成员列表中。同时,节点1、节点2和节点3也不断向集群发送其节点消息,节点4接收后将依次更新成员列表信息,最终达到四个节点均拥有四个节点成员信息。当任意机器数据发生变更时,则将变更数据发送给其他机器,保证各机器数据的一致性。
 
图3    动态缓存实现机制


远程动态缓存采用Redis技术。与Memcached类似,Redis是一个key-value存储系统,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set:有序集合)和hash(哈希类型)等。

    游戏业务实践中,Redis缓存采用主从读写分离技术。在大并发业务需求(如游戏APP集中下载、活动集中参与等)时,使用多台服务器作为Redis服务器,并采用“多级服务器集群架构”和“主从模式”对服务器设备进行管理。设定一个主服务器负责数据写入,多台从服务器负责数据读取。主服务器和从服务器之间通过Redis server端实现数据同步。各Redis服务器也采用分布式,Redis客户端负责选择连接到哪台服务器,无需人工干预。
    通过分级动态缓存技术,极大提升了平台的服务能力。游戏业务单台服务器并发可达到7000次/s,命中率可达90%以上。
3.2  本地缓存与远程缓存机制
    本地缓存保存一些常用的基本数据和少量列表信息,以减少调用远程缓存服务器及数据库的压力。同时为了控制内存的占用量,在处理之前需要评估缓存信息大小。当缓存的信息总量超过预设的内存大小时,使用近期最少使用(LRU,Least Recently Used)算法,对内存中缓存的信息进行替换。目前仅这一层的访问命中率可高达90%以上,保证了接口的整体访问速度在200ms以内。
    远程缓存主要用来保存数据库各表之间的对应关系,以代替传统的数据库查询功能,实现业务快速查询和处理响应。
    为了实现缓存处理逻辑层的统一封装,需要将多台机器的缓存信息同步,实现本地缓存与远程缓存之间的信息更新。在游戏业务实践中,通过事件驱动模型实时更新/维护缓存数据。具体实现过程如图4所示:
 
图4    云缓存信息更新机制

    数据查询采用本地缓存、远程缓存、核心层本地缓存、核心层远程缓存、数据库的查询流程。在远程缓存没有命中时,将查询中心数据库,查询结果将保存在本地缓存和远程缓存中。在数据保存在本地缓存后,将以异步的方式发送给其它节点机器实现同步。
    采用了创新的云缓存框架后,平台业务应用接口最高不超过300ms,90%在100ms以内,缓存刷新延迟不超过500ms。
3.3  改进型的一致性哈希映射算法
    普通的Hash方法在数据缓存处理时存在问题。例如,以key%N的方式将数据映射到具体的服务器物理节点上,其中key是数据的key,N是服务器节点数。如果有一个机器加入或退出这个集群,每一个服务器缓存节点都必须进行数据迁移,数据的缓存命中率将大幅降低。
    本文采用改进型的一致性哈希算法,以降低缓存节点变化对缓存命中率的影响。如图5所示,实际部署4个物理节点,将数据按照key的哈希值分布到100个虚拟节点上,以N=Hash(key)%100的方式计算分配每个物理节点,配置hash值权重。N为0~19,则数据落到Node1节点上;N为20~39,则数据落到Node2节点上;N为40~59,则数据落到Node3节点上;N为60~99上,则落到Node4节点上。
 
图5    哈希(hash)算法机制


如图6所示,如果Node4节点负载过大,则添加Node5节点,调整中只会影响Node4节点的缓存命中率,从而实现缓存节点平滑地添加与删除。

 
图6    哈希(hash)算法机制(增加节点)

4   应用效果
    本文的研究成果在中国电信爱游戏业务平台中开展了应用实践。
    在未采用云缓存机制前,爱游戏业务采用互联网传统处理机制,利用关系型数据库保存业务的基础数据、用户访问日志以及经营分析数据等。在实际业务运营中,该架构无法满足高并发、高性能要求。以用户下载为例,缓存的命中率较低(仅为30%),实测的平均下载速度小于100kb/s,请求返回延时较大,特别是在服务高峰期,经常出现服务超时、连接不成功等问题,用户体验较差,流失率增高。
    在采用本文提出的云缓存架构进行平台升级后,静态缓存命中率达95%,动态数据缓存命中率达90%,中心数据库仅需处理其中的5‰业务量。中心数据库无需直接面对用户请求,服务能力提升了200倍,大幅提高了整个系统的吞吐量。对于一个复杂的列表页面请求,原机制下响应时间需800ms左右。升级后命中一级缓存(静态页面),响应时间不到10ms,加快了数据访问速度,提升了用户体验。

5   结束语
    随着移动互联网业务的快速增长,迫切需要使用缓存技术优化提升平台性能。本文利用Varnish、Redis等开源互联网技术,构建了动态缓存和静态缓存相结合、本地缓存和远端缓存相结合的多级云缓存体系,可大幅提升业务平台承载能力,满足海量数据存储和用户高并发量访问的需求。研究成果已应用于爱游戏平台优化升级,提高了缓存命中率、减少了中心数据库的I/O访问压力、降低了用户的访问时间、提升了用户体验。

参考文献:
[1] 邱祝文. 基于redis的分布式缓存系统架构研究[J]. 网络安全技术与应用, 2014(10): 52.
[2] 王心妍. Memcached和Redis在高速缓存方面的应用[J]. 无线互联科技, 2012(9): 8-9.
[3] 曾泉匀. 基于Redis的分布式消息服务的设计与实现[D]. 北京: 北京邮电大学, 2014.
[4] 秦秀磊,张文博,魏峻,等. 云计算环境下分布式缓存技术的现状与挑战[J]. 软件学报, 2013,24(1): 50-66.
[5] 贺琛,陈肇雄,黄河燕,等. Web缓存技术综述[J]. 小型微型计算机系统, 2004,25(5): 836-842.
[6] 赵玉伟,赵小雨,乔木,等. 缓存技术在B/S架构信息系统中的应用[J]. 计算机工程, 2008,34(1): 233-235. 
[7] 杨传栋,余镇危,王行刚,等. 一种流媒体CDN的内容部分推送策略[J]. 计算机工程与应用, 2007,43(25): 162-164.
[8] 周江. 面向大数据分析的分布式文件系统关键技术[J]. 计算机研究与发展, 2014(2): 382-394.
[9] 戴伟,胡鹏. 基于缓存回收的成本节约云服务算法研究[J]. 计算机应用研究, 2015, 32(10): 3138-3141.
[10] 方晖. 基于能效控制的DctAF框架式云缓存技术[J]. 科技通报, 2014(2): 77-79. ★

作者简介 
陈杰:高级工程师,现任职于炫彩互动网络科技有限公司,研究方向为互联网大型业务平台技术架构、大数据技术框架、通信技术和移动互联网等。 
庞涛:工程师,现任职于中国电信股份有限公司广州研究院,主要研究方向为大数据、业务平台承载技术、云应用技术等。 
付志鹏:工程师,现任职于炫彩互动网络科技有限公司,主要研究方向为大数据、移动互联网等。
请输入评论内容
登录注册访问网站首页。

copyrights @ 2013  版权所有:中国电子科技集团公司第七研究所《移动通信》杂志社

粤ICP备17061932号-2     粤公网安备 44010502000212号