近年GDC服务器分享合集(一):在《黑道圣徒》的boss工厂中创建可扩展和吸引人的UGC

基于 Simulink 的单相 PWM 整流器(四象限变流器)在高铁辅助电源系统中的建模与仿真实战教程 这是一份基于 Simulink 的实战教程。在高铁牵引供电与辅助电源系统中,单相 PWM 整流器(又称四象限变流器,4QC)是极其核心的“绿色电源”枢纽。传统的二极管整流器虽然结构简单,但会导致严重的输入电流畸变和低功率因数,对电网造成极大的谐波污染。而 PWM 整流器通过高频主动控制,不仅能将单相交流电转换为平稳的直流电,还能实现输入电流正弦化、单位功率因数(PF=1)运行,并支持能量双向流动(如列车再生制动时的能量回馈)。本教程将带你从数学模型出发,搭建一套高性能的电压电流双闭环控制系统。 阅读详情

为什么写作这个系列

GDC(Game Developers Conference)是游戏界最富盛名的开发者大会,每年有来自全球各地的顶级游戏开发者分享前沿的游戏设计、技术和运营经验。

GDC上的技术分享,以客户端和渲染类的居多,服务器相关的相对小众。不过仔细找找还是能找到不少关于服务器的高质量内容,其中不乏来自知名游戏的干货分享,如《Sky光·遇》《星战前夜## 标题》。中国的腾讯、网易也带来过不少服务器相关的分享。

本系列将会分享近几年(2020——2023)服务器主题下的演讲,通过阅读本系列,读者可以了解业界最新的服务器技术开发前沿,有助于开阔眼界、活跃思路。

本次分享为大家带来的是GDC 2023上的《在《黑道圣徒》的boss工厂中创建可扩展和吸引人的用户生成内容》(Creating Scalable and Engaging User Generated Content in ‘Saints Row Boss Factory’)。PPT和演讲视频可分别点击链接获取。通过学习本分享可以获得以下收获:

  1. 如何设计一个可扩展的UGC系统架构,包括内容存储方案。
  2. 如何对UGC有效监管。
  3. UGC系统上线遇到的技术问题及处理经验分享。

以下为详细内容分享。

基本介绍

在这里插入图片描述

《黑道圣徒》是一个经典的犯罪题材RPG游戏IP,玩家可以扮演黑道与其他人进行畅快淋漓的枪战。这次演讲的内容来自最新发售的《黑道圣徒》重启版。在这个版本中,新增了Boss Factory的功能,玩家可以自定义角色的容貌和道具,并允许在线上与他人分享。

演讲人是一位印度哥们,印度口音不重,发音清晰标准。他自述从产品经理转到开发,拥有10多年的跨行业服务器经验,以及4年多的游戏服务器经验。

Boss Factory功能在游戏正式发售前就已经提供给玩家,最高时一天有多于13万的boss创建量,这给服务器架构带来了一定挑战。

架构

在这里插入图片描述

线上服务主要包括:

  1. IAM Service:用户服务,包括用户验证、管理和封禁。
  2. UGC Service:用户生成内容服务,包括内容分享、浏览以及点赞、关注等。
  3. Reporting Service:举报服务,包括举报内容、内容监管。

以上所有的服务都用AWS托管,不同服务之间使用Kafka做消息传递。

存储这块按数据类型分为:

  1. UGC元数据:存储在MongoDB中,并对MongoDB做主从读写分离。MongoDB的优势在于灵活的非结构性数据,这对于快速的版本迭代(新增元数据字段)是非常有利的。
  2. UGC文件:包括图片和模型类资源,来自玩家上传的自制角色。这一块使用AWS的S3(Amazon Simple Storage Service)做存储。S3是Amazon提供的对象存储服务,可用于存储各种类型的文件(图片、文本、视频等)。对象存储可以简单地理解为一个加强版的CDN存储,不同点在于:对象存储仅用一个key就能获取到存储的对象(文件),没有传统文件存储中文件夹的概念。而且S3还提供了权限管理、版本管理等普通CDN存储没有的功能。
  3. 策划数据:包括管理员精选的内容和创作者。此处使用的存储方式Cloud Save应该是指Google Play Services为游戏提供的一种轻量级云存储方案。

