大数据时代的Tcaplus游戏存储

2023-10-27

大数据时代的Tcaplus游戏存储

shiweizhang 2015-10-27 1.7k浏览

游戏开发数据分析场景

想免费获取内部独家PPT资料库?观看行业大牛直播?点击加入腾讯游戏学院游戏开发行业精英群711501594

摘要

       大数据具备数据量大,数据结构多样,处理分析耗时,可挖掘价值潜力大的特点。除了具备这些特点,大数据时代的游戏数据还具备如下特性:交互性强,社交互动活跃有的还打破了游戏分区隔离;数据更新频率与数据插入读取频率的比例相对大部分非游戏类互联网业务要大得多;记录条数很大但单条记录长度较小;数据按用户分布冷却而不仅仅按时间分布冷却;关于用户行为的数据大量而丰富,可被用于数据分析挖掘进而正面影响用户。

       Tcaplus是腾讯互娱研发部为游戏定制的云存储服务,本文介绍Tcaplus应对上述游戏大数据存储访问的相关技术思路。

 

方便无损的数据扩缩容

       不同游戏业务的数据规模增长方向通常是不同的也是很难被提前预测准确的,有的增长迅速需要扩容,有的保持稳定不需要扩缩容,有的走向衰落需要缩容。大数据时代的数据扩缩容是个常态,而且范围和粒度多样灵活,一个执行方便(包括自动化)、无损、快速的扩缩容机制显得很有必要。

       Tcaplus的数据扩缩容通过不停服数据搬迁实现。为了做到对业务访问无损的数据搬迁,搬迁采用分hash号段进行。在数据搬迁的过程中,对不处于搬迁hash号段里的数据的业务访问不产生任何影响;对处于搬迁号段里的数据的业务访问通常不产生任何影响但若被访问的记录恰巧还没有被搬迁到目的节点则会增加部分时延,产生部分时延的原因是对于这种极端场景会触发事务首先从源节点搬迁数据到目的节点再从目的节点处理数据访问请求并返回响应,对于这种极端场景虽然产生了部分时延但对业务访问来讲仍然是正常处理返回了响应可以说是无损的。数据搬迁的总体结构如下Figure01所示。

 

数据搬迁的总体结构图.jpg

Figure01

       从Figure01还可以看出,Tcaplus的数据搬迁支持不同节点配对并行进行,这相对串行搬迁调度可以大大提高数据搬迁的速度。Tcaplus系统做数据搬迁时尽量保留了数据的热点信息,即在源节点为热点的数据被搬迁到目的节点后优先存储在内存中。另外,Tcaplus的扩容缩容支持通过Web Portal调度执行以及查看执行状态,方便了运维人员操作。

      为了进一步适应大数据时代游戏数据的多样灵活的变化,Tcaplus在扩容缩容自动化方面未来将做进一步提升:自动发现待扩容对象并且从资源池中找到空闲资源作为扩容目标,自动生成扩容计划,只要运维人员从Web Portal点击确认按钮扩容事务便可自动开始执行;自动发现待缩容对象并自动生成缩容计划,只要运维人员从Web Portal点击确认按钮缩容事务便可自动开始执行。

 

异构数据兼容与软件兼容

       大数据时代的游戏数据格式多样并且处于不断变化之中,Tcaplus全面应对这种场景在不停服的前提下不仅做到业务数据不同格式兼容,也做到内部额外管理数据不同格式兼容,也做到不同模块软件的版本升级兼容,如下Figure02所示。并且,Tcaplus通过Api的自动重连机制实现不停服的tcaproxy软件升级,通过Tcapsvr Master-Slave热备机制实现不停服的tcapsvr软件升级。

异构数据兼容与软件兼容.jpg

Figure02

       关于业务数据不同格式版本的兼容,过去Tcaplus Api通过内置Tdr Version库实现字段添加字段有限修改的可兼容性,目前Tcpalus Api还通过内置Tdr TLV库实现字段删除的可兼容性。

 

