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

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

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

一般游戏技术

西尔维亚华

角色:软件工程师

团队:商业

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

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

澄清购买金额

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

之前的迭代

当前的迭代

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

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

kumyl najeeb.

角色:软件工程师

团队:商会 - 市场豆荚

大家好!我的名字是kumyl“eluminated”Najeeb,而今年夏天我一直是骚乱的商业公会团队的软件工程师实习生。我们为您可以赚取或购买的任何东西的技术贡献联盟TFT,TFT.移动。今年夏天,我帮助创造了介绍适用于商店物品的优惠券的基础和发现,以及跟踪这些优惠券的玩家库存跟踪服务。

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

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

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

这就是我的工作进来的地方。我被任务添加了将优惠券申请进入后端的订单。很多这项工作都是概念的证据。这些服务主要以Hermes框架为主的Java,因此我添加了管理优惠券应用程序的类。这意味着当订单与关联优惠券ID有一个新字段时,我可以使用它来将其应用于订单中的优惠。

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

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

肯卢

角色:软件工程师

团队:内容访问中心

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

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

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

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

我的项目中的主要挑战是重构我的脚本融入了RMS。rms,这防暴消息服务,播放器客户端如何接收有关其交易状态的更新。以前,我只是在一个设置的时间间隔内投票,以便更新给定的订单/退款请求的状态,这是实际状态的不太准确的表示。要成功利用RMS,我必须获取一个RSO令牌并打开一个套接字以异步收听消息,这增加了回调和JavaScript承诺的大量复杂情况,特别是因为我想将旧的轮询方法纳入案例中的备份where RMS took too long or didn’t respond. In addition, because Javascript is single-threaded but functions can be asynchronous, it was challenging figuring out a way to correctly layer the order in which I wanted certain checks and further calls to be made.

该项目的另一个方面非常有趣的是使用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。我们设置了一个系统,使代理商的奖励功能可以很容易地定制,以促进不同的录音行为,例如收集金,探索更深层次的地板,吃食物等。此外,我们设置模板,以便额外的奖励信号在未来添加了鼓励更复杂的游戏玩法。

正如其他人所提到的那样,虽然很遗憾,所以实习由于Covid而遥远,但我仍然有一个在骚乱中工作的美妙体验,并学到了这么多。我的夏天走进了夏天,但我的团队做了一个梦幻般的工作,让我迅速,真正让我感觉像是一天的骚乱。

工具/基础设施

贾斯汀王

角色:软件工程师

团队:社会基础设施

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

SI的首选初级语言是Erlang,一种相对利润的功能规划语言,旨在强调可扩展性和可靠性。大多数人,我自己在这个实习之前,完全不熟悉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_channel”节点和“工作者”节点之间找到的路径一样简单(如果我们忘记了箭头的方向)。

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

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

迷你哈帕顿

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

夏璇谭

角色:软件工程师

团队:云服务集成

嗨!我是南加州大学硕士学位的硕士学位,是计算机科学大学。今年夏天,我作为RDX云服务集成团队的软件工程师实习生。我们的团队专注于提供骚乱开发人员一种简单而统一的访问云服务。

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

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

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

简而言之,我在骚乱中度过了富有成效的夏天:实施一个项目,在线,收集反馈和修改。更重要的是,我真的很享受人们如何在这里合作和茁壮成长。我学到的不仅仅是如何编写程序,而且是沟通,团队合作和客户方向等软技能。

ashwin pathi

角色:软件工程师

团队:RDX服务生命周期

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

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

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

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

这就是在Ready Check Service添加后网络连接在添加后的样子:

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

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

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

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


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

第I部分:联盟,TFT和Valorant

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

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