笔者认为这个系统更像是互联网服务或者游戏中台,而非游戏服务,原因在于它提供的功能都是无状态的。所以在设计上使用了大量的云原生技术,服务器全部托管在AWS上,方便快速弹性扩展。

内容监管

在这里插入图片描述

对于一个UGC系统来说,很可能会出现违禁的内容,因此内容监管十分重要。

内容监管以玩家举报加后台管理相结合的方式进行。玩家可以对疑似违禁的内容进行举报,举报生成的流程单会在管理创建,管理员可以据此做出处理决定(删除内容或封禁用户)。管理员也可以自定义处理规则,例如超过5人举报则内容自动删除。

跨平台实现

在这里插入图片描述

Boss Factory同时支持在游戏端和网页端访问,因此有不同的用户验证方式。

在游戏端登录,直接使用第一方的账户系统(Epic、Xbox、PS);在网页端登录,需要使用一个叫OIDC的通用账户系统,并把这个系统的账号与游戏中使用的账号绑定。

上线经验

印度哥们认为最有价值的是关于上线经验的分享。他分享了三点,分别对应预发布、demo发布和正式发布三个阶段。
在这里插入图片描述

预发布遇到的问题:数据库中超长字段造成的慢查询。问题在于原始的设计把UGC(图片)放在数据库中存储,因此解决办法有三点:

  1. 在请求中去除对超长字段的访问。
  2. 查询请求拆分成两步:先是获取内容列表,再是获取内容预览。
  3. 将图片类数据改为存储在S3中。

在这里插入图片描述

demo发布遇到的问题:用S3存储时缺少数据分片。原本是所有内容全部放在一个bucket下面,这样单个bucket中有多达60万个对象,但是单个数据分片仅能处理最高5K TPS。解决办法是:增加一级按上传时间做的数据分片,将每个bucket的TPS减小到1K。

在这里插入图片描述

正式发布遇到的问题:太小或者太多的数据库索引会导致慢查询。按tag过滤是一种常用的查询方式,因此原本的设计为tag添加了索引。但是后面发现,按tag查询会返回大量的数据,例如按游戏平台查询可能会返回占总量1/3的数据,在这种情况下使用索引不仅区分度不够高,而且反而性能上是一个累赘,因此又在tag上去掉了索引。进一步的建议是,基于真实的玩家数据分布情况来使用索引,因为设想和真实情况会有差距。

建议

以下是演讲人基于这个UGC系统的上线经验给开发者的建议:

  1. 使用真实的用户数据和游戏场景做压力测试,减小不确定性。
  2. UGC的监管非常重要,需要提前做好监管平台的建设。
  3. 限制用户输入的名字、描述和tag的自由度,以免给监管带来麻烦。
【Docker】完美解决拉取镜像超时报错:ERROR: Get https://registry-1.docker.io/v2/ 因为我们下载的镜像是外网的镜像资源,所以下载的速度会非常的慢,甚至大概率下载时会报错,所以需要我们配置一个国内的服务器镜像地址,国内服务器镜像地址有很多,这里咱们就说一下阿里镜像加速器的配置方法。 阅读详情

相关推荐

十一、机器学习进阶知识:径向基神经网络(RBFNN)的实现(Python,附源码及数据集)

本文对径向基神经网络(RBFNN)的理论基础及建模步骤进行介绍,之后使用Python实现基于RBFNN的数据预测,通俗易懂,适合新手学习,附源码及实验数据集。

weixin_42051846的博客 1万+

《守望先锋》架构设计与网络同步 -- GDC2017 精品分享实录

Overwatch Gameplay Architecture and Netcode Timothy Ford Lead Gameplay Engineer Blizzard Entertainment 翻译:kevinan   在GDC2017【Overwatch Gameplay Architecture andNetcode 】的分享会上,来自暴雪的Tim Ford介绍了《守望

sigh667的专栏 1万+

“Agent Harness”和“Harness Engineering”

