方案优势 低延时高画质 基于自研 Tencent-RTC 和腾讯明眸极速高清技术,为云游戏提供流畅的游戏操作和视觉体验。 多端快速无缝接入 提供 JS-API 和全端 SDK ,集成后即可提供多终端一致的游戏体验,缩短接入周期,节省开发成本。 多终端随意玩 提供键盘、手柄、鼠标和虚拟按键适配能力,摆脱终端束缚,随时随地在任意终端畅玩3A级游戏大作。 全面资源覆盖 全球2000+边缘计算节点, 极致的 GPU 虚拟化渲染和编码能力,帮助开发者控制并发成本,快速布局云游戏。 游戏架构 大世界类 适用场景 分布部署是指游戏账号、充值等公共服务部署在一个物理区域,游戏大区逻辑服分别部署在离用户地理位置相对较近的物理区域以保证用户在游戏体验和游戏战斗的过程中,能有更稳定的网络体验的一种部署方案。 该方案适用于对网络延迟要求相对较高的角色扮演类游戏,适合 MMORPG 的多种玩法如格斗、回合制、真人PK、国战、副本挑战等场景。 业务需求 集中部署方案下,游戏的账号、充值消费、登录记录等用户平台类数据需要考虑全服集中存放,数据库的平行扩展性和高可用有较高要求。腾讯云数据库 MySQL 和 TcaplusDB 可以满足此需求。 为了保持游戏用户的活跃度,需要大量的运营活动,例如限时折扣、礼包抽奖等,活动期间用户会同时访问热点数据,通过缓存减轻数据库的读写压力。Redis 混合存储版 Tendis 就可以满足此需求,在腾讯内部有着丰富的运营活动支持经验。 大世界类游戏在不同运营阶段,会存在大量的开服合服的活动,需要频繁操作各种资源。资源编排 TIC 就可以满足此场景,可以让运维人员以管理代码的方式来管理基础设施资源。 角色扮演类游戏社交属性非常强,玩家在游戏中需要参加各种社交活动,以及组队副本,战斗 PK 等环节。游戏多媒体引擎就提供一站式解决方案,支持多人语音,3D位置语音等,使用 SDK 快速接入游戏。 对战类 适用场景 分布部署是指游戏大厅逻辑服部署在一个物理区域,战斗服集群分别部署在不同物理区域,玩家匹配时,根据网络就近原则,选择离玩家延时较小的战斗服务器。 该方案适用于网络延迟要求较高的实时战斗匹配竞技游戏,比如 FPS 类、竞速类、MOBA 类游戏,分区分服主要来应对来自不同地域的文化差异和法律法规。 业务需求 此业务场景需要数据库能够承载数百万级别的同时在线,传统开源数据库无论从运维管理还是性能上都很难满足。TcaplusDB 的 NoSQL 数据机构精准解决了游戏场景下的数据机构复杂性问题,并且通过存储的分片、自动扩容、冷热数据分离等功能,解决了性能和运维上的难题。 匹配竞技类游戏的核心玩法是游戏对局,玩家在线高峰是平局在线的3倍,大量战斗服在业务空闲期资源限制。腾讯云战斗服托管服务接管了游戏房分配和销毁逻辑,按量计费,战斗服算力成本节省35%。 游戏内语音是对战类游戏非常重要的功能。腾讯云游戏多媒体引擎提供了一站式游戏语音解决方案,针对不同类型的游戏场景进行深度优化,一个 SDK 即可快速接入。 为了保持游戏用户的活跃度,需要大量的运营活动,例如限时折扣、礼包抽奖等,活动期间用户会同时访问热点数据,通过缓存减轻数据库的读写压力。Redis 混合存储版 Tendis 就可以满足此需求,在腾讯内部有着丰富的运营活动支持经验。 分布部署方式对于运维也是一种挑战。资源编排 TIC 可以为客户提供用、高效、安全的技术架构管理平台,同时提供代码编辑和视图编辑两种模式,以代码版本管理的方式来管理基础设施。 小游戏类 高效实现游戏后端开发与部署 通过简单的接口调用即可使小游戏快速具备房间管理、在线匹配、帧同步、状态同步等后端能力,开发者只需关注核心业务逻辑。 按量计费成本最优 联机游戏按 DAU 和流量计费,单机游戏使用云开发按资源消耗计费。方案提供一定量免费额度,支持开发者低成本接入和使用。 一站式云端服务 为开发者提供了数据库、存储等基础设施服务,开发者无需再为此搭建及运维服务器,可以专注于业务逻辑实现,轻松开始游戏开发之旅。 弹性业务支持 秒级扩缩容,承接业务爆发式增长,从几十并发用户到上百万并发用户,页面一键扩容,无需购买服务器,无需服务器运维。 多渠道同服 小游戏云服务解决方案适用于全渠道小游戏,支持包括 QQ、微信、抖音、OPPO、VIVO、百度等各平台小游戏。开发者可以按渠道分服,或设置多渠道合服,以保证玩家活跃的峰值低谷时期均可有足量玩家匹配和对战。 实例一键部署对战类 GameArch-对战类-集中部署 描述一键构建游戏架构中涉及的云资源:云服务器(CVM)、私有网络(VPC)、负载均衡(CLB)、云数据库 Redis、游戏数据库 TcaplusDB、对象存储(COS)、内容加速网络(CDN)。 架构图 部分配置信息 cvm配置信息: /******** * Description: CVM * Modified by: @tencent.com * Date: Oct 09, 2020 * Version: 1.0 ********/ # Create login servers resource "tencentcloud_instance" "login" { count = var.login_instance_count instance_name = "login-${count.index}" availability_zone = data.tencentcloud_availability_zones.az.zones.0.name image_id = data.tencentcloud_images.my_image.images.0.image_id instance_type = data.tencentcloud_instance_types.login_instance_types.instance_types.0.instance_type system_disk_type = var.root_disk_type system_disk_size = var.root_disk_size password = var.server_password vpc_id = data.tencentcloud_vpc_instances.vpc_instance_id.vpc_id subnet_id = data.tencentcloud_vpc_subnets.lobby_subnet_id.subnet_id security_groups = [ data.tencentcloud_security_groups.intranet_sg.security_group_id, ] tags = { "name" = "login" "module" = "lobby" "game_project" = "Game_A" } } # Query login servers for binding with clb data "tencentcloud_instances" "login_instances" { tags = { name = "login" } depends_on = [ tencentcloud_instance.login, ] } # Create lobby servers resource "tencentcloud_instance" "lobby" { count = var.lobby_instance_count instance_name = "lobby-${count.index}" availability_zone = data.tencentcloud_availability_zones.az.zones.0.name image_id = data.tencentcloud_images.my_image.images.0.image_id instance_type = data.tencentcloud_instance_types.login_instance_types.instance_types.0.instance_type system_disk_type = var.root_disk_type system_disk_size = var.root_disk_size password = var.server_password vpc_id = data.tencentcloud_vpc_instances.vpc_instance_id.vpc_id subnet_id = data.tencentcloud_vpc_subnets.lobby_subnet_id.subnet_id security_groups = [ data.tencentcloud_security_groups.intranet_sg.security_group_id, ] tags = { "name" = "lobby" "module" = "lobby" "game_project" = "Game_A" } } # Query lobby servers for binding with clb data "tencentcloud_instances" "lobby_instances" { tags = { name = "lobby" } depends_on = [ tencentcloud_instance.lobby, ] } # Create match making servers resource "tencentcloud_instance" "match_making" { count = var.match_making_instance_count instance_name = "match_making-${count.index}" availability_zone = data.tencentcloud_availability_zones.az.zones.0.name image_id = data.tencentcloud_images.my_image.images.0.image_id instance_type = data.tencentcloud_instance_types.match_making_instance_types.instance_types.0.instance_type system_disk_type = var.root_disk_type system_disk_size = var.root_disk_size password = var.server_password vpc_id = data.tencentcloud_vpc_instances.vpc_instance_id.vpc_id subnet_id = data.tencentcloud_vpc_subnets.lobby_subnet_id.subnet_id security_groups = [ data.tencentcloud_security_groups.intranet_sg.security_group_id, ] tags = { "name" = "match_making" "module" = "lobby" "game_project" = "Game_A" } } # Query match making servers for binding with clb data "tencentcloud_instances" "match_making_instances" { tags = { name = "match_making" } depends_on = [ tencentcloud_instance.match_making, ] } # Create game servers resource "tencentcloud_instance" "game_server" { count = var.game_server_instance_count instance_name = "game_server-${count.index}" availability_zone = data.tencentcloud_availability_zones.az.zones.0.name image_id = data.tencentcloud_images.my_image.images.0.image_id instance_type = data.tencentcloud_instance_types.game_server_instance_types.instance_types.0.instance_type system_disk_type = var.root_disk_type system_disk_size = var.root_disk_size password = var.server_password vpc_id = data.tencentcloud_vpc_instances.vpc_instance_id.vpc_id subnet_id = data.tencentcloud_vpc_subnets.game_subnet_id.subnet_id security_groups = [ data.tencentcloud_security_groups.intranet_sg.security_group_id, ] allocate_public_ip = true internet_max_bandwidth_out = var.default_instance_bandwidth tags = { "name" = "game_server" "module" = "game_server" "game_project" = "Game_A" } } # Query game servers for binding with clb data "tencentcloud_instances" "game_server_instances" { tags = { name = "game_server" } depends_on = [ tencentcloud_instance.game_server, ] |