王者光彩背后的实时大数据平台用了什么黑科技?
作者头像
  • robotinside
  • 2020-08-21 12:50:10 2

基于Flink+ServiceMesh的腾讯游戏大数据服务应用实践

许振文

腾讯游戏增值服务部后台开发组组长

许振文先生拥有超过8年的游戏大数据开发经验,专注于游戏数据分析平台iData的设计与开发,为腾讯超过400款游戏提供高效的数据分析服务。他是中国通信研究院发布的微服务行业标准和分布式消息队列技术标准的核心制定者之一,也是Linux内核之旅开源社区的负责人,以及Istio社区的成员。

在分布式存储、调度、多维数据分析、实时计算、事件驱动决策系统、微服务和ServiceMesh等领域有着丰富的实践经验。本次分享主题为《基于Flink+ServiceMesh的腾讯游戏大数据服务应用实践》,主要内容包括背景介绍、实时大数据计算、数据接口服务、微服务化与ServiceMesh。


一、背景与解决方案介绍

1. 离线数据运营与实时数据运营

最初,游戏数据运营主要依赖于离线数据分析,数据在次日才推送至线上。然而,这种方式无法满足即时反馈的需求。随着用户期望的提升,“实时”成为关键,因此我们逐步转向实时数据运营,但离线数据依然不可或缺,尤其是在计算累计值、数据校验等方面。

实时数据运营显著提升了用户体验,例如在游戏中完成任务后立即获得奖励。这不仅适用于游戏领域,其他行业同样受益于离线和实时数据的结合。

2. 应用场景
  • 游戏任务系统:任务完成后立即发放奖励,而不是等待次日。任务系统为玩家提供明确的游戏指引,增强游戏体验。

  • 实时排行榜:如王者荣耀中的段位排名,这些排名实时更新,增加玩家的竞争感和参与感。

3. 游戏对数据的需求

传统的筒仓式开发流程已无法满足现代游戏运营的需求。为此,我们构建了一个一体化的数据服务平台,涵盖项目创建、资源分配、服务开发、在线测试、独立部署、服务上线、线上监控、效果分析、资源回收等多个环节。该平台借鉴了DevOps的理念,实现开发与运营的一体化。

4. 思路

为了实现大数据应用的DevOps,我们提出了三个现代化:

  • 规范化:包括流程规范、数据开发规范和开发框架。
  • 自动化:涵盖资源分配、发布上线、监控部署等环节。
  • 一体化:整合数据开发、数据接口开发、测试发布、运维监控等环节。
5. 数据服务平台整体架构

数据服务平台的整体架构主要包括计算存储、服务调度和管理三大模块。其中,计算存储模块主要负责数据的计算与存储,服务调度模块负责任务调度和实时计算,管理模块则涵盖运营监控、集群管理、系统管理等。


二、实时大数据计算OneData

1. 数据开发流程

数据开发流程包括数据接入、数据处理和数据查询。数据通过Game Server上传至日志服务器,再通过Kafka或Pulsar进行数据传输。数据处理部分采用SQL、在线WebIDE和场景化配置等方式,支持实时数据处理和查询。

2. 数据计算一致

数据计算一致性主要通过SQL化和自研SQL实现。自研SQL通过SQL解析器进行解析,生成高效的函数代码,避免频繁的函数调用。此外,我们还支持SQL化处理,简化开发流程,提高计算效率。

3. 数据计算服务体系

数据计算服务体系包括自研SQL、Flink SQL和Jar包等多种形式,支持实时数据处理和存储。通过平台化的方式,降低了大数据开发的门槛,使开发者只需掌握SQL或简单的逻辑函数编写即可。


三、数据接口服务OneFun

1. 数据应用的出口

数据接口服务OneFun通过统一的接口管理,实现了数据的高效访问。我们采用类似于FaaS的处理方式,对存储进行元数据管理,确保接口请求的合理性和性能。

2. 一体化函数执行引擎—OneFun

OneFun提供快速函数和在线函数编程接口,支持JavaScript和Golang代码的编写和执行。我们基于Golang的SSA特性,实现在线函数执行引擎,提高了开发效率和系统安全性。

3. 基于SSA的在线Golang函数执行引擎

基于Golang的SSA特性,我们实现了一个在线函数执行引擎,支持在线编写Golang代码并直接执行。这种开发模式类似于Lua脚本,便于在线调试和执行。

4. 基于V8引擎的在线函数服务引擎

我们还采用了基于V8引擎的在线函数服务引擎,支持JavaScript代码的执行。这种方式提高了开发效率,支持多种开发语言的集成。

5. 一体化函数执行引擎—函数即服务

我们提供了一体化的函数执行引擎,支持在线函数编写和测试。通过这种方式,极大扩展了数据平台的开发能力,降低了启动成本和开发难度。


四、微服务化与ServiceMesh

1. 数据应用的必经之路—微服务化

微服务化是数据应用的重要趋势,我们通过微服务管理系统实现了对服务的全面管理。微服务不仅提升了开发效率,还带来了服务管理的挑战,需要统一的服务管理和流量控制。

2. 一体化服务管理设计

我们构建了一体化的服务管理系统,涵盖项目注册、API注册、服务发布和健康检查等功能。通过Consul和Envoy实现服务的路由和监控,确保服务的稳定运行。

3. 南北流量+东西流量的一致管控

我们通过Consul和Istio实现了南北流量和东西流量的一致管控,支持多集群部署和图形化配置。这种方式提高了系统的可扩展性和管理效率。

4. 基于ServiceMesh的全链路流量分析

我们利用ServiceMesh技术实现了全链路流量分析,通过流量统计和快照生成,分析下游服务的压力情况,为资源管理和优化提供依据。


Q&A

Q1:ServiceMesh是如何部署的?主要解决什么问题?

ServiceMesh技术主要通过Istio实现,我们目前使用的是Istio 1.3.6版本。部署方式有两种:直接使用istioctl命令安装或生成YAML文件后使用kubectl安装。ServiceMesh主要解决了集群内部东西流量的管理问题,同时屏蔽了后端服务的技术栈差异。

Q2:微服务管理架构是什么样的?

微服务管理架构主要分为两部分:服务实例管理和服务流量管理。服务实例管理由Kubernetes负责,包括服务发布、升级、扩缩容和服务注册发现等。服务流量管理则通过微服务网关和服务网格技术实现,前者负责集群内外流量管理,后者负责集群内部流量管理。

Q3:开发人员需要具备哪些技能?

大数据开发人员需要掌握SQL语句和基本统计知识。接口开发人员需要掌握JavaScript或Golang,了解HTTP协议和API接口调试。

Q4:实时计算中,Flink和Spark应该如何选择?

Flink在实时计算方面表现更优,尤其在处理高实时性要求的场景中。Spark更适合于数据迭代计算和算法计算,但在实时性要求较高的场景中可能不如Flink。

Q5:游戏回放数据服务端存储场景如何实现?

游戏回放数据可以通过两种方式存储:一种是录屏传输回放,成本较高但及时性好;另一种是通过控制指令发送回服务端,成本较低但复杂度较高。

Q6:回放场景下客户端如何发送数据到服务端?

通常情况下,客户端通过游戏的公共协议发送数据到服务端。


获取本期PPT

请添加右侧二维码微信获取本期PPT。

    本文来源:图灵汇
责任编辑: : robotinside
声明:本文系图灵汇原创稿件,版权属图灵汇所有,未经授权不得转载,已经协议授权的媒体下载使用时须注明"稿件来源:图灵汇",违者将依法追究责任。
    分享
光彩王者实时背后数据什么平台科技
    下一篇