摘要:2026年AI工程化领域,"Agent Harness"(AI代理运行控制系统)与"Harness Engineering"(马具工程方法论)常被混淆。前者是管理AI代理非推理事务的技术实体(工具调用、记忆管理、安全约束等7层架构),后者是设计优化该系统的工程学科。研究表明,优化的Harness设计可使同一模型性能提升10倍。两者关系如同"马具"与"制具工艺":Harness Engineering指导Agent Harn

几十年资深高级架构师,技术专家的技术笔记。专注C、Java、Python、微服务、云原生、AI工程化及高并发系统分布式架构实战,分享源码剖析、性能调优与架构治理经验。 840

理解 Linux 动态库加载:LD_LIBRARY_PATH

flyfish

二分掌柜的 347

Overleaf+EndNote+BibTeX:手把手搞定Elsevier期刊投稿的参考文献格式(避坑指南)

本文详细介绍了如何利用Overleaf、EndNote和BibTeX三大工具无缝协作,解决Elsevier期刊投稿中的参考文献格式问题。从工具链配置、文献库导出、BibTeX文件优化到Overleaf集成与编译,提供全流程指南和常见问题解决方案,帮助学术新手高效完成Elsevier期刊投稿。

weixin_30616969的博客 509

2024最新超详细无痛安装PyTorch,包括下载地址、环境配置与各种避坑指南

PyTorch更新很快,2024最新下载安装经验贴,包括anaconda+CUDA+cuDNN+PyTorch四部分的下载和安装。文章详细介绍了下载地址、环境配置、虚拟环境建立的问题,还温馨提示了各种闭坑指南。有需要的友友快过来康康!

qq_43596278的博客 11万+

【Linux网络】TCP 服务器并发处理多客户端:从 fork 分发到双重 fork 彻底消灭僵尸进程

拆解 TCP 服务器并发演进链:fork 分发连接、SIGCHLD 循环回收僵尸、双重 fork 交孙进程给 init 收养,并给出模型选型与线上排错对照。

2301_78967866的博客 427

手把手教你用RTD2775QT/RTD2795QT打造4K便携屏:从芯片选型到Type-C一线通实战

本文详细介绍了如何利用RTD2775QT和RTD2795QT显示驱动芯片打造4K便携屏的全过程,包括芯片选型、硬件设计、固件烧录及Type-C一线通实战方案。特别针对新手常见问题提供了解决方案,帮助读者高效完成DIY项目,提升移动办公体验。

weixin_42520025的博客 715

LangGraph 本地 build 频频翻车,最终在服务器跑通流式对话

先说结论:我本地那个,一次都没成功过。三次,三次,全挂在拉镜像上。而顺得像刚上过油。这就很像我高中那辆自行车:骑着能走,一上锁就坏。那天晚上我盯着终端里那行红字看了很久,想的不是技术方案,想的是——为什么同一个工具,可以一边让我觉得自己很行,一边让我觉得自己不太行。

人工智能AI技术 115

LangGraph实战:用Python异步构建智能客服多轮对话系统(附完整代码)

本文详细介绍了如何使用LangGraph框架和Python异步编程构建一个高性能的智能客服多轮对话系统。通过将对话流程建模为有向图,结合thread_id实现多用户对话隔离,并利用异步节点提升系统并发处理能力,有效解决了传统客服系统上下文遗忘与高并发瓶颈问题。文章提供了从环境搭建、状态管理、异步优化到复杂业务逻辑与部署的完整实战代码。

weixin_29055137的博客 149

STM32F407 UART4串口DMA收发实战:告别频繁中断,用空闲中断+DMA搞定不定长数据

本文详细介绍了STM32F407 UART4串口结合DMA和空闲中断实现高效不定长数据收发的实战方案。通过DMA硬件级数据搬运和空闲中断智能帧检测,显著降低CPU占用率,提升通信效率,适用于工业传感器数据采集和智能设备通信场景。

weixin_42631411的博客 154

【Linux网络】TCP 服务器如何并发处理多个客户端?从 fork、僵尸进程到双重 fork

本文详解多进程TCP服务器的实现原理,从单进程并发瓶颈出发,通过fork分离连接接收与服务职责。重点解析文件描述符继承机制、僵尸进程问题及双重fork解决方案,最终构建高效、稳定的多进程服务器模型,并说明服务器重启时可能因端口未释放导致绑定失败的原因。

