亚搏网站技术实习生2020年:普通游戏技术和工具/基础设施

骚乱实习计划存在帮助玩家推动他们的专业和个人发展。这是2020实习系列中的第二个帖子 - 务必查看第一篇文章也是。

感谢今年夏天为他们的辛勤工作和优秀的项目提供所有实习生!

一般游戏技术

西尔维亚华

角色:软件工程师

团队:商务部

你好!我的名字是Sylvia“隐藏花生”华。我在Rensselaer理工学院学习计算机科学,今年夏天,我正在商业团队作为软件工程师实习生。商务团队构建了允许玩家购买虚拟货币如RP,硬币和Valorant点的工具。

今年夏天,我专注于UI和UX改进。主要目标是让玩家在购买流程期间感兴趣,并设置清晰的视觉语言。这是至关重要的,所以购买决策很简单,玩家确切知道他们的购买。我的项目抛光了RP购买页面,同时与后端的其他团队集成了API。

澄清购买金额

我制作的一个有趣的变化是加强球员对他们收到付款的人数的看法。在过去,我们只显示了玩家正在购买的虚拟货币金额,以及总价格。在改进之后,玩家将有更直接的观点,他们获得了多少。

之前的迭代

当前的迭代

要实现此功能,我首先需要弄清楚存储虚拟货币数据的位置。内容访问平台管理此操作,并为我提供API进行访问。然后我只需要在后端中建立一个API调用,将值传递给前端,并在“购买详细信息”页面中呈现这些元素。具有挑战性的部分是,对于每个游戏和碎片,我们需要调用不同的URL并使用唯一的授权令牌。正如我们现在拥有多个游戏(将来会有更多的游戏),亚博论坛这种功能需要可扩展和可维护。要完成此操作,我使用JSON文件来维护所有这些属性。Spring框架可以直接将JSON文件映射到Java对象,简化配置管理。在已设置后端的所有内容之后,前端检索播放器的余额。

总的来说,今年夏天,我真的在骚乱中享受了乐趣,我每次都喜欢和我的团队合作。每个人都是超级支持,也很俏皮。我真的很高兴能够在我的团队以外的暴徒和学习不同类型的项目。我真的很高兴有机会在骚乱工作,绝对让我的夏天令人难以置信。

kumyl najeeb.

角色:软件工程师

团队:商会 - 市场豆荚

大家好!我的名字是库米尔“难以捉摸”纳吉布,今年夏天,我在Riot的商人公会团队的MarketplacePod上做了一名软件工程师实习生。我们为你能赚或买的任何东西提供技术支持联盟,TFT,薄膜晶体管移动的。今年夏天,我帮助创造了介绍适用于商店物品的优惠券的基础和发现,以及跟踪这些优惠券的玩家库存跟踪服务。

市场POD既有前端和后端角色,我们处理面向玩家的商店。在前端,我们使用Ember.js,并在后端,我们主要使用Java。

我最大的项目是帮助建立新的商店功能。

首先,让我们来看看订单的旅程。当播放器放置订单时,前端调用管理订单购买的后端API。在此之后,对处理订单路由的“商家调度程序”服务进行呼叫。商家调度员负责弄清楚哪个“商家”(订单处理程序)将管理订单。这是玩家将在订单中收到他们要求的“提供”的地方。

这就是我工作的地方。我的任务是添加将优惠券应用到后端订单的功能。很多这项工作都证明了这一点。这些服务主要是用Java和Hermes框架构建的,因此我添加了一些类来管理优惠券应用程序。这意味着,当订单中出现了一个关联优惠券ID的新字段时,我可以使用该字段将其应用于订单中的报价。

我们还需要一种用播放器跟踪这些优惠券。我使用了一个小榛录的Java服务,其中一些端点实施了库存跟踪。此服务处理播放器,交易历史,历史优惠券跟踪,授予和删除优惠券所持持有的优惠券。所有这项工作都没有以前的代码或基础,所以这是一个伟大的我的机会不仅要应用我的技能,还可以从头开始建立一个全面的项目!