Slave支撑实时与延迟数据分析

       大数据时代的游戏数据具备巨大的数据挖掘分析价值。

       为了性能和成本的考虑,Tcaplus系统在处理数据写请求时不需要等待数据同时落地到2个或以上的节点才返回客户端,数据只要成功落地到tcapsvr master便会向客户端返回数据写成功,后续tcapsvr slave有重试机制保证数据能够通过异步的方式被复制到Slave,根据外网实际统计Slave的数据落后时延通常在百毫秒数量级。Slave上的读写负载轻,为支撑数据挖掘分析提供了便利,比把数据先转换进入关系数据库再做数据分析更高效和节约成本。关于Slave支撑实时与延迟数据分析(离线数据分析属于延迟数据分析)的情况,如下Figure03所示。

Slave支撑实时与离线数据分析.jpg

Figure03

       Tcaplus的实时数据分析(非延迟数据分析)通过在Slave进程部署实时分析服务实现,这些实时分析服务以插件的形式工作于Slave进程的工作线程对业务写入记录做实时的字段解析和统计分析,实时分析服务甚至支持将业务写入记录实时旁路到游戏项目组的统计分析进程。

       Tcaplus的延迟数据分析通过如下两种方式实现:一是通过遍历Slave节点上的被Slave进程加载着的数据文件实现数据统计分析,Tcaplus底层数据引擎优先将key集中存储到内存区域并且key中带有记录最近被访问时间戳信息,这为快速遍历数据文件打下了基础;二是通过遍历冷备数据文件(离线数据文件)实现数据统计分析,这对于补充统计分析历史数据具有意义,而且该统计分析不占用Slave进程资源。

 

全方位负载均衡

       自动化的全方位负载均衡对于做好大数据时代的游戏数据存储尤其重要,否则会对资源造成巨大浪费甚至负面影响业务的正常数据访问。如Figure04所示,Tcaplus系统在如下方面全方位做到负载均衡。

       (1) Tcaplus Api通过一致性Hash算法选择tcaproxy节点从而实现tcaproxy节点之间的负载均衡。

       (2) 不同Tcapsvr节点之间通过缩扩容实现高负载业务(数据表)获得较多存储资源,低负载业务(数据表)获得较少存储资源。

       (3) 不管是key还是value,热点数据获得宝贵的内存资源,非热点数据获得相对低廉的硬盘资源。相对value来讲通常key空间较小被访问频率较高,为了减少访问key, value的整体硬盘I/O次数,key往往比value更容易抢占到内存资源。

       (4) 不管是key还是value,内存中的数据块大小相对硬盘中的数据块大小要小一些,这样可以提高内存空间的利用率,同时内存数据的多次访问不会有明显的性能上的问题;硬盘中的数据块大小相对内存中的数据块大小要大一些,这样可以减少硬盘I/O的次数,同时可能浪费的硬盘空间相对于内存来讲还算比较成本低廉。

       (5) 在同一个tcapsvr存储节点之内不同的数据shards可能因为数据访问负载的不同而获得不同数量的内存资源。这样做的好处是:同一个tcapsvr存贮节点之内不同的数据shards之间调整转移内存资源数量对于tcapsvr, tcapcenter等是透明的,避免了数据搬迁调整这种大动作事件(同时影响系统多个节点的事件)的发生;当数据搬迁调整异常或失灵时tcapsvr节点自身还能应对解决其内不同shards负载不均衡的问题。

全方位负载均衡.jpg

Figure04

        Tcaplus没有把不同机器节点的内存整合成一个内存海,没有把不同机器节点的硬盘整合成一个硬盘海,但在节点内部在不同shard之间以及在各个shard之内将内存和硬盘的负载均衡做到淋漓尽致,同时辅以不同节点之间的数据搬迁实现节点之间的负载均衡。这样做主要是基于如下考虑:继承Tcaplus支持非服务化定制部署提供功能的历史;节点内部的负载均衡没有网络开销更高效,例如节点内部的内存和硬盘之间数据LRU效率高;节点发生故障时可以靠自己便实现数据restore无需依赖别的多个节点进行复杂的综合计算。

 

立体的可聚合统计告警

       大数据时代的游戏数据存储面临着存储节点数量多,部署变化多,不同游戏发展分化大,时不时发生机器硬件故障或网络故障的现实。如果运维人员盯着每一个节点的每一个指标统计告警将会因为统计值和告警消息太多而疲于应付,真正严重的告警消息也会被不重要的告警消息淹没。