2402_87731470的博客 2395

2025美赛E题为农业留出空间(附代码+全保姆教程)Making Room for Agriculture

有机农业的核心在于减少化学投入,促进自然控制和可持续性。变量定义CCC: 作物种群III: 害虫种群PPP: 天然捕食者种群(蝙蝠、鸟类等)BBB: 生物多样性水平(以种类数量表示)SSS: 土壤健康指数(影响植物繁殖与作物生长)EEE: 农业生态系统的整体稳定性。

博客 1495

自建 Git 服务器和裸仓库差在哪:要能提合并请求

在一台 Linux 上 git init --bare 就能自建 Git 服务器,但它只能推拉代码,没有网页、合并请求、评审和按仓库分配的权限。对照裸仓库和 AngusGit 各自能做什么,再走一遍在 AngusGit 上发起合并请求的最短路径,以及已有裸仓库怎么完整搬过来。

AngusTester 322

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

架设一台NFS服务器

3、将/home/tom目录仅共享给192.168.100.136这台主机,并只有用户tom可以完全访问该目录。注意:tom是一个用户目录,并且在客户端创建tom用户一定与服务端的tom用户的uid/gid保持一致。2、开放/nfs/upload目录,为192.168.100.0/24网段主机可以上传目录,并将所有用户及所属的组映射为nfs-upload,其UID和GID均为210。1、开放/nfs/shared目录,供所有用户查询资料。架设一台NFS服务器,并按照以下要求配置。

2401_87595340的博客 238

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

轻量点对点定时备份方案:个人文档与服务器文件跨机同步实践

本文探讨了轻量级文件备份场景下的实际需求与解决方案。针对个人文档及小型服务器备份,传统BAT脚本虽易上手,但存在断点续传差、安全缺失、维护困难等短板。作者提出理想方案应具备点对点传输、断点续传、加密传输、版本管理、文件过滤及自动清理等能力。最终选用松鼠备份工具,实现稳定、低运维成本的跨机同步,尤其适合中小型场景,强调“稳定省心”优于复杂功能,是小团队和个人运维的高效之选。

2501_93776716的博客 208

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

安徽京准:NTP网络校时服务器在化工厂网络部署要点

安徽京准:NTP网络校时服务器在化工厂网络部署要点

238

Linux epoll 一篇讲透:从 select/poll 到红黑树、LT/ET,再到完整 TCP 服务器

一万个客户端已经连上服务器,眼下只有十个客户端发来了数据。服务器怎样把时间花在这十个连接上?理解这个问题,就抓住了 epoll 的主线。接下来,我们沿着“为什么需要它 → 接口怎么用 → 内核如何实现 → LT/ET 怎么写 → 完整服务器怎么运行”的顺序,把知识连起来。**阅读基础:**了解socketbindlistenaccept的基本用途即可。本文示例面向 Linux,服务器使用 C++17,实验脚本使用 Python 3。

2601_94861874的博客 195

把电脑变成一台“假“GNSS 设备 —— 一个蓝牙 SPP 服务器从零到联调

本文介绍如何用Qt6实现一个蓝牙SPP服务器(H11BtServer),将电脑模拟为一台可被发现的GNSS设备。该服务器支持经典蓝牙SPP协议,注册SDP服务并监听连接,响应AT命令(如AT+DEVINFO),每秒主动推送带正确校验和的NMEA帧($GNPOS/$GGA等),数据基于时间驱动正弦与随机扰动,实现位置、精度等参数动态变化。通过解析行式协议、计算校验和、严格对齐字段顺序,可在无真实硬件情况下联调RTK客户端(如rtklib SDK或手机App),完整验证数据链路。代码结构清晰,参数集中配置,易于

Hi20240217的博客 137

Linux网络编程:彻底理解IO多路复用select!从fd_set位图、读写就绪到手写TCP多客户端字典服务器