今年夏天,我真的很乐意举办骚乱的内部文化。骚乱超级投资于1次文化,我尽力最大限度地提高我的互动。每个人都总是兴奋和开放,以便为实习生,我能够快速理解和与文化搞!

肯卢

角色:软件工程师

团队:内容访问中心

你好!我是肯“chocoduk”鲁和我在密歇根大学学习计算机科学。今年夏天我是内容访问中心团队的软件工程师实习生。该团队为玩家的能力背后提供了购买皮肤,冠军和战明等物品的基础架构。

内容访问HUB拥有播放器如何使用游戏中购买和退款的后端,以获取游戏中的内容。CAH的核心方面是为API或支持服务等其他开发团队构建游戏无关的工具。我的项目专注于通过使用以设定的间隔运行的脚本监视器和报告故障来模拟玩家的角度来模拟购买和退款,并在平均持续时间内收集监视器的分析。

我的项目中使用的主亚搏网站要技术是一个名为新的遗物合成的服务,这是一种用于服务的合成监控的平台。综合监控是一种测试形式,开发人员在实时模拟用户的操作,以便更准确地了解可用性和延迟等度量,并且在故障情况下,能够更快地响应。对于我的项目,我创建了一个脚本,以测试CAH的订单的功能,并从播放器帐户的角度来回退款API,并在新遗物上创建了相应的监视器。新遗物还存储关于每个监视器运行的数据,我查询以获取成功率和延迟百分比的统计信息,以发送到我们的内部分析平台。

具有可用性统计和持续时间的新遗物界面

我的项目中的主要挑战是重构我的脚本融入了RMS。rms,这防暴短信服务,是播放器客户端接收其事务状态更新的方式。以前,我只在设定的时间间隔内轮询给定订单/退款请求的状态更新,这是对真实状态的不太准确的表示。为了成功地利用RMS,我必须获得一个RSO令牌并打开一个套接字来异步地侦听消息,这给回调和javascript承诺增加了很多复杂性,特别是因为我想在RMS花费太长时间或没有响应的情况下将旧的轮询方法合并为备份。另外,由于Javascript是单线程的,但是函数可以是异步的,所以找到一种方法来正确地按顺序分层是很有挑战性的,我希望按照这种顺序进行某些检查和进一步的调用。

该项目的另一个方面非常有趣的是使用Terraform,这是一种通过代码作为自己的脚本语言管理基础架构的方法。它是一种非常有趣的方式,用于通过命令行和一些文件,如新的遗物监视器,松弛通道等,如新的遗物监视器,松弛通道等。我也设法将Terraform脚本部署到AWS,允许其他团队成员共享基础结构状态并远程对其进行更改。

真正有趣的项目的最后一个方面是如何通过使用新的遗物查询语言,类似于SQL的自定义查询语言来处理如何处理分析报告。这是一个挑战规划查询数据如何分成不同方面,以报告基于区域,服务器或游戏的不同数据库。此外,我学会通过新的遗物添加自定义数据字段,即我稍后可以查询以报告默认字段无法提供的数据。

总的来说,我真的很喜欢在这里与我的团队和我的项目合作。这项工作真的很满足,我觉得我有很多关于团队和项目周期的经历,以及在技术上成长很多。我的团队在我所有的努力中一直超级支持,并始终向问题开放。最后,实习生事件非常有趣,我喜欢与其他实习生和一起玩游戏。亚博论坛这是一个很棒的体验!

克里斯本森

角色:软件工程师

团队:AI加速器

我的名字是Christopher“民兵小姐”Benson,我是Carnegie Mellon University的硕士学位。在今年夏天,我主要作为AI加速器团队的研究实习生,这是一个专注于尖端计算机科学的研发团队。

