当前位置: 首页 > 网络应用技术

如何在异步任务处理系统中解决耗时和高含量的问题?

时间:2023-03-08 21:48:16 网络应用技术

  简介:Alibaba Cloud功能计算FC为用户提供拆卸和异步任务处理服务,接近?3功能。用户只需要创建任务处理功能即可。通过控制台,命令行工具,API/SDK,事件触发器和提交任务的其他方法,它们可以处理任务灵活,可靠和观察。

  作者:

  无所谓

  当我们构建一个应用程序时,我们始终希望它能快速且低成本。实际上,我们的系统面临着各种挑战,例如不可预测的交通峰值。依赖的下游服务变得缓慢,但是少量请求消耗了大量的CPU/内存资源。这些因素通常会导致整个系统放慢速度,甚至无法响应请求。很多时候必须保留更多的计算资源,但是在大多数情况下,这些计算资源是空闲的。一种更好的方法是花费缓慢的时间消耗或消耗大量资源来处理请求处理的主要逻辑的逻辑并将其移交给更多资源弹性系统异步执行。它也节省了成本。

  一般而言,消耗大量资源,消耗大量资源或容易出现错误的逻辑非常适合剥离请求的主要过程和异步执行。例如,注册了新用户。注册成功后,系统通常会发送欢迎的电子邮件。可以从注册过程中剥离邮件。另一个示例是用户上传图片。上传图片后,通常需要生成不同尺寸的收缩图。但是,图片处理过程不需要包含在图片的上传处理过程中。用户上传图片后,可以完成该过程,并且可以将处理逻辑(例如收缩图)作为异步任务执行。在这种方式上,应用程序服务器可用于避免计算型任务,例如图片处理,图片处理,用户可以更快地做出响应。通用异步执行任务包括:

  Slack,Pinterest,Facebook和其他公司已广泛使用异步任务,以实现更好的服务可用性和更低的成本。根据Dropbox统计信息,在其业务场景中有100多种不同类型的异步任务。一个完整的功能性异步任务处理系统CAN可以带来重大好处:

  任务处理系统通常包括三个部分:任务API和可观察到的任务分配和任务执行。我们首先介绍这三个子系统的功能,然后讨论整个系统所面临的技术挑战和解决方案。

  该子系统提供了一组与任务相关的API,包括任务创建,查询,删除等。用户通过GUI,命令行工具和后者直接调用API方法。仪表板和其他方法也很重要。良好的任务处理系统应包括以下观察功能:

  任务分配负责任的任务计划分配。可以应用于生产环境的任务分配系统通常具有以下功能:

  任务分配的体系结构可以分为拉力模式和推动模式。拉动模式通过任务队列分布。拉动模式,推动模式添加了分布角色。任务人从任务队列,计划进行读取任务,然后将其推到适当的任务执行实例。

  拉动模式的结构很清楚。基于REDIS等流行软件,它可以快速构建一个任务分配系统,该系统在简单的任务方案中表现良好。但是,如果您想支持任务,则优先考虑任务,批处理暂停或删除,弹性资源扩展能力和其他复杂的业务方案是拉动模式复杂性的复杂性所必需的。在实践中,拉动模式面临以下主要挑战:

  推动模式的核心思想是决定实例的任务队列和任务执行,平台侧和用户之间的边界更清晰。用户只需要专注于任务处理逻辑的实现,而是需要任务队列和任务执行节点资源池负责该平台。推送模式的脱钩还允许扩展任务执行节点受任务队列的连接资源的限制,可以实现更高的灵活性。推动模式还引入了很多复杂性。任务的优先管理,平衡负载,调度分配和流量控制都负责配电设备。配电设备需要与上游和下游系统链接。

  通常,当任务场景变得复杂时,无论是拉动还是推动模式,系统的复杂性都不较低。但是,按下模式使边界和用户的边界更加清晰,并简化了用户的复杂性。因此,当一个具有强大技术实力的团队时,当实现平台级别的任务处理系统时,通常会选择推送模式。

  任务执行子系统管理一组工人节点,该节点执行任务以灵活而可靠的方式执行任务。典型的任务执行子系统需要以下功能:

  任务执行子系统通常使用K8S管理的容器簇作为资源池。K8S可以管理节点并派遣执行任务的容器实例,这些实例也可以执行适当的nodes.k8s也构建了-In支持(作业)和CRON Jobs支持,从而简化了使用难以使用的难度。Job Load.K8S有助于实现共享资源池,任务资源隔离和其他功能的管理。但是,K8S的主要能力在于POD/实例管理中。很多时候,需要开发更多功能来满足异步任务方案的需求。例如:

  注意:K8S中的作业与本文讨论的任务之间存在一些差异(任务).K8S作业通常包含一个或多个任务。本文的任务是原子的概念,并且对一个实例。执行时间从数十毫秒到几个小时不等。

  接下来,作者采用由阿里巴巴云功能计算出的异步任务处理系统作为探索大型多型多型多型兼职任务处理系统的一些技术挑战和响应策略的示例。在阿里巴巴云功能平台上,用户只需要创建任务处理函数,然后提交任务。整个异步任务的处理是弹性,高功能,并且具有完全的观察功能。在实践中,我们采用了各种策略来实现隔离,望远镜,负载,负载平衡和流动控制多头环境,并顺利处理大量用户的高动态变化。

  如前所述,异步任务系统通常需要队列分发以完成任务。当任务处理中心对应于许多业务方,对于每个应用程序/功能,它不再可行,甚至每个用户都可以分配单独的queue resources。大多数应用程序是长尾巴,呼叫低频会导致大量队列连接资源的浪费。查询大量队列还降低了系统的可扩展性。

  但是,如果所有用户共享相同的队列资源,他们将面临经典的“嘈杂邻居”问题。在拥挤队列中,紧急情况的应用用于影响其他应用程序。

  实际上,该函数计算构建动态队列资源池。一开始,资源池中有一些队列资源,并且应用程序将映射到某些队列。如果某些应用程序的流动迅速增长,系统将迅速增长,系统将会采用各种策略:

  在多范围的环境中,防止“驱动器”对系统造成灾难性损害是系统设计的最大挑战。驱逐舰可能是DDOS攻击的用户,或者系统错误负载在某些角案件下触发。下图显示了一个非常受欢迎的架构。所有用户的流量都以圆形旋转的方式均匀地发送到多个服务器。当所有用户的流量达到期望时,系统运行良好,每个服务器的负载均匀,某些服务器的停机时间确实如此不影响整体服务的可用性。但是,当出现“驱逐舰”时,系统的可用性将具有很大的风险。

  如下图所示,假设红色用户受到DDO的攻击或他的某些请求可能会触发服务器的停机错误,那么他的负载可能会击败所有服务器,从而导致整个服务无法获得。

  上述问题的本质是,任何用户的流量都将路由到所有服务器。当面对“驱逐舰”时,这种模式没有任何负载隔离能力是非常脆弱的。对于任何用户,如果他的负载仅在某些服务器的路线上,他可以解决这个问题吗?如下图所示,任何用户的流量最多2个服务器。即使两个服务器都关闭,绿色用户的请求仍然不受影响。此用户负载的负载模式是部分而不是所有服务器,都可以很好地实现隔离额,并降低了无法获得服务的风险。成本是该系统需要准备更多的冗余资源。

  接下来,让我们调整用户负载的映射方法。如下图所示,每个用户的负载均匀地映射到两个服务器。不仅是负载更加平衡,但即使两个服务器都关闭,也更好除了红色外,用户的负载不受影响。如果我们将分区的大小设置为2,那么从3个服务器中选择2个服务器的组合方法具有C_ {3}^{2} = 3,也就是说3个可能的分区方法。通过随机算法,我们在分区上均匀地绘制负载,因此,如果任何分区不使用,它将影响高达1/3的负载,我们有100台服务器,并且分区的大小仍然是2,因此分区的方法具有C_ {100} {2} =4950。单个分区不能仅影响1/4950 = 0.2%的负载。随着服务器数量的增加,随机分区的效果越明显。负载随机分区是一个非常简单但功能强大的模型,在确保多量系统的可用性方面起着关键作用。

  函数计算的任务分布采用推送模式,因此用户只需要专注于任务处理逻辑的开发,并且平台和用户之间的边界非常清晰。在推送模式下,有一个角色任务分配设备的负责,该设备负责从任务队列中拉出任务并分配给下游任务处理实例。任务分配器应能够根据下游处理功能调整任务分配速度。积压,我们希望不断提高调度工人池的任务分配能力;当上游处理能力取决于上游处理能力时,工人池将能够感知状态并保持相对稳定的分配速度;处理任务后,任务完成。工作池应缩小并将分配能力释放到其他任务处理功能。

  实际上,我们借用了TCP拥塞控制算法的想法,并采用了AIMD算法对工人池的扩展能力(添加剂增加的乘法减少,并减少)。当用户在短时间内提交大量任务时,转让人不会立即向下游发送大量任务。取而代之的是,它将根据“和谐增长”策略线性提高分配速度,以避免对下游服务的影响。收到下游服务的流量控制错误后,使用“减少乘法”策略来根据工人池的规定一定比例。流量控制误差需要在触发收缩之前满足错误率和错误的阈值,以避免工作池的频繁扩展能力。

  如果任务的处理能力长期以来一直落后于任务的生产能力,则队列中将有越来越多的任务,尽管可以使用多个队列,并且可以使用流道来减少租户之间的相互影响。但是,在任务的积压超过一定阈值之后,反馈对上游任务生产者的压力,例如启动流量控制任务的请求。背压的实施将更具挑战性。例如,共享任务分配系统A和B应用程序的资源。

  如何在多个租赁方案中识别需要流量控制的对象非常具有挑战性。我们已经从样本中学到了学习,并在实践中持有算法,并取得了良好的结果。感兴趣的读者可以参考相关论文。

  根据异步任务处理系统的体系结构和功能的分析,我们将异步任务处理系统的能力分为以下三层:

  异步任务是建立弹性,高可用性和响应快速应用的重要手段。本文介绍了异步任务的适用场景和收入,并讨论了典型的异步任务系统的体系结构,功能和工程实践。异步任务处理平台的高复杂性,该平台可以满足各种业务方案和可弹性可扩展任务处理平台的需求。阿里巴巴云功能计算FC以使用户打开框,这是异步任务处理服务,即接近级别?3级别3功能。用户只需要创建任务处理功能。通过控制台,命令行工具,API/SDK,事件触发器和其他用于提交任务的方法,它们可以将任务处理灵活,可靠和观察到任务。异步任务的功能计算涵盖了从毫秒到24小时的任务处理时间。它被阿里巴巴云数据库的自制服务DA,Apleay小型程序压力测试平台,NetEase Cloud Music,New Oriental,Focus Media和Milian广泛使用。

  附录

  参考链接:

  [1] Slack Engineering:

  https://slack.engineering/scaling-slacks-job-zeue/

  [2] Facebook:

  https://engineering.fb.com/2020/08/17/production-engineering/async/

  [3] Dropbox统计信息:

  https://dropbox.tech/infrastructure/asynchronous-task-scheduling-tropbox

  [4] Netflix Cosmos平台:

  https://netflixtechblog.com/the-netflix-cosmos-platform-35c14d9351ad

  [5] Keda:https://keda.sh/

  [6]自动化异步工作队列:

  https://d1.awsstatic.com/architecture-diagrams/architecturediagrams/autoscaling-asynchronous-job-zeeues.pdf

  [7]异步任务:

  https://help.aliyun.com/document_detail/372531.html

  [8]样品并保持算法:

  https://dl.acm.org/doi/10.1145/633025.633056

  [9]无服务器探索NetASE云音乐和视频算法的路径:

  https://developer.aliyun.com/article/801501

  [10]其他异步任务案例:

  https://developer.aliyun.com/article/815182

  原始链接:http://click.aliyun.com/m/1000346336/

  本文是阿里巴巴云的原始内容,未经许可就无法重印。

  原始:https://juejin.cn/post/7111254401775304712