当前位置: 首页 > news >正文

研发效能 | DevOps如何改变游戏公司工作方式?

在这里插入图片描述

如果你是游戏开发者,那么在过去几年里,你可能会觉得有人给了你一把双刃剑。

整个行业不断蓬勃发展,但玩家的预期值也越来越高。玩家们总是希望游戏体验能够更快、更真实、更具创造性。此外,他们还希望能够定期推出新的游戏和更新。

基于这种文化背景建立起来的行业,总是需要不断处理各种难题,这就是游戏开发人员的灾难源头,或者说,至少是他们产生职业倦怠的主要原因。

部分游戏公司已经积极采取了许多措施,希望能够消除职业倦怠。以拳头游戏公司为例,这家公司会在一段繁忙的工作周期之后,为所有员工放一个星期的假,让他们休息、放松。

一周的假期虽然不错,但这只是开始。

如果既希望按预算如期交付更优质的产品,同时又计划消除职业倦怠,做好员工关怀工作,那么游戏行业必须制定长远的解决方案。

这就是DevOps受青睐的原因。

游戏开发过程中,DevOps是否是解决开发人员职业倦怠的良药?

虽然有时游戏开发过于复杂,无法引入DevOps,但从很多方面来看,它都是游戏开发系统和流程的完美选择。

  1. DevOps帮助你专注于处理重要的事务。在游戏开发过程中,DevOps的一切宗旨就是减少浪费,尽可能提高自动化水平,同时吸取过去的经验教训积极调整工作进程。剔除所有不必要的事物,使你的团队可以专注于构建更优质的游戏。
  2. 围绕迭代开发构建。DevOps的核心是持续交付和持续学习。你不断地构建软件,发布软件,收集反馈意见。然后又重新开始——只有到了这个时候,你才能根据各种错误、客户反馈或投诉以及上次开发过程中影响开发流程的各种问题,调整你所采用的方法。对游戏开发来说,整个流程非常完美。每发布一个补丁,投放一个新的功能,或推出新的升级,游戏就会变得更快、更有效率。就像是职业生涯中的New Game Plus(新游戏增强版)。
  3. 易于监测工作业绩。没人喜欢仓促地推出产品。游戏公司需要寻找更好的方法,识别职业倦怠迹象,同时在开发初期确定游戏中潜在的问题。有了DevOps,你可以在开发过程中记录和监测尽可能多的信息,特别是CPU负载RAM分配、网络流量统计和内存使用率等信息。这样可以减少各种意外,同时还能根据游戏公司和DevOps的指标体系,实时地了解业绩表现。
  4. 弹性伸缩空间大。玩家最无法接受的游戏缺点就是延迟。如果云空间使用率可以自动调整,那么当大量用户同时访问服务器时,你也能够轻松应对,避免因配置了过多云储存空间,导致在空闲时间内产生大量浪费。
  5. 零停机时间。无需多言。当你部署了多个环境,并在不影响玩家的前提下更新游戏时,你可以让玩家们自行决定何时安装更新并重启游戏。另外,即便更新周期很紧,你也可以减轻团队的压力;不需要停机,你可以在更新或补丁准备就绪后再发布。
  6. 更安全的工作方式。正是出于这样的原因,宝可梦公司在发布《精灵宝可梦Go》游戏时,开始更加依赖DevOps。这家公司手握数百万儿童的数据,必须在保证数据安全的同时,扩展或缩减其基础架构。如果没有强大、可靠的DevOps开发技术以及支持DevOps的云基础架构,《精灵宝可梦Go》绝对没法在保障客户数据安全的前提下,增长得如此之快。
  7. 持续集成 (CI) 让大型团队和项目之间的沟通更顺畅。当你一次性集成多个小块代码时,在代码块存入代码库时就立即测试新代码、筛选出潜在问题,工作会变得容易得多。团队中的任何成员都可以进入CI流程的任何阶段来检查进度情况,而不必定期梳理检查大量数据。