立体的可聚合统计告警.jpg

Figure05

       如Figure05所示,Tcaplus接入改造后的Tmonitor统计告警系统。Tmonitor系统支持进程指标统计和聚合指标统计。Tmonitor系统支持进程指标告警和聚合指标告警。并且Tmonitor系统支持将告警项(包括进程指标告警项和聚合聚合指标告警项)按业务做聚合,不管业务内部有一个节点还是多个节点发生了故障,只会向运维人员发送一条告警消息,根据这条告警消息运维人员可以看到告警的级别(即对相应那个业务的影响程度,即告警的重要性),并且还可以根据告警消息里的进程指标告警信息迅速看到定位到导致故障的根源进程列表。一个Tmonitor系统还支持和别的Tmonitor系统相互统计告警,实现Tmonitor系统自身的监控保证。

      大数据时代的游戏数据存储管理和挖掘利用是个很大的课题,本文介绍了Tcaplus朝解决这个课题的方向所做的主要尝试和努力。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

大数据时代的Tcaplus游戏存储 的相关文章

  • TiDB 的数据迁移工具现已开源

    TiDB 是国内 PingCAP 团队开发的一个分布式 SQL 数据库 xff0c 支持包括传统 RDBMS 和 NoSQL 的特性 现已将 DM xff08 data migration platform xff0c 该数据迁移工具 xf
  • TiDB在Centos7上通过源码编译安装

    这里难以编译安装的是tikv tidb的三大部分tidb pd tikv中tidb pd均是采用go语言编写 xff0c 安装go语言包即可编译 xff0c 唯独tikv是采用rust语言写的 xff0c 他的编译是最复杂的 而且编译环境非
  • TinyKv Project3 PartA Multi-raft KV

    TinyKv Project3 PartA Multi raft KV 前言Project3 PartA Multi raft KV 文档翻译Add RemoveLeaderTransfer 前言 Project3是整个项目最难的部分 xf
  • TiDB关键字、保留字和注释语法

    关键字和保留字 关键字在 SQL 中有特殊的意义 例如 SELECT UPDATE DELETE 在作为表名跟函数名的时候 需要特殊对待 例如作为表名 保留字需要被反引号包住 CREATE TABLE select a INT ERROR
  • 所有的raft算法

    https raft github io
  • 大数据时代的Tcaplus游戏存储

    大数据时代的Tcaplus游戏存储 shiweizhang 2015 10 27 1 7k浏览 游戏开发数据分析场景 想免费获取内部独家PPT资料库 观看行业大牛直播 点击加入腾讯游戏学院游戏开发行业精英群711501594 摘要 大数据具
  • leveldb代码结构

    leveld代码结构 源文件 tree I test AUTHORS build detect platform db 具体逻辑 builder cc 定义了BuildTable函数 builder h c cc c封装 暂时不用看 db
  • 键值数据库PebblesDB读后感

    键值数据库PebblesDB读后感 在LevelDB RocksDB这种分层思路上 PebblesDB提出了一种减少写放大的思路 下面学习并总结 所述以论文为基础 也有个人 观点 客观论述请看原文 虽然LSM的写放大最近被研究很多 但是就写
  • 香橙派4和树莓派4B构建K8S集群实践之八: TiDB

    目录 1 说明 2 准备工作 3 安装 3 1 参考Tidb官方 v1 5安装说明 3 2 准备存储类 3 3 创建crd 3 4 执行operator 3 5 创建cluster dashboard monitor容器组 3 6 设置访问
  • LevelDB源码解析(2) SkipList(跳跃表)

    你也可以通过我的独立博客 www huliujia com 获取本篇文章 背景 SkipList是LevelDB的MemTable使用的底层存储结构 LevelDB实现了一个支持泛型的跳跃表 本文不会具体介绍跳跃表的数据结构 如果读者不了解
  • leveldb之Compaction操作下之具体实现

    leveldb之Compaction操作下之具体实现 2015 05 17 19 40 438人阅读 评论 0 收藏 举报 分类 leveldb 13 版权声明 本文为博主原创文章 未经博主允许不得转载 目录 由上文可知 合并主要分为三种
  • Windows下 VS2015编译RocksDB

    Windows下 VS2015编译RocksDB VS2015编译RocksDB RocksDB 是一个来自 facebook 的可嵌入式的支持持久化的 key value 存储系统 也可作为 C S 模式下的存储数据库 但主要目的还是嵌入
  • LSM树存储模型

    大规模分布式存储系统 原理解析与架构实战 读书笔记 之前研究了Bitcask存储模型 今天来看看LSM存储模型 两者虽然同属于基于键值的日志型存储模型 但是Bitcask使用哈希表建立索引 而LSM使用跳跃表建立索引 这一差别导致了两个存储
  • IDEA连接TiDB报字符集不匹配问题COLLATION ‘utf8_general_ci‘ is not valid for CHARACTER SET ‘utf8mb4‘.

    最近因工作需要 部署了一套TiDB 然而通过IDEA 使用MySQL驱动连接数据库时 一直报字符集不匹配 网上找了些资料 但是并没有相关说明 最后请教了一个大佬 问题得到解决 这边记录一下 希望能帮助到遇到同样问题的人 问题现象 IDEA连
  • vcpkg编译第三方库leveldb

    vcpkg编译leveldb 1 安装vcpkg 使用git命令直接pull vcpkg源码 git clone https github com microsoft vcpkg 2 在vcpkg目录执行bootstrap vcpkg ba
  • 一致性算法(paxos、raft)

    背景 分布式 一致性模型 1 弱一致性 最终一致性 1 1 DNS 1 1 Gossip 2 强一致性 2 1 同步 2 1 paxos 2 1 raft multi paxos 2 1 ZAB multi paxos 与raft相似 心跳
  • Raft算法的Java实现

    自己这几天在看Redis的Sentinel高可用解决方案 Sentinel选主使用的是著名的Raft一致性算法 本文对Raft的选主作了介绍 具体的算法内容 请参考 Raft 论文 Raft的整体结构 Raft 通过选举一个高贵的领导人 然
  • 如何将新的 Orderer 组织添加到现有的 Hyperledger Fabric 网络

    我正在尝试向基于 RAFT 的现有订购服务添加一个新的订购者组织 我正在使用first network from fabric samples作为基础网络 在生成加密材料时 我进行了修改 为另外 1 个订购者组织生成加密材料 这crypto
  • Raft算法:term什么时候会增加?

    Raft将时间划分为任意长度的术语 如图5所示 术语用连续的整数编号 每个任期以一次选举开始 其中一名或多名候选人试图成为领导者 如第 5 2 节所述 如果候选人赢得选举 那么他将在剩余任期内担任领导者 在某些情况下 选举会导致投票分散 在
  • Scala SBT 和 JNI 库

    我正在编写一个简单的应用程序Scala通过以下方式使用 leveldb 数据库leveldbjni图书馆 我的build sbt文件看起来像这样 name Whatever version 1 0 scalaVersion 2 10 2 l

