# huaweicloud-solution-gameflexmatch **Repository Path**: HuaweiCloudDeveloper/huaweicloud-solution-gameflexmatch ## Basic Information - **Project Name**: huaweicloud-solution-gameflexmatch - **Description**: 提供专用游戏的服务器托管服务,支持有状态的游戏服务部署和扩缩容,实现服务托管、高效灵活的服务器伸缩和就近调度的能力,帮助开发者快速构建稳定、低延时的多人游戏的部署环境,并节约大量的运维成本,提供gRPC支持的任何语言的服务框架部署与执行 - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master-dev - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 7 - **Forks**: 4 - **Created**: 2022-10-14 - **Last Updated**: 2025-03-10 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 目录 - [目录](#目录) - [1. huaweicloud-solution-gameflexmatch](#1-huaweicloud-solution-gameflexmatch) - [2. 简介](#2-简介) - [3. 逻辑架构](#3-逻辑架构) - [3.1. 仓库目录](#31-仓库目录) - [3.2. 资源规划](#32-资源规划) - [3.3. 云账号资源](#33-云账号资源) - [3.4. 涉及云服务](#34-涉及云服务) - [3.5. 部署指南](#35-部署指南) - [3.5.1. 基于发布的应用包进行部署](#351-基于发布的应用包进行部署) - [3.6. 使用指南](#36-使用指南) - [3.7. 开发指南](#37-开发指南) - [3.8. Reference](#38-reference) - [3.9. 联系我们](#39-联系我们) # 1. huaweicloud-solution-gameflexmatch
**`ZH`** | [`EN`](README_EN.md)
# 2. 简介 `GameFlexMatch`是一个服务托管解决方案,包含五个服务组件(`Fleetmanager`/`AppGateway`/`AASS`/`AuxProxy`/`Console`),可以实现应用的托管、托管应用所需资源的弹性伸缩、应用进程的资源调度管理、应用的灰度发布,多`region`部署时可以实现用户的就近接入,减少时延,以及服务资源的跨地域容灾。可以帮助开发者快速构建稳定、低延时的多人游戏的部署环境,并节省大量的运维成本,支持`Unreal`、`Unity`引擎,`C#`、`C++`以及`gRPC`支持的任何语言的`server`框架部署和运行,可以帮助你快速构建与管理游戏战斗服集群。 # 3. 逻辑架构 - [1. huaweicloud-solution-gameflexmatch](#1-huaweicloud-solution-gameflexmatch) - [目录](#目录) - [1. huaweicloud-solution-gameflexmatch](#1-huaweicloud-solution-gameflexmatch) - [2. 简介](#2-简介) - [3. 逻辑架构](#3-逻辑架构) - [3.1. 仓库目录](#31-仓库目录) - [3.2. 资源规划](#32-资源规划) - [3.3. 云账号资源](#33-云账号资源) - [3.4. 涉及云服务](#34-涉及云服务) - [3.5. 部署指南](#35-部署指南) - [3.5.1. 基于发布的应用包进行部署](#351-基于发布的应用包进行部署) - [3.6. 使用指南](#36-使用指南) - [3.7. 开发指南](#37-开发指南) - [3.8. Reference](#38-reference) - [3.9. 联系我们](#39-联系我们) `GameFlexMatch`平台由五个服务组件组成: + [FleetManager](https://gitee.com/HuaweiCloudDeveloper/huaweicloud-solution-gameflexmatch-fleetmanager): 负责应用进程的全局化动态部署及管理,支持配置动态部署策略,基于成本或时延优化应用分布,负责弹性伸缩策略的配置和服务端会话、客户端会话与应用包的管理,服务端应用的灰度发布等 + [AppGateway](https://gitee.com/HuaweiCloudDeveloper/huaweicloud-solution-gameflexmatch-appgateway): 负责应用进程、会话与客户端连接的管理,通过与`AuxProxy`通信获得应用进程信息,决策进程资源的调度 + [AASS](https://gitee.com/HuaweiCloudDeveloper/huaweicloud-solution-gameflexmatch-aass): 负责弹性伸缩组和弹性伸缩策略的管理与执行,以及服务端应用资源的监控,实现资源的弹性伸缩,与关键事件的记录 + [AuxProxy](https://gitee.com/HuaweiCloudDeveloper/huaweicloud-solution-gameflexmatch-auxproxy): 在扩容出的实例中自动拉起,负责应用进程的创建、进程状态的上报以及应用进程的通信 + [Console](https://gitee.com/HuaweiCloudDeveloper/huaweicloud-solution-gameflexmatch-console): 运维平台,用于监控`GameFlexMatch`的运行状态,以及运维管理`GameFlexMatch`的`fleet`、应用包与用户信息等 ## 3.1. 仓库目录 ```lua huaweicloud-solution-gameflexmatch doc -- 文档目录 |-api -- 管理面API文档 |- deployment -- 方案部署操作文档 |- dev -- 应用接入开发文档 |- user-guide -- 用户操作指南 |- img -- 图片相关 |- version -- 版本更新记录 release -- 部分脚本文件与配置文件 sdk -- 应用接入sdk和demo tools -- 脚本工具目录 ``` ## 3.2. 资源规划 + **部署资源** | 资源类型 | 单机部署 | 分布式集群部署 | 说明 | | :--------------------------: | :------: | :------------: | :---------------------------------------------------------------------------------------------: | | 云服务器ECS | 1 | 7 | 用于部署GFM前后端服务,若为分布式部署,则3个服务组件“Fleetmanager/AppGateway/AASS”服务组件各2台,前端服务1台 | | 云数据库RDS for Mysql | 1 | 1 | 用于存储必要的运行数据 | | 云数据库GeminiDB(for Influx) | 1 | 1 | 用于存储战斗服集群的实时运行数据,以进行弹性伸缩 | | 分布式缓存服务DCS(Redis) | 1 | 1 | 用于存储缓存数据 | | 弹性负载均衡ELB | 0 | 3 | 集群部署时需要,实现流量的智能分发 | ## 3.3. 云账号资源 需要提前准备一个云账号资源,并服务该账号以下权限: 1. 弹性云服务器所有权限:`ECS FullAccess` 2. 云容器实例所有权限:`CCI FullAccess` 3. 统一身份认证服务的只读权限:`IAM ReadOnlyAccess` 4. 云监控服务只读权限:`CES ReadOnlyAccess` 5. 云解析服务所有权限:`DNS FullAccess` 6. 企业项目管理服务只读权限:`EPS ReadOnlyAccess` 7. 云硬盘的只读权限:`EVS ReadOnlyAccess` 8. 镜像服务所有权限:`IMS FullAccess` 9. 对象存储服务管理员:`OBS Administrator` 10. 容器镜像仓库所有权限:`SWR FullAccess` 11. 虚拟私有云所有权限:`VPC FullAccess` 12. EIP服务所有权限:`EIP FullAccess` 13. 消息通知服务的所有权限:`SMN FullAccess` 14. 云日志服务所有权限:`LTS FullAccess` ## 3.4. 涉及云服务 该解决方案与华为云深度耦合,在运行过程中涉及到的云服务与用途如下,为保证可以正常使用该解决方案,请保证使用租户包含下列云服务的[必要权限](./README.md#33-云账号资源): | 云服务名称 | 简称 | 用途 | | :--------------: | :---: | :--------------------------------------------: | | 云服务器 | ECS | 用于创建管理战斗服集群 | | 云容器实例 | CCI | 用于创建管理战斗服集群 | | 统一身份认证服务 | IAM | 用于正常访问云服务的鉴权 | | 云监控服务 | CES | 用于获取后端服务组件的相关监控信息 | | 云解析服务 | DNS | 用于创建绑定域名的战斗服集群 | | 企业管理 | EPS | 用于基于企业项目创建不同的战斗服资源 | | 云硬盘 | EVS | 用于获取云硬盘信息,存储必要资源 | | 镜像服务 | IMS | 用于打包应用镜像,快速拉起战斗服集群 | | 对象存储服务 | OBS | 用于存储应用包信息与日志信息 | | 容器镜像服务 | SWR | 打包容器镜像 | | 虚拟私有云 | VPC | 包括安全组、子网等信息等,管理战斗服的网络资源 | | 弹性公网IP | EIP | 为战斗服绑定公网IP地址 | | 消息通知服务 | SMN | 当出现事件告警时,通知到运维人员 | | 云日志服务 | LTS | 采集战斗服的日志信息 | | 弹性伸缩服务 | AS | 用于弹性伸缩能力实现(已弃用) | ## 3.5. 部署指南 ### 3.5.1. 基于发布的应用包进行部署 **应用包目录介绍** ```lua /home/gfm |- bin -- 存放服务的二进制文件的目录 |- fleetmanager -- fleetmanager服务组件的二进制文件 |- appgateway -- appgateway服务组件的二进制文件 |- aass -- aass服务组件的启动二进制文件 |- auxproxy.zip -- auxproxy服务组件的压缩文件,需上传至OBS中 |- dist -- console控制台编译后的文件目录,用于与nginx一起部署前端 |- assets -- 前端代码目录 |- favicon.png |- index.html |- image_env.sh -- 用于应用自动打包镜像的脚本,需上传至OBS中 |- docker_image_env.sh -- 用于应用自动打包容器镜像的脚本,需上传至OBS中 |- conf |- init.yaml -- 用于安装部署GFM的配置文件,基于该配置文件生成各服务组件的配置文件 |- private.pem -- RSA加密的私钥,已默认生成一份,在生产环境中使用建议重新生成 |- public.pem -- RSA加密的公钥,已默认生成一份,在生产环境中使用建议重新生成 |- tls.crt -- HTTPS网络的签名证书 |- tls.csr -- 同上 |- tls.key -- 同上 |- workflow -- 用于存放GFM异步创建的配置文件 |- create_fleet_workflow.json -- 基于ECS创建fleet |- delete_fleet_workflow.json -- 基于ECS删除fleet |- create_fleet_cci_pod_workflow.json -- 基于CCI创建fleet |- delete_fleet_cci_workflow.json -- 基于CCI删除fleet |- create_build_image_workflow.json -- 基于ECS创建应用镜像包 |- create_build_docker_image_workflow.json -- 基于CCI创建应用镜像包 |- sac-gfm -- 辅助快速部署的二进制文件 ``` **后端服务部署步骤** > NOTE:部署过程基于`sac-gfm`脚本进行,脚本的说明请参考:[`ZH`](./doc/deployment/sac-gfm-intro-zh.md)|[`EN`]((./doc/deployment/sac-gfm-intro-en.md)) 1. 获取二进制应用包并解压 + 下载并进入目录:`wget -P /home --no-check-certificate https://gitee.com/HuaweiCloudDeveloper/huaweicloud-solution-gameflexmatch/releases/download/laster/game-flex-match_release.tar.gz; mkdir -p /home/gfm` + 解压:`tar -zxvf /home/game-flex-match_release.tar.gz -C /home/gfm` + 进入目录:`cd /home/gfm` 2. 修改配置文件 + 在安装部署时,你可以先了解先各个配置文件的各个参数说明,并根据实际情况进行修改,可以参考:[`ZH`](./doc/deployment/config-intro-zh.md)|[`EN`](./doc/deployment/config-intro-en.md) + 配置文件在二进制应用包中可以找到: `./conf/init.yaml`,你可以根据实际情况修改,你也可以在[init.yaml](release/conf/init.yaml)中查看 3. 安装服务组件 + **FleetManager**: 初始化安装:`./sac-gfm install --service fleetmanager`,该步骤将会自动生成`fleetmanager-start.sh`启动脚本 启动: `./sac-gfm start --service fleetmanager` + **AppGateway**: 初始化安装: `./sac-gfm install --service appgateway`,该步骤将会自动生成`appgateway-start.sh`启动脚本 启动: `./sac-gfm start --service appgateway` + **AASS**: 初始化安装: `./sac-gfm install --service aass`,该步骤将会自动生成`aass-start.sh`启动脚本 启动: `./sac-gfm start --service aass` 4. 若你想重启或停止该服务组件,以`fleetmanager`为例,你可以: `./sac-gfm stop --service fleetmanager` `./sac-gfm restart --service fleetmanager` **前端服务部署步骤** > NOTE: 前端服务已通过`npm`基于已提供的`./conf/public.pem`公钥进行编译,若您的公钥有更新,需要重新编译 > 重新编译请参考编译指导: [`ZH`](doc/deployment/build-zh.md#console) | [`EN`](./doc/deployment/build-en.md) > 以下所有命令基于`Centos`操作系统, 1. 安装`nginx`: `yum install -y nginx` 2. 安装前端应用:`cp -r -f /home/gfm/bin/dist/* /usr/share/nginx/html/` 3. 根据下面指导进行修改`nginx`配置文件: 打开`nginx`配置文件:`vim /etc/nginx/nginx.conf` 共有三个地方需要修改 ```conf http { ... client_max_body_size 6g; # 1.增加该字段,适配大应用包应用 ... server { ... # 2.修改以下IP为后端服务器IP,把 /api 路径下的请求转发给真正的后端服务器 location /api/ { proxy_pass https://{fleetmanager-ip}:31002/; } # 3.修改该字段,避免刷新后页面不存在的问题 location / { root html; try_files $uri /index.html; # try_files:检查文件; $uri:监测的文件路径; /index.html:文件不存在重定向的新路径 index index.html; } ... } ``` 4. 启动`nginx`,直接执行:`nginx` 5. 浏览器输入网址: `http://{前端服务器所在IP地址}:80` **更新步骤** 如果你想从源码进行编译,可以参考以下步骤: [ZH](./doc/deployment/build-zh.md)|[`EN`](./doc/deployment/build-en.md) ## 3.6. 使用指南 + `console`平台的快速入门详见: [`ZH`](doc/user-guide/quick-start-zh.md)|[`EN`](doc/user-guide/quick-start-en.md) + `console`平台的用户指南详见: [`ZH`](doc/user-guide/user-guide-zh.md)|[`EN`](doc/user-guide/user-guide-en.md) ## 3.7. 开发指南 + 支持`GRPC`的方式将应用托管到`GameFlexMatch`,相关接口与接入流程参考[`ZH`](doc/dev/developer-zh.md)|[`EN`](doc/dev/developer-en.md) + 应用托管接入示例可参考`sdk`目录 ## 3.8. Reference + 管理面`API`参考文档 [doc/api/FleetManager.yaml](doc/api/FleetManager.yaml) + 你可以使用[swagger](https://editor.swagger.io/)进行打开,在菜单栏中选择`File->Import URL`导入API文档进行查看 ## 3.9. 联系我们 若你有任何疑问,请联系:hwcloudsolution@163.com