游戏开发过程中DevOps的五大强劲趋势

那么,在游戏开发过程中,你需要从哪里开始使用DevOps呢?一般在这种情况下,随大流不会出错,而且许多DevOps趋势已经被业内游戏公司所采用。

云游戏开发

玩家希望游戏速度越来越快,细节越来越明确,沉浸式体验越来越好,但是每次更新过后,游戏都会越来越昂贵,玩家们必须配置更好的硬件,他们要承担的成本压力也越来越大。要满足玩家们的需求,游戏就必须支持普通的游戏机,不然就会错失大量潜在客户。

将游戏处理从玩家的硬件端转移到服务器端,可以打破这样的僵局,为游戏留出增长空间。事实上,一些游戏公司已经开始使用云计算,将游戏开发和游戏玩法抬升到一个新的高度。

以育碧游戏为例,作为《刺客信条》系列游戏的开发者,这家公司一直以其深度、复杂的虚拟世界而闻名,但是现在,这家公司已经开始使用云计算,迈向更远的道路。最新的《刺客信条》系列游戏不仅仅为玩家带来沉浸式的历史体验,还利用云计算的力量,促进人工智能驱动的游戏环境不断演变和发展。

持续交付和迭代显然就是DevOps的核心,而DevOps方法可以让云部署变得更容易。通过测量、持续学习和自动化等DevOps实践,你可以避免许多问题,例如网络问题和低延迟等,确保游戏开发者顺利完成云部署。

无服务器架构

无服务器计算本质上就是将搭建架构的责任从物理服务器转移到AWS Amplify或Azure等第三方架构供应商身上。

一旦你深入了解无服务器架构,你就会明白为什么DevOps在游戏开发中如此受欢迎。

首先,DevOps支持超级弹性伸缩。无需专门指派开发人员监测基础架构使用情况并进行手动调整,你的后端供应商可以根据需要自动扩展或缩减基础架构。也就是说,开发人员可以专注于编写和部署代码、微调流程、确保按计划实现目标,不必担心底层的所有架构。

但是,最关键的是,无服务器架构真正地加速了游戏开发的整个过程。当你不必担心后端基础架构时,你可以在需要时添加和修改代码,以发布新特性,修复错误。

在游戏开发这种极其讲究时效期的行业里,无服务器架构就成了无价之宝。如果有什么东西能够保证让开发人员放松下来,消除职业倦怠,那它肯定就是无服务器架构。

流行的DevOps工具

问题是:DevOps不是软件,也不是单一的活动。它是一套完整的工作方式,是你的团队所采用的全部流程和理念的组合。

当你拥有合适的工具后,你就能轻松地遵循DevOps的流程和理念。

所以,许多DevOps工具现在已经成为主要的游戏开发工具。

如果你希望在较短的周期内发布产品,并且能够同时处理各种项目的发布、补丁和更新,那么你就需要使用工具,在生产周期内尽可能提高效率。

对于游戏开发过程中的DevOps,工具有:

  • Perforce Helix Core,用于实现干净、简单的版本控制,让变更监测、测试运行和错误修复变得更容易。现在,Perforce已经成为微软新Azure游戏开发虚拟机中一个“基本工具”(基本工具还包括Incredibuild以及其他许多解决方案),未来或许会成为游戏开发协作的必选工具。让我们拭目以待。
  • Incredibuild,用于加速构建缓存和优化计算资源,加快开发周期,增加迭代频率。
  • Jenkins或企业版Jenkins——CloudBees,用于实现自动化持续集成,适用于各种编程语言。

容器

容器本身就能改变游戏开发。

利用容器代码、运行时间、系统库、系统工具和设置压缩软件包,你可以在几乎所有操作系统中,更轻松地以虚拟的方式运行软件。这意味着,不同开发人员之间可以实现更轻松的协作,最重要的是,以更快的速度进行跨控制台开发,且产生的错误更少。

