黑科技王者荣耀背后的实时大数据平台用了什么黑科技?( 五 )


所以这是这两种 SQL 的应用场景 。
■ 2)SQL 化
另外 SQL 里我们还可以做些其他的事情 。 我们的数据是持久化保存在存储里的 , 那存储里如果是同一张表 , 同一个纬度 , 比如我们都是用 QQ , 在这个纬度上我们配置了两个指标 , 那能不能一次算完?只消费一次把数据算完 , 然后存储一次 。
其实这种在大数据计算里是很多的 , 目前在我们在做的平台化就可以 , 比如一个是计算登录次数 , 另一个是计算最高等级 , 这两个计算逻辑不一样 , 但是消费的数据表是一样的 , 然后聚合纬度也是一样的 , 聚合关键字也是一样 。 那这个数据就可以进行一次消费 , 同时把数据计算出来同时去落地 , 大大减少了存储和计算成本 。
我们现在整个游戏里面有一万一千多个指标 , 就是计算出来的 , 存储的纬度有两千六百多 , 实际节省计算和存储约有 60%以上 。
两个 SQL , 甚至更多的 SQL , 我们一张表算十几个指标很正常 , 原来要消费十几次现在只需要一次就可以算出来 。 而且这种情况对用户是无感知的 。 A 用户在这张表上配了指标是 A 纬度 , B 用户在这张表上配了指标也是 A 纬度 , 那这两个用户的数据 , 我们在底层计算的时候就消费一次计算两次存储一次 , 最终拿到的数据也是一样的 。
■ 3)在线实时编程无需搭建本地开发环境;在线开发测试;严格的输入输出管理;标准化输入和输出;一站式开发测试发布监控 。
再介绍下刚才提到的在线实时编程 , 其实很多时候对开发者来说 , 搭建一个本地的 Flink 集群做开发调测也是非常麻烦的 , 所以我们现在就是提供一种测试环境 , 上层的代码都是固定的 , 不能修改 。 比如数据已经消费过来了 , 进行数据的加工处理 , 最终往存储里去塞就可以了 。
通过这种方式 , 我们可以对简单逻辑进行分装 , 需要函数代码 , 但比 SQL 复杂 , 比自动的 Jar 包开发要简单一些 , 可以在线写代码 , 写完代码直接提交和测试就能完成结果的输出 。 而且这种的好处是 , 数据的上报逻辑 , 数据的统计逻辑 , 我都在这里面分装好了 。 只要管业务逻辑的开发就好了 。
4、Flink 特性应用时间特性:基于事件时间水印的监控 , 减少计算量 , 提高准确性;异步化 IO:提高吞吐量 , 确保顺序性和一致性 。
我们最早在 Storm 里做的时候 , 数据产生的时间和数据进到消息队列的时间 , 都是通过这种消息里自带的时间戳 , 每一个消息都是要对比的 。 有了 Flink 之后 , 有了 watermark 这个机制之后 , 这一部分的计算就可以减少了 。
实际测试下来的效果也是比较理想的 , 我们原来在 Storm 里单核计算 , 大概是以前的 QPS , 加上读写和处理性能 , 单核五个线程的情况下 。 但是 Flink 的时候我们可以到一万 , 还加上 Redis 存储 IO 的开销 。
另一个我们原来数据想要从 Redis 里取出来 , 再去算最大值最小值 , 完了算了再写到 Redis 里 , 这个都是同步去写的 , 但是同步 IO 有一个问题就是性能不高 。
所以我们现在在把它改成异步 IO , 但是异步 IO 也有个特点就是整个一条数据的处理必须是同步的 , 必须先从 Redis 里把数据取出来 , 然后再把值计算完 , 再塞到里面去 , 保证塞完后再处理下一个统一的数据 。
我们再做这样的一些优化 。 Flink 这里有些特性可以保证我们数据的一致性 , 而且提升效率 。
5、统一大数据开发服务—服务案例
接着介绍下更多的案例 , 如果大家玩英雄联盟的话 , 那这个任务系统就是我们设计的 , 下次玩做这个任务的时候 , 你就可以想起我 。 还有天龙八部、CF、王者荣耀 LBS 荣耀战区(通过大数据实时计算+LBS 的数据排行)、王者荣耀的日常活动(实时数据+接口+规则计算)、有哪些好友是实时在线的 , 跟你匹配的 。
1、数据应用的出口