随机推荐

  • postman下载文件乱码

    环境 postman v8 0 7 遇到的问题 postman下载文件时乱码 解决方案 不要用send 用边上小箭头里的send and Download
  • JS 鼠标粒子效果

  • UE虚幻引擎教程_生成云平台指定路径下的exe文件

    市面上大量优秀的游戏都是基于UE制作的 UE虚幻引擎制作的作品可以在windows mac linux以及ps4 x boxone ios android甚至是html5等平台上运行 本文介绍了UE虚幻引擎如何生成云平台指定路径下的EXE
  • 创建操作符(初稿)

    just 将一个或多个对象转换成发射这个或这些对象的一个Observable from 将一个Iterable 一个Future或者一个数组转换成一个Observable create 使用一个函数从头创建一个Observable defe
  • vim 插入模式小技巧

    1 vim插入模式快捷键 ctrl h 删除上一个字符 ctrl w 删除上一个单词 ctrl u 删除当前行 这三个快捷键也适用与终端中 2 终端中的快捷键 ctrl a 快速移动到行首 ctrl e 快速移动到行末 ctrl b 向前移
  • 面试题-网络

    以下所有整理内容都是我从第一次面试开始 将所有遇到的问题整合后的结果 所有的内容都是我在面试中真实遇到的问题 有BAT这样的大厂 也有很多小厂 在面试超过20家之后 遇到的绝大多数问题都开始重复 这份资料给我的面试带来了非常多的便利 现在我
  • 大数据单机学习环境搭建(12)Azkaban的简单使用

    专题 大数据单机学习环境搭建和使用 1 登录和密码修改 2 新建工程 2 1新建工程 2 2创建zip文件 2 3添加文件到项目 3 任务执行 3 1立即执行 3 2 设置定时任务 4 依赖任务建立 大数据单机学习环境搭建 12 Azkab
  • OpenCV Mat数据类型指针ptr的使用

    常用形式 mat ptr
  • leetcode-340 Longest Substring with at most k-distinct characters(至多包含 K 个不同字符的最长子串)

    题目描述 给定一个字符串 s 找出 至多 包含 k 个不同字符的最长子串 T 示例 1 输入 s eceba k 2 输出 3 解释 则 T 为 ece 所以长度为 3 示例 2 输入 s aa k 1 输出 2 解释 则 T 为 aa 所
  • 【项目实战】SpringBoot多环境(dev、test、prod)配置

    一 三套环境介绍 1 1 开发环境 dev 开发环境是程序猿们专门用于开发的服务器 配置可以比较随意 为了开发调试方便 一般打开全部错误报告 1 2 测试环境 test 一般是克隆一份生产环境的配置 一个程序在测试环境工作不正常 那么肯定不
  • 用scrapy爬虫无数据

    TOC 用scrapy爬虫不到数据 求大神解决 运行后终端显示 D BaiduNetdiskDownload jobui gt C Users admin AppData Local Programs Python Python36 32
  • 【转载】【stm32】一键下载电路

    原创Nerute 2018 11 18 01 11 10 2361 首先感谢正点原子的开源资料 下面贴上正点原子一键下载电路的原理图 很显然 核心是一块CH340芯片 什么是CH 请看手册 再来就是引脚说明 了解一键之前 我们还得知道 st
  • jenkins-自动化打包部署

    环境 centos 7 2或者更新 rmp包 官方下载地址 Redhat Jenkins Packages java 1 8 0 安装 root jenkins yum install wget java 1 8 0 y root jenk
  • 滤波算法(一)

    滤波算法 算法一 一阶滤波算法 低通滤波器 首先要讲的是一阶滤波算法 也就是低通滤波算法 这个滤波算法对于低频的噪声具有非常好的效果 对于0到一定频率的信号是能够无失真接收的 这个算法通过硬件的电路推导 因其十分的简单 一阶滤波算法为 滤波
  • 认识正则表达式

    正则表达式re 正则表达式 re 是一套字符串数据筛选规范 在各种语言中 c c java python 都是通用的 对数据进行清洗 在不同的语言中使用流程不同 python中的用法 import re 导入re模块 自带库 result
  • Andriod 应用两种设计风格

    Andriod 应用两种设计风格 仿 iOS 风格 Andriod Design
  • db2插入 timestamp 类型 慎用

    表结构 create table tableName id varchar 8 not null date time timestamp 正确的方式 insert into tableName id date time values 000
  • Activity过度动画

    Activity过度动画 java代码 res文件 enter anim xml exit anim xml java代码 button setOnClickListener new View OnClickListener Overrid
  • c语言数字转字符串不用函数,不使用c的任何库函数 实现字符串到整数的转换 整数到字符串的转换...

    转载请标明出处 http www cnblogs com NongSi Net p 6805844 html 今天主要总结下 完成编程 1 除printf函数之外 不用任何c语言库函数 实现将字符串转化为整数的函数myatoi 可以支持负整
  • 大数据时代的Tcaplus游戏存储

    大数据时代的Tcaplus游戏存储 shiweizhang 2015 10 27 1 7k浏览 游戏开发数据分析场景 想免费获取内部独家PPT资料库 观看行业大牛直播 点击加入腾讯游戏学院游戏开发行业精英群711501594 摘要 大数据具