它揭秘LOL背后的基础设施丨关键角色”调度”

  
  

欢迎来到钨织物用户案例系列文章,一起发现TF的更多应用场景。“揭秘LOL”系列的主人公是钨织物用户防暴游戏游戏公司,作为LOL《英雄联盟》的开发和运营商,防暴游戏面临全球范围复杂部署的挑战,让我们一起揭秘LOL背后的“英雄们”,看他们是如何运行在线服务的吧。
凯尔·艾伦和卡尔·奎因(文章防暴游戏)

     

揭秘LOL背后它的基础设施丨关键角色”调度

  

我们是凯尔·艾伦和卡尔?奎因在防暴的基础架构团队工作。欢迎阅读这个系列的第二篇文章,详细介绍我们如何在全球范围内部署和操作后端功能。在本文中,我们将深入探讨部署生态系统的第一个核心组件:容器调度。

  

在乔纳森的第一篇系列文章中,讨论了防暴的部署历史和我们面临的挑战。特别是,他概述了当我们为《英雄联盟》不断添加基础架构设施时,尤其是面对“为每个应用程序手动配置服务器”这样的场景下,我们软件部署难度不断加剧后。来,出现了一个名为码头工人的工具,改变了我们的服务器部署方法,进一步在我们内部就迭代出来的海军上将,它是我们用于集群调度和管理的内部工具。

  

重要的是,应用程序部署的旅程还远远没有结束,它还在不断发展,我们正在为下一个阶段做准备(可能采用直流/OS,稍后讨论)。本文介绍了如何到达这一步,以及为什么做出这样的决定,希望其他人也可以从这个故事中有所收益。

  

什么是调度(调度),为什么要调度

  

当码头工人横空出世,并且Linux容器化成为一种更广为人知的技术时,我们意识到,可以通过容器化基础架构的实施而受益.Docker容器映像提供了一个不变的,可部署的“神器”,它可以一次构建并部署在开发,测试和生产中。此外,它还保证生产环境中运行的映像的依赖性,与测试期间的依赖性完全相同。

  

另一个好处尤其重要:码头工人允许将部署单元(容器)与计算单元(主机)解耦,它通过利用调度程序将容器分配给主机(希望以一种智能的方式),从而消除了服务器与应用程序之间的耦合——给定的容器可以在任意数量的可能的服务器上运行。

  

通过将后端服务打包成码头工人映像,并且可以随时将其部署并扩展到服务器集群,我们应该能够迅速适应变化。我们可以添加新的玩家功能,当流量增加时进行扩容,并快速推出更新和修复程序。在考虑将容器内的服务部署到生产环境时,需要解决三个主要问题:

  
      <李>给定一个主机集群,如何选择一组特定的主机来接收一组容器?李   <李>这些容器实际上是如何在远程主机上启动的?李   <李>容器“死机(或者关机)”时会发生什么?李   
  

这三个问题的答案是,我们需要一个调度程序——一种在服务集群层面运行并执行我们的容器策略的服务。调度程序是维护集群,确保容器在正确的位置运行,以及在容器退出时重新启动它们的关键组件。

  

例如,我们可能要启动诸如Hextech制作之类的服务,该服务需要六个容器实例来处理其负载。调度程序负责查找具有足够内存和CPU资源以支持这些容器的主机,并执行使这些容器运行所需的任何操作。如果这些服务器之一发生故障,调度程序还负责为受影响的容器查找替换主机。

  

当我们决定使用调度程序时,就快速进行原型设计,以便了解容器化服务在生产中是否适合我们。此外,我们需要确保现有的开放源代码选项可以在目前的环境中运行,或者确保维护人员愿意接受我们的调整。

  

为什么要自己写

  

在开始编写上将调度程序之前,我们调查了现有集群管理器和调度程序的状况。都有谁在码头工人主机集群之间调度容器,它们是如何做到的?它们的技术还能解决我们的问题吗?

  

在最初的研究中,我们调研了一些项目:

  

<强>便+马拉松

  
      <李>这些技术已经相当成熟并且可以大规模使用,但是安装起来却复杂且棘手,这使得它们难以进行尝试和评估。   <李>当时,它们对容器的支持还非常有限,没有跟踪码头工人的快速发展,并且在码头工人生态系统中表现不佳。   <李>它们不支持容器组(pods)——我们认为需要将跨斗容器与许多服务捆绑在一起(附注:双轮马车是容器日志的一种模式)。   

    它揭秘LOL背后的基础设施丨关键角色”调度”