像Docker这样的优质容器注册表,可以在基于Linux和Windows的应用程序上运行,从而轻松构建支持各种环境的软件。集成JFrog容器注册表和Helm chart存储库,可以进行Kubernetes部署。甚至,集成artifactory容器注册器,还能给予开发人员更多的访问和权限控制。

将容器化与DevOps实践相结合,你还能开启一个全新的持续开发模式。你可以:

  • 在需要时启动和禁用容器。启动容器,用来测试游戏中的元素,然后回收容器。所有操作均在一致且可复制的环境中完成。
  • 按照“构建一次,部署多个”的策略,以更快的速度完成部署,尽可能减少故障。制品库中存储的‘映像’有助于轻松地快速创建大量相同的容器。这些容器可以快速部署到不同的环境中,在各种最优质、最可靠的制品中,你可以轻松地利用更多优势。

测试自动化

构建游戏,就是把各行各业的大量专业人才聚集在一起,让他们创造出一个连贯流畅的作品。就像是把米开朗基罗、帕瓦罗蒂、莎士比亚和毕加索召集在一起,请他们创造一件艺术杰作。不过,数以百万计的人员会不断通过窗口询问他们是否完成任务。

如果你是游戏开发者,你肯定知道全盘测试和频繁测试的重要意义。所以您需要在游戏开发过程中使用DevOps,DevOps应该是工作过程中的一个重要组成部分。

但说起来容易,做起来难。理想情况下,你只需要在可能的控制台和环境下,结合各种可能的消费者行为,定期测试各部分代码。但是,手动运行所有测试,几乎是不可能的,特别是大规模测试。

单元测试——利用专门的程序测试其他程序的性能,通过自动化处理测试过程中伴随的部分简单、重复性任务,比如创建角色、启动游戏或执行少数基本命令时,可以减轻员工的负担。

自动化测试面对更复杂的测试任务没有手动测试这么好,但是许多游戏公司发现,即便只是剔除一些重复性的小任务,就可以大大缓解开发人员的职业倦怠。

DevOps是否真的改变了游戏?

DevOps并没有完全掌控整个游戏开发行业,至少现在还没有。

这个行业充满复杂的流程,各种优先事项相互冲突,员工承受着巨大的交付压力,导致一些游戏公司不得不苦苦挣扎,寻找彻底转变其工作方式的机会。

很明显地,当游戏公司找到机会投入新工具并采用DevOps流程后,就会产生巨大的影响。

最重要的是,这种影响不仅仅是确立更高的底线,或者创建更好用的执行套件。受DevOps影响最大的群体,往往是游戏公司最关心的两个群体:开发人员和客户。

作者:
Joseph Sibony,Incredibuild高级内容经理。他一辈子都在跟技术打交道,不论是硬件、软件,还是二者之间的结合。他从事数据科学和网络安全方面的工作,撰写了大量关于技术与社会相结合的文章。

文章来源:https://www.incredibuild.cn/blog/youxikaifaguochengzhongdevopsruhegaibianyouxigongsidegongzuofangshi

相关文章:

研发效能 | DevOps如何改变游戏公司工作方式?

如果你是游戏开发者,那么在过去几年里,你可能会觉得有人给了你一把双刃剑。 整个行业不断蓬勃发展,但玩家的预期值也越来越高。玩家们总是希望游戏体验能够更快、更真实、更具创造性。此外,他们还希望能够定期推出新的游戏和更新…...

Mongo聚合和Springboot整合Mongo聚合

聚合(aggregate)是基于数据处理的聚合管道,每个文档通过一个由多个阶段(stage)组成的管道,可以对每个阶段的管道进行分组、过滤等功能,然后经过一系列的处理,输出相应的结果。 语法格式:db.集合名称.aggregate({管道:{表达式}}) 常用管道如下: $group: 将集合中的⽂…...

第06章_索引的数据结构