AI加速器团队有权承担更高的风险,高影响力,可能需要多年的时间才能承担果实。我们的工作涵盖了AI到程序生成的广泛技术,但最近特别专注于使用强化学习(RL)来创造在高水平下打击骚乱游戏的代理商。亚博论坛通过在未发布的修补程序上生成数据并余额更改捕获错误,这些RL代理商为我们的游戏提供了有价值的见解,该游戏可以补充播放数据,这是对采购缓慢而且昂贵的。亚博论坛

我的项目纯粹是研发,因为它专注于非暴力游戏。我致力于开发Deep RL代理商来玩一个名为Nethack的游戏,最近在Facebook AI Research(Fair)实验室的流行RL研究平台上最近发布了健身房。Nethack是一个极其困难的单人,在终端用ASCII艺术中播放的程序生成,同步,随机的roguelike游戏。

示例Nethack游戏,来源https://arxiv.org/pdf/2006.13760.pdf

我的工作还集中于最终将外部知识库(如广泛的Nethack Wiki)通过自然语言处理(NLP)进入RL代理商。

我们使用下面显示的架构培训了模型,该架构包含来自玩家统计,整个可见电平楼层和代理周围的立即区域的功能。我们后来在Ingame消息中添加为一个功能,计划将更高级的NLP技术合并为项目的未来工作。该特征组合并通过LSTM单元馈送,这有助于代理从状态到状态。然后通过最终多层的Herceptron(MLP)层馈送LSTM的输出以转换为动作空间以选择下一个移动。

初始基线模型,源https://arxiv.org/pdf/2006.13760.pdf

该模型是使用Tensorflow建造的,并使用INHOUSE分布式RL平台在AWS上进行培训,从而利用Kubernetes。我们设置了一个系统,使代理商的奖励功能可以很容易地定制,以促进不同的录音行为,例如收集金,探索更深层次的地板,吃食物等。此外,我们设置模板,以便额外的奖励信号在未来添加了鼓励更复杂的游戏玩法。

正如其他人所提到的,虽然很不幸的是,由于科维德的原因,实习时间变得很遥远,但我在Riot的工作经历非常棒,学到了很多东西。我进入这个夏天的时候几乎没有RL的经验,但是我的团队做了一个非常棒的工作,把我带到了速度上,真的让我从第一天起就觉得自己是暴动的一部分。

工具/基础设施

贾斯汀王

角色:软件工程师

团队:社会基础设施

你好!我的名字是justin wang,我目前是UC Berkeley的学生。今年夏天,我是社交基础设施团队的软件工程师实习生。社交基础架构(SI)负责社会系统的许多服务,如朋友列表,文字聊天,语音聊天等SI也负责构建新服务,以满足现有和新游戏的需求。亚博论坛

SI选择的主要语言是Erlang,这是一种相对利基的函数式编程语言,因其强调可伸缩性和可靠性而备受赞誉。大多数人,包括实习前的我在内,都对二郎完全不熟悉,这种情况使我今年夏天的经历更加令人满意,学习更加密集。我没有传统的独立实习生项目,而是能够直接与团队集成,实现长期存在和新问题的解决方案,其中一些问题我将在下面介绍。

内部社会图

我努力的问题之一就是在内部分析平台上移动骚乱内部社会图的变化。这是一个很棒的项目,因为 - 虽然对码比的变化是辅助和转录 - 它让我有机会熟悉SI和Riot工程的Modus Operandi,从社会图服务的设计到如何生活服务被发现和配置。除了编写代码外,我还能够体验部署过程,并通过内部测试环境将更改移动到生产中,目前今天运行。我还建立了一个命令行工具,用于与上述社交图服务进行交互。虽然最初创建以简化测试相关的HTTP请求,但此工具还支持播放器支持来解决许多受影响的朋友和块列表。

推送通知