在前面的Linux网络编程中,我们已经学习了五种经典I/O模型:其中,我们通过 配合: 将文件描述符设置为非阻塞模式。例如: 这样,在没有数据可读时: 可以立即返回: 并设置: 而不需要让当前线程一直阻塞等待。但是,这又引出了一个新的问题。假设我们的TCP服务器同时连接了100个客户端: 如果使用简单的非阻塞轮询: 服务器就需要不断检查这些Socket。即使其中99个客户端都没有发送任何数据,服务器仍然可能反复调用它们对应的 。显然,这种方式可能产生大量无意义的系统调用。我们真正希望实现的是:能不能让内核

Face_FeaR的博客 657

【服务器数据恢复】RAID5阵列双盘掉线Oracle+OA系统的数据恢复案例

某医药公司服务器组建RAID5磁盘阵列,阵列内两块硬盘先后离线,直接造成服务器宕机。服务器操作系统为RedhatLinux,承载基于Oracle数据库搭建的OA业务系统,业务数据价值高、恢复时效要求紧急。由于该OA配套Oracle版本早已停止技术支持,客户需求为:完整恢复业务数据,同时尽可能复原原有操作系统环境。

beiya123的博客 127

BarTender异地客户端怎么连服务器?

适配场景:制药、汽车等,对网络环境、合规规范存在较高要求的企业。处在外部网络的异地计算机,如果要和总部服务端交换数据,就要建立加密通信隧道,VPN、云组网都属于这类网络实现方式。经常收到这样的技术咨询:标签软件的服务端部署在总部,外地车间、异地仓库、外协工厂的计算机分属不同局域网,这类情况下是否可以实现互通?这套软件本身不支持公网直接访问总部服务端,需要构建安全的虚拟通信链路,将分散各处的计算机纳入同一个虚拟内网环境。异地分厂、仓库以及外协作业点位,设备不必回到总部内网,就可以运行标签相关软件。

2601_96728078的博客 422

银河麒麟高级服务器操作系统日志采集标准处理流程

本文档提供银河麒麟高级服务器操作系统标准化日志采集流程,便于统一技术支持标准、缩短问题定位周期,且确保采集的信息完整、准确、可直接用于根因分析。本文档适用于技术支持工程师及具备操作系统操作权限的技术人员,覆盖银河麒麟高级服务器操作系统,适用阶段为服务器故障排查、问题复现、根因分析阶段的日志采集工作。执行1次,快速定位负载类型# 系统整体负载与CPU占用# 内存与虚拟内存状态# 进程维度信息(按CPU/内存排序)# 异常进程排查。

qq_39496637的博客 312

IO模型与并发服务器

调用 IO 函数(recv)时,如果内核缓冲区没有数据,进程直接阻塞休眠,直到数据到达才唤醒、拷贝数据、函数返回。

miracleAshing的博客 190

在 Linux 服务器上用 Docker 从零部署 Nexent:从环境准备到首次登录验证

本文解决:拿到一台干净的 Linux 云服务器,如何用 Docker 把开源智能体平台 Nexent 完整部署起来,并确认它真的能用——包括容器状态检查、浏览器访问、超级管理员首次登录、租户初始化以及进入主工作区。全文命令均基于 Nexent 官方 AtomGit 仓库()当前版本实测整理,照着做即可,不依赖任何图形界面。文中也会把我实际踩中的两个高概率坑()连同排查过程一起写清楚。

2302_79376097的博客 2180

服务器和windows客户端重启后,发现agent连不上lightmem和hive mcp了

服务器重启后,lightmem无法连接PostgreSQL(192.168.0.88:18444),日志显示connectECONNREFUSED。排查发现PG服务正常、jail运行中、bridge0成员齐全,但netstat -Iepair10a -b显示收包为0、错误计数持续增长,且arp无响应。最终定位为FreeBSD vnet jail的epair虚拟网卡在重启后“二次入狱”,导致跨vnet转发失效。修复方法:销毁并重建epair对,确保ifconfig epairXa up。同时发现lightme

skywalk8163的专栏 683
上一篇: 用Java实现Actor模型(模仿Skynet)
下一篇: 游戏服务器开发指南(六):条件判断永远放在状态变更前
长三月
博客等级 码龄9年 228粉丝 80原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值