第06章_索引的数据结构 🏠个人主页:shark-Gao 🧑个人简介:大家好,我是shark-Gao,一个想要与大家共同进步的男人😉😉 🎉目前状况:23届毕业生,目…...

不确定的市场,确定的增长,海尔智家2022全球再逆增

文|螳螂观察 作者| 余一 上市公司2022年年报逐渐进入密集披露期,在当前的年报季窗口,各家公司的业绩情况被高度关注。 3月30日晚,海尔智家发布了2022年财报。财报显示,2022年海尔智家实现收入2435.14亿元,同比增长7…...

测试老鸟手把手教你python接口自动化测试项目实战演示

目录 前言 一、项目准备 二、项目流程 三、完整代码 四、总结 前言 在进行接口自动化测试项目实战之前,我们需要先了解什么是接口自动化测试。接口自动化测试是通过自动化脚本模拟用户请求和服务器响应的过程,以检测接口是否符合预期,确…...

一起来学5G终端射频标准(Coherent UL-MIMO测试要求)

01 — Coherent UL-MIMO测试要求 首先什么是Coherent?它的英文释义是:(of ideas, thoughts, argument, theory, or policy) logical and consistent,翻译过来就是:(看法、思想、论证、理论或政策等&…...

计算广告(五)

Nobid Nobid(在某手有时也叫MCB,在Facebook叫Lowest Cost)是指广告主不用(也不能)对转化成本进行出价,而是出一个预算(大多数是日预算),然后投放平台的目标是在时间范围…...

排序输入的高效霍夫曼编码 | 贪心算法 3

前面我们讲到了 贪心算法的哈夫曼编码规则,原理图如下: 如果我们知道给定的数组已排序(按频率的非递减顺序),我们可以在 O(n) 时间内生成霍夫曼代码。以下是用于排序输入的 O(n) 算法。1.创建两个空队列。2.为每个唯一…...

奇异值分解(SVD)和图像压缩

在本文中,我将尝试解释 SVD 背后的数学及其几何意义,还有它在数据科学中的最常见的用法,图像压缩。 奇异值分解是一种常见的线性代数技术,可以将任意形状的矩阵分解成三个部分的乘积:U、S、V。原矩阵A可以表示为&#…...

Java如何从yml文件获取对象

目录一、背景二、application.yml三、ChinaPersonFactory.java四、使用示例一、背景 在 SpringBoot 中,我们可以使用 Value 注解从属性文件(例如 application.yml 或 application.properties)中获取配置信息,但是只能获取简单的字…...

vue使用tinymce实现富文本编辑器

安装两个插件tinymce和 tinymce/tinymce-vue npm install tinymce5.10.3 tinymce/tinymce-vue5.0.0 -S 注意: tinymce/tinymce-vue 是对tinymce进行vue的包装,主要作用当作vue组件使用-S保存到package.json文件 2. 把node_modules/tinymce下的目录&a…...

yolov4实战训练数据

1、克隆项目文件 项目Github地址:https://github.com/AlexeyAB/darknet 打开终端,克隆项目 git clone https://github.com/AlexeyAB/darknet.git无法克隆的话,把https修改为git git clone git://github.com/AlexeyAB/darknet.git修改Makef…...

第十四章 DOM的Diff算法与key

React使用Diff算法来比较虚拟DOM树和真实DOM树之间的差异,并仅更新必要的部分,以提高性能。key的作用是在Diff算法中帮助React确定哪些节点已更改,哪些节点已添加或删除。 我们以案例来说明。 使用索引值和唯一ID作为key的效果 1、使用索引…...

MySQL调优

MySQL调优常见的回答如何回答效果更好业务层的优化如果只能用mysql该如何优化代码层的优化SQL层面优化总结常见的回答 SQL层面的优化——创建索引,创建联合索引,减少回表。再有就是少使用函数查询。 回表指的是数据库根据索引(非主键&#…...

《Flutter进阶》flutter升级空安全遇到的一些问题及解决思路

空安全出来挺久了,由于业务需求较紧,一直没时间去升级空安全,最近花了几天去升级,发现其实升级也挺简单的,不要恐惧,没有想象中的多BUG。 flutter版本从1.22.4升到3.0.5; compileSdkVersion从1…...

最值得入手的五款骨传导耳机,几款高畅销的骨传导耳机

骨传导耳机是一种声音传导方式,主要通过颅骨、骨骼把声波传递到内耳,属于非入耳式的佩戴方式。相比传统入耳式耳机,骨传导耳机不会堵塞耳道,使用时可以开放双耳,不影响与他人的正常交流。骨传导耳机不会对耳朵产生任何…...

HashMap源码分析 (1.基础入门) 学习笔记

本章为 《HashMap全B站最细致源码分析课程》 拉钩教育HashMap 学习笔记 文章目录1. HashMap的数据结构1. 数组2. 链表3. 哈希表3.1 Hash1. HashMap的数据结构 数据结构中有数组和链表来实现对数据的存储,但这两者基本上是两个极端。 1. 数组 在生成数组的时候数…...

6 使用强制类型转换的注意事项

概述 在C语言中,强制类型转换是通过直接转换为特定类型的方式来实现的,类似于下面的代码。 float fNumber = 66.66f; // C语言的强制类型转换 int nData = (int)fNumber; 这种方式可以在任意两个类型间进行转换,太过随意和武断,很容易带来一些难以发现的隐患和问题。C++为…...

Leetcode.939 最小面积矩形

题目链接 Leetcode.939 最小面积矩形 Rating : 1752 题目描述 给定在 xy平面上的一组点,确定由这些点组成的矩形的最小面积,其中矩形的边平行于 x 轴和 y 轴。 如果没有任何矩形,就返回 0。 示例 1: 输入&#xff1…...

Springboot项目快速实现过滤器功能

前言很多时候,当你以为掌握了事实真相的时间,如果你能再深入一点,你可能会发现另外一些真相。比如面向切面编程的最佳编程实践是AOP,AOP的主要作用就是可以定义切入点,并在切入点纵向织入一些额外的统一操作&#xff0…...

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑:陈萍萍的公主一点人工一点智能 未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战,在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...

智慧医疗能源事业线深度画像分析(上)

引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...

Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?

Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以? 在 Golang 的面试中,map 类型的使用是一个常见的考点,其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...

深入浅出:JavaScript 中的 `window.crypto.getRandomValues()` 方法

深入浅出:JavaScript 中的 window.crypto.getRandomValues() 方法 在现代 Web 开发中,随机数的生成看似简单,却隐藏着许多玄机。无论是生成密码、加密密钥,还是创建安全令牌,随机数的质量直接关系到系统的安全性。Jav…...

学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1

每日一言 生活的美好,总是藏在那些你咬牙坚持的日子里。 硬件:OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写,"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...

Module Federation 和 Native Federation 的比较

前言 Module Federation 是 Webpack 5 引入的微前端架构方案,允许不同独立构建的应用在运行时动态共享模块。 Native Federation 是 Angular 官方基于 Module Federation 理念实现的专为 Angular 优化的微前端方案。 概念解析 Module Federation (模块联邦) Modul…...

C# 类和继承(抽象类)

抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...

NFT模式:数字资产确权与链游经济系统构建

NFT模式:数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新:构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议:基于LayerZero协议实现以太坊、Solana等公链资产互通,通过零知…...

tree 树组件大数据卡顿问题优化

问题背景 项目中有用到树组件用来做文件目录,但是由于这个树组件的节点越来越多,导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多,导致的浏览器卡顿,这里很明显就需要用到虚拟列表的技术&…...

Go语言多线程问题

打印零与奇偶数(leetcode 1116) 方法1:使用互斥锁和条件变量 package mainimport ("fmt""sync" )type ZeroEvenOdd struct {n intzeroMutex sync.MutexevenMutex sync.MutexoddMutex sync.Mutexcurrent int…...