我还为响应RIOR增加移动足迹而创建的新推送通知服务做出了贡献。这项服务旨在最大化骚乱利用推送通知的能力。移动游戏的普及和播放器注册过程的结合呈现了某个问题:用户是(RE)在应用程序安装时注册,因此重新安装将为同一用户创建冗余条目。一个简单的修复程序将在新注册时循环旧条目,但随后过度查询用户的日志将导致删除底层数据库。解决方案是,每个新的注册用户都将以某些可配置概率添加到队列中。查询队列条目是否有超过可配置的上限的注册,并且删除了这些条目。The emphasis on configurability is to allow for adjustments once the service is live: if it’s observed that few users ever reach the upper limit, the probability of being added to the queue can be lowered to reduce resource consumption, and if multi-device users seem to be the norm, the upper limit can be adjusted to avoid deleting valid entries. In general, I’m very grateful to have worked on live systems with considerations like this, as these are problems that hardly appear elsewhere.

结论

在工作之外,我们的实习生参加了几个事件,我享受的是午餐和学习的人,我们能够了解那些让他们成为现实的几项暴动计划。尤为令人乐趣,使我们对这些倡议的理解作为球员,粉丝对幕后发生的事情。Away from intern activities, I am also appreciative for Riot’s culture of open dialogue, which I was able to experience both in the steady communications between leadership and other Rioters and in the numerous one-on-ones that I had both within and outside of SI. Finally, and most importantly, I’m very grateful for the amount of support and trust shown to me by my manager, Kyle Burton, and the entire engineering team at SI.

会keatinge

角色:软件工程师

团队:RDX可操作性

你好!我会Keatinge,我目前正在研究Rensselaer理工学院的计算机科学。我今年夏天在RDX上作为一个软件工程师实习生:可操作团队。可操作性团队使开发人员更容易构建和监控其服务。

今年夏天,我建立了一项服务,将来自骚乱的几种不同的真理来源的数据提取,以提供用于确定与服务相关联的团队,贡献者,产品和代码存储库的API。例如,英雄联盟由数百种不同的微服务提供支持;如果其中一种服务开始触发警报,则很难追踪该特定服务的功能以及哪个团队可以帮助它恢复健康状态。

完成API后,我还建立了一个集成到控制台中,该工具用于检查RIOR的运行服务。该集成现在允许开发人员搜索服务,并立即看到与该服务相关的代码存储库,团队,产品和贡献者。

弄清楚谁拥有服务需要从骚乱中拉动来自各种不同系统的数据。我的服务搜索GitHub for相关代码存储库,查看部署工件,搜索Riot Data Model GraphQL API(有关每个员工的信息和骚乱的每个产品),并查看网络蓝图(指定哪些服务可以与之通信的配置文件另一个)。这些不同的信息来源中的每一个都提供了一小部分图片,我的服务在易于使用的API中将所有信息带到一起。

这个项目中最具挑战性的部分之一是使API具有良好的性能。弄清楚谁拥有一个服务需要大量的API调用,其中许多调用无法并行化。因此,我决定采用缓存体系结构。不是按需查找服务,而是每天查找两次服务并缓存结果。使用这种设计,不必等待10-20秒来完成查找请求,结果几乎可以立即从缓存中获得。

我真的很喜欢骚乱,因为这是一个令人难以置信的学习体验。从想法带来一个新的服务 - 同时令人生畏 - 这么多关于如何在骚乱中部署,配置和监控服务。在整个过程中,我绝对无法在没有我团队的令人难以置信的支持下进行。

罗伯特谭

角色:软件工程师

团队:IT设计与发展

你好!我是多伦多大学计算机科学专业的罗伯特“Ragekid”谭。今年夏天,我是IT设计与开发团队的骚乱软件工程师实习生,这是一个相当新的团队,负责骚乱的内部IT产品,例如懒人和其他工具来帮助工作流程。

amumubot.

今年夏天,我的实习项目是Amumubot,这是一个懒鬼,这是根据他们在其他地方列出的利益的骚乱渠道建议。骚乱的最佳部分之一是社区意识,并且在WFH的情况下,团队认为,优先考虑彼此的心理健康是非常重要的。实现这一目标的好方法是通过具有相似兴趣的暴徒休闲社区。

