Serverless AI训练营:课时1:Serverless 解构在线游戏行业痛点(五)
课时1:Serverless 解构在线游戏行业痛点(五)
每个分片都会针对不同的格式进行转码,例如,如果有三个分片,每个分片需要转码为三种不同的格式,那么我们会启动九个执行环境来处理。这可能有点抽象,但我可以通过演示来说明。
例如,我们设置了一个触发器来监听特定目录的上传事件。只要您将视频上传到这个目录,触发器就会自动触发相关函数。在函数内部,会启动一个工作流程,该工作流程包括四个函数。我们可以在文件管理器中查看上传的视频。
假设您上传了一个MP4视频,触发器已经自动启动了相关函数,该函数已经触发了工作流程。我们可以查看工作流程是否已启动。我们可以看到工作流程的进度,它已经完成了一些步骤,目前正在进行合并操作。工作流程记录了每个步骤的参数和状态。
现在,它已经完成了所有步骤,这个任务已经完成。我们可以验证一下它是如何完成的。工作已经完成,我们可以看到它是否将处理后的视频上传到了指定目录。
当您上传视频后,它经过了并行转码,将视频转码为三种不同的格式,如MP4、AVI和WMV。每种格式都经过了分片和转码处理。
这个过程实际上已经进行了加速,我们可以查看一下。当然,实际视频处理不可能如此之快,但我们可以看一下整个流程的执行时间。总共花了19秒,这是因为每个分片的处理时间大致在29秒左右,这是因为前面的操作是并行的。接下来,我们将详细展示一下,就是上传一个文件后,它如何自动触发函数。对于用户来说,这个函数实际上只执行了四个主要任务。
首先,用户编写了四个函数。第一个函数用于触发整个流程。这个函数触发了一个工作流,然后这个工作流编排了后续的函数。
第二个函数是转码函数。用户只需要定义这些函数,然后在工作流中进行编排。工作流定义了每个步骤使用的函数,以及如何并行执行它们。用户只需定义好这些内容即可。
用户上传文件后,触发了第一个函数,这个函数会发起工作流。工作流中定义了每个步骤使用的函数,以及它们的执行顺序。如果某个步骤由于网络或其他原因失败,用户可以定义退避策略,例如,最多重试16次等。这些都是在工作流中进行定义的,如果用户自己实现,会非常复杂。
第二步是将第一步的输出传递给第二步。用户只需编写这些函数,定义好它们的逻辑即可。这种方式实际上实现了一个弹性高可用的事件驱动的多媒体转码系统,支持多并行处理。
为了展示工作流的并行特性,我们模拟了同时上传了10个文件的情况,但看起来似乎出现了一些问题。
在刚刚举的这个例子中,发生了一些错误。实际上,这个错误是在第一步发生的。我们可以检查一下是否存在这个视频文件,看起来这个视频文件并不存在。让我们尝试上传一个存在的视频文件,以确保一切正常。好的,现在我们可以看到已经触发了多个流程,因为我刚刚进行了一个模拟上传的压力测试。
因为在第一步出现错误,文件已经不存在,所以我重新上传了一个视频文件。你可以看到这10个任务在并行执行,每个任务又并行进行了分片和转码。实际上,我对视频进行了三种格式的转码。原始视频大约有90秒,被切割成了30秒的片段,每个片段再进行了三种格式的转码。这意味着对于工作流来说,它需要使用9个执行环境,而我刚刚模拟了10个流程,总共使用了90个执行环境。
你可以看到整个过程非常迅速,每个任务的完成时间都在14:43左右,这意味着它们都非常快速地完成了。每个任务的执行时间大约在30秒左右,所以它们都在相同的时间内完成。每个任务都生成了两个转码后的文件,总共有10个工作流,每个都生成了两个文件。
昨天有一位老师提出了一个问题,关于实时性。通过这个案例,我展示了这个系统的实时性。因此,通过这个演示,我认为我们已经成功地实现了一个高度可用的系统,用户只需要考虑这五个函数以及工作流的编排,就可以实现一个非常高效的系统。
八、实现游戏服务快速全球部署
在游戏领域,全球部署的功能变得越来越重要,尤其是对于许多国内游戏厂商来说,他们已经开始着手海外市场。因此,对于许多客户来说,系统的集成能力非常关键。
游戏服务不仅需要考虑游戏逻辑,还需要管理数据库、Elasticsearch等各种资源。快速进军海外市场时,能够将国内的游戏逻辑快速复制到海外是至关重要的。
总结一下,虽然我们讨论了游戏场景的具体实施,但这些原则也可以扩展到其他领域。只要涉及到计算密集型任务,我们刚刚演示的音视频处理就是一个例子。
另一个方面是对于一些短期特性,你可能不希望购买和维护服务器等,比如游戏中的激活码、打包、广告投放等。类似的情况在学校或公司也会出现,比如公司的年会抽奖小游戏,可能只在年会期间使用,但如果使用函数实现抽奖活动,成本将大大降低。
在学校中也可能需要组织各种活动,例如晚会或互动打卡活动。微信小程序等技术已经成熟,因此采用适当的架构来实现这些学校活动是一个很好的解决方案。
最后,对于一些轻量级游戏,比如模拟养成类游戏或服装换装游戏,通常不需要复杂的战斗同步逻辑,主要涉及数据库的变化和背包管理。这时,使用函数实现也是一个不错的选择。
通过今天的游戏场景案例,我们进一步详细探讨了昨天提到的架构原则,将其具体应用到不同场景中。这些原则可以帮助我们更好地理解如何通过具体案例实现架构设计。