欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

第 1 章 多租户分布式系统简介--分布式系统的性能问题

最编程 2024-06-02 14:43:02
...

          随着越来越多的节点被添加到分布式系统并相互交互,同时开发人员在系统上编写和运行越来越多的应用程序,分布式系统的复杂性猛然激增。分布式系统的运营商必须解决一系列挑战,这些挑战会影响整个系统的性能以及单个应用程序的性能。

         这些性能挑战不同于操作由各种不同独立运行的计算机组成的数据中心时所面临的挑战。在真正的分布式系统中,应用程序被分成更小的工作单元,这些工作单元分布在许多节点上并直接或通过共享输入/输出数据相互通信。

多租户分布式系统因其多租户性质带来了额外的性能挑战,其中不同的用户、组和可能的业务单位在同一集群上运行不同的应用程序。(这与单个大型分布式应用程序形成对比,例如搜索引擎,它非常复杂并且具有任务间依赖性,但仍然只是一个整体应用程序。)多租户带来的这些挑战源于在任何节点上,运行的应用程序的可多样性,以及应用程序是由许多不同的开发人员而不是一个专注于确保单个分布式应用程序中的所有内容协同工作的工程团队编写的用例。

调度

           分布式系统的主要挑战之一是调度作业及其组件进程。计算能力可能相当大,但总是有限的,分布式系统必须决定哪些作业应该安排在何时何地运行,以及这些作业的相对优先级。即使是复杂的分布式系统调度程序也有局限性,可能导致集群硬件利用率不足、作业运行时间不可预测,或两者兼而有之。示例包括假设最坏情况下的资源使用情况以避免过度使用,未能跨不同的应用程序规划不同的资源类型,以及忽略一个或多个依赖项,从而导致死锁或资源匮乏。

           调度挑战在多租户集群上变得更加严峻,一方面多租户集群增加了用户之间资源访问的公平性作为调度的挑战,另一方面应用程序面临在高利用率(整体硬件利用率)和高优先级之间的平衡(对应用程序运行时间的可预测性也作为调度的考量目标)。除了平衡利用率和公平性的挑战之外,在某些极端情况下,调度程序可能会在尝试确保公平性方面走得极端,一次只为几个用户调度许多作业中的几个任务。这可能会导致集群上每个作业的延迟,并导致集群无法有效地使用资源,因为系统试图同时做太多不同的事情。

硬件瓶颈

           除了调度挑战之外,分布式系统还有很多方式会遇到硬件瓶颈和其他低效率问题。例如,单个作业可能会使网络或磁盘 I/O 饱和,从而减慢其他所有作业的速度。这些潜在问题只会在多租户环境中加剧——当节点上运行许多不同的进程时,给定硬件资源(如 CPU 或磁盘)的使用效率通常较低。此外,运维人员无法针对特定的访问模式调整集群,因为访问模式多种多样且不断变化。(同样,将这种情况与一组服务器进行对比,每台服务器都独立运行一个应用程序或一个大型集群运行一个单一的连贯设计和调整的应用程序,如搜索引擎。)

          由于系统中每个节点使用的集中式服务的瓶颈,分布式系统也会遇到性能问题。一个常见的例子是主节点执行作业准入和调度;其他包括存储集群数据的分布式文件系统的主节点以及域名系统 (DNS) 服务器等常见服务。

许多现代分布式系统的主要设计目标是使大量开发人员、数据科学家和分析师能够同时使用该系统,这一事实加剧了这些潜在的性能挑战。这与早期的分布式系统(例如高性能计算 (HPC) 系统)形成鲜明对比,在这些系统中,只有能够编写在集群上运行的程序的人才具有系统编程背景。今天,分布式系统正在向没有系统背景的人开放巨大的计算能力,因此他们往往不了解甚至不考虑系统性能。这样的用户可能很容易编写一个意外使集群崩溃的作业,影响所有其他作业和用户。

多租户分布式系统中缺乏可见性

           由于多租户分布式系统同时运行许多应用程序,每个应用程序具有不同的性能特征并由不同的开发人员编写,因此很难确定系统正在发生什么,是否(以及为什么)存在问题,哪些用户和应用程序是问题所在任何问题的原因,以及如何处理此类问题。

           传统的集群监控系统通常仅限于跟踪节点级别的指标;他们无法了解每个进程的详细硬件使用情况。可能会导致出现重大盲点——当出现性能问题时,操作员无法准确查明是哪个应用程序导致的,或者如何解决。同样,应用程序级监控系统倾向于关注整体应用程序语义(整体运行时间、数据量等),而不会深入到运行应用程序一部分的每个节点上实际硬件资源的性能级别指标.

           对多租户分布式系统真正有用的监控必须以足够的粒度级别跟踪每个节点上每个有趣进程的硬件使用指标。为大型集群收集、处理和呈现这些数据是一项重大挑战,无论是在系统工程(以可扩展的方式高效地处理和存储数据)还是呈现级逻辑和数学(以有用和可扩展的方式呈现数据)方面。准确)。即使对于有限的节点级指标,传统的监控系统也无法在数百到数千个节点的大型集群上很好地扩展。

性能问题对业务的影响

某些性能挑战很容易导致业务影响,例如:

  •  不一致、不可预测的应用程序运行时间

批处理作业可能会延迟运行,交互式应用程序可能响应缓慢,并且其他应用程序使用的新传入数据的摄取和处理可能会延迟。

  • 未充分利用的硬件

即使集群硬件未满负荷运行,作业队列也可能已满。这种低效率会导致更高的资本和运营费用;由于硬件不足,甚至需要建立新的数据中心空间来添加新机器以获得额外的处理能力,它还可能导致新项目的严重延迟。

  •  集群不稳定

  在极端情况下,节点可能会变得无响应或分布式文件系统 (DFS) 可能会过载,因此应用程序无法运行或在访问数据时显着延迟。

除了这些明显的影响之外,性能问题还会以隐藏的方式影响着业务。组织团体可能会非官方的地“认识到”多租户集群难以预测,并为此构建隐式或显式流程来解决不可预测性,例如:

将集群访问限制为开发人员或分析师的子集,因为担心编写不当的作业会减慢甚至使每个人的集群崩溃。

为不同的组或不同的工作负载构建单独的集群,以便最重要的应用程序与其他应用程序隔离。这样做会因资源使用效率低下而增加总体成本,增加运营开销和成本,并降低跨组共享数据的能力。

    设置“开发”和“生产”集群,通过或其他繁琐的流程来批准作业,然后才能在生产集群上运行。添加这些障碍会极大地阻碍创新,因为它们会显着减缓从生产数据中学习、构建和测试新模型或新功能、将其部署到生产中以及再次学习的反馈循环。

       这些对不可预测性能的响应可能会限制企业充分受益于分布式系统潜力的能力。消除集群上的性能问题可以提高整体业务的性能。

推荐阅读