在写入最终的懒鬼之前需要发生几件事。首先,我需要创建一个Etl.将Slack通道数据汇总到常规计划中的数据存储中。接下来,我需要设计和提出一个图表数据库架构(我们使用neo4j)来存储摆动频道,主题和骚乱者之间的连接。这一步骤还需要改变我们目前的故事骚乱兴趣。一旦这一切都到位,我需要实际上建立摆脱频道和主题之间的连接。由于时间约束,我使用了一个与ETL一起运行的修改过的关键字匹配器。一旦这些都到位了,我需要利用Slack的开发平台(我使用螺栓)创建使用数据库中存储的连接的SLACKBOT,并在指定的计划中将其传送到骚乱者。

该项目的核心挑战之一围绕了图形数据库的概念。我们的团队利用Neo4J以节点和边缘的形式代表骚乱的所有类型数据之间的关系。我最终解决了看起来像:

其中边由箭头表示,节点由框表示。每个节点还包含存储与节点相关的信息的字段。从这里开始,找到暴徒可能感兴趣的通道的问题就像在“slack\u channel”节点和“worker”节点之间找到路径一样简单(如果我们暂时忘记箭头的方向)。

与主题相关的遗传频道的算法也需要相当多的思想。最初,该想法是一个简单的正则表达式匹配进程,它与频道名称和频道的描述匹配任何主题。但是,此方法失败,因为较短的主题可以错误地与某些频道描述错误匹配。例如,如果我们有一个名为“C”或“ART”的主题,则它可能会与包含字符“C”或包含单词“部分”的字符描述的频道描述匹配。一个替代方法是为了匹配整个词,但这也失败了,因为我们想要“团队战术”匹配“团队战术”和类似案例。最终匹配算法最终考虑了几个因素,以减少假正负匹配的数量。这些因素中的一些包括:主题的长度与描述的长度之间的比率,描述中主题的发生次数,以及该主题是否包括多个单词。

在整个项目中,我也有机会在基础设施方面与其他令人兴奋的技术作用。基础设施和部署几乎从未在学校学习过。要部署机器人,我只写了一个包含配置的YML文件,TerraForm将它们部署到具有单个命令的AWS上。AWS Lambda是另一个令人兴奋的技术,机器人很大杠杆。亚搏网站实质上,它允许我们调用一个函数,运行它,撕下它 - 不需要服务器。通过HTTP请求Slack根据各种事件发送事件处理程序。此设置需要在基础架构和部署方面的最小努力,同时自动设置日志记录。

迷你哈帕顿

在我的实习生项目之上,我们的团队还组织了一个微型哈克松,在那里我在Gachapon风格的游戏中工作英雄联盟关于松弛的人物,以刷新我的Slackbot开发技能。

夏璇谭

角色:软件工程师

团队:云服务集成

你好!我叫谭夏轩,是南加州大学计算机专业的硕士生。今年夏天,我在RDX云服务集成团队做软件工程师实习生。我们的团队致力于为Riot开发者提供一种简单而统一的方式来访问云服务。

Cloud Services集成允许用户通过在规范文件中定义这些资源并使用命令行工具部署来创建,更新和删除像MySQL数据库和Kafka群集等云资源。我的项目是为了增强当前的工具,并允许用户以方便的方式引导其MySQL数据库。具体而言,骚乱开发人员可以在同一规范文件中定义在数据库中创建的模式和数据库用户。

在这个项目之前,Riot开发人员有很多方法可以在团队中初始化可能有所不同的数据库。通过将Bootstrap配置建模到几行Yaml中,我们的云配置文件可以注意创建模式和用户。

此功能需要协调几个服务,因此第一步是定义数据结构和解析器,以便可以消耗yaml块,并且可以在组件之间转发消息。随着数据库部署可能需要很长时间,我们的云提供器处理异步请求,并定期调用资源状态。当数据库被提升时,我们执行初始化,确保数据库已准备就绪,然后在用户运行它上。

简而言之,我在Riot度过了一个硕果累累的夏天:实施一个项目,将其上线,收集反馈,并进行修改。更重要的是,我真的很喜欢这里的人们如何合作和共同成长。我学到的不仅仅是如何编写程序,还有沟通、团队合作和客户导向等软技能。

阿什温·帕蒂

角色:软件工程师

团队:RDX服务生命周期

嘿!我是ashwin“滞后4g lte”,我是弗吉尼亚大学的计算机科学专业。今年夏天,我作为骚乱开发人员体验的软件工程师实习生:服务生命周期团队。服务生命周期团队的主要目标是在骚乱的全球数据中心组织方便,更快,更符合更轻松,更快,更加一致。

服务生命周期团队拥有Riot的部署服务,它是一种工具和服务的集合,其摘要和简化各种数据中心微系统的部署过程。我的特定项目是关于优化准备检查,这是我们部署过程的重要组成部分。这涉及制作一个新的微服务,并在我们的部署服务的CodeBase上工作,这两者都在很大程度上在Golang编码。

在我们当前的体系结构中,我们确定部署过程是否已成功启动准备检查,基本上轮询了部署服务的特定端点,以确定它们是否成功启动。

最初,我们的部署服务负责直接在每位候选人身上进行准备检查。但是,如果他们跨越数据中心,我们的部署服务和候选人之间的网络连接可能会昂贵。为了减轻这一点,我被任务创造了一个专门的准备支票服务这将从我们的部署服务转发到每个已部署的服务,并存在于每个数据中心中。每当部署服务将进行交叉数据中心请求时,请求将通过该数据中心的关联就绪检查服务代理。这将卸载网络复杂性在Ready Check Service而不是部署服务,并减少我们必须管理的昂贵网络连接总数。这是网络连接在更改之前看起来像什么:

这就是添加就绪检查服务后网络连接的外观:

由于我的准备支票服务的目标是确保部署服务直接联系任何交叉数据中心服务,我选择使用a反向代理。要实现这一点,我使用了一个恰当的golang对象反向氧化,这将整个请求往返于预期目的地,并返回客户端。关于戈兰的反向代理有趣的是它的可扩展性。代理本身可以构造成具有若干中间件层,其用作顺序处理传入请求的方法。在我的服务的情况下,该图层相当简单 - 用于认证的一层,另一种用于重写逻辑的图层,以及用于错误处理的最终图层。代理本身绑定到我的服务上的API端点,这意味着在该特定端点上的任何良好的服务请求将通过代理自动路由。

作为我项目的一部分,我还有机会直接与骚乱的部署服务进行联系。这涉及动态添加新的网络连接,并编写新代码以形成并将请求发送到右侧就绪检查服务,如果启用了该功能。由于就绪检查服务是反向代理,因此创建请求非常简单,因此否则不得更改响应处理代码。这是因为响应有效地与部署服务称为它。

今年夏天对我来说最具挑战性的技术方面设计和架构我的解决方案与骚乱现有的基础设施无缝地工作,并首次与Golang一起使用。我的许多时间都在考虑解决问题的最佳方法,原型设计解决方案,并且通常因骚乱运行它们的微服务而被适应。我在这里工作时,我学会了关于Golang和网络的吨,实际上是我的第一个Golang项目有点有影响的奖励。

虽然我今年夏天的工作挑战了,但它也非常有趣!我真的很喜欢骚乱的时间,而且很大一部分是因为我合作的人。我团队中的每个人都非常乐于助人,真的很棒。从玩游戏,帮助我与编码一起亚博论坛,只是聊天随机的东西,我的团队和骚乱的其他人的人真的让我的体验令人惊叹!


查看我们的其他2020个实习生系列:

第I部分:传奇联盟、TFT和VALORANT

第二部分:一般游戏技术和工具/基础设施(本文)

发表于Sylvia Hua,Kumyl Najeeb,Ken Lu,Chris Benson,Justin Wang,将Keatinge,Robert Tan,夏轩谭,ashwin pathi