前文[1]介绍了资源利用率提升这个课题的产生背景、形成原因、解决思路,以及在 openEuler 上所构建的资源利用率整体解决方案和技术演进思路。
本篇我们针对容器在离线场景下的典型应用类型( CPU 敏感型、内存敏感型、网络 IO 敏感型 ),并在搭载了 openEuler 混合部署 QoS 方案的 x86 环境上展开了专项的应用场景测试。
针对 CPU 调度敏感型应用场景,我们选择了 CloudSuite[2]的两个测试套件作为混合部署的在离线业务进行混部:
从应用特征上而言,Web Serving 为 CPU 敏感型应用,且具有实时性,对响应延迟敏感度高,符合在线业务的特征,In-Memory Analytics 为 CPU 密集型业务,消耗大量的计算资源,符合离线业务的特征,将此二者混合部署能够有效利用 Web Serving 空闲时的 CPU 资源,实现资源利用率的提升,但如果只是简单地混合部署,CPU 密集的离线业务必然会对在线业务产生极大的干扰,采用混部 QoS 特性实现在线业务的 CPU 抢占,能够有效保障在线业务的性能。
测试设计上,始终关注在线业务的性能数据,然后分别测试三组数据:
通过将三组的测试数据放到一起,获得如下两个曲线图:
从上面的曲线数据图可见,在 2 小时的测试周期里, 没有开启混部 QoS 特性的测试 2,在线业务受到了明显的干扰,Web Serving 对 BrowsetoElgg 以及 Register 请求的平均响应时间均延长到了 3 倍左右,可见在线业务在受到离线业务干扰后性能下降了 3 倍;而开启了混部 QoS 特性的测试 3,在线业务的性能基本能够与仅运行在线业务的测试 1 持平。
以上测试结果表明,当业务之间发生 CPU 争抢时,混部 QoS 方案加持下的在线业务优先得到了关键的 CPU 资源。这其中,openEuler 的 CPU 绝对抢占技术发挥了巨大的作用。
通常,用户在 Kubernetes 集群中部署业务时需要限制容器可使用 CPU 数量。然而,固定的资源难以满足 CPU 限流敏感型业务(即对短时突发流量敏感的应用)的运行需求。例如:
这几类场景,相比于案例 1 中所提到的 CPU 调度敏感型,我们将这类应用分类为 CPU 限流敏感型。
为方便测试,我们仿照上述三类短时突发流量业务,模拟了一个长期平稳运行但运行过程中 CPU 会规律性进行突发增长的测试业务,该业务:
在测试时,首先开启 openEuler 的混部 QoS 特性,运行以上测试用例,在测试过程中通过观察压制(throttled)次数来观察容器在应对突发流量时的运行情况。
下图是测试过程中的应用运行情况。上半部展示容器压制次数,下半部展示容器运行过程的 CPU 变化情况。其中,在时刻 1~4 ,业务容器会产生突发流量,此时容器的 CPU 使用会从 1 核增加至 3 核。可以看到,随着 openEuler 的混部 QoS 特性主动调整受压制容器的 CPU 配额值,容器受压制情况逐渐缓解直至容器不再受到压制。
由上可见,针对 CPU 限流敏感型应用,openEuler 的混部 QoS 同样可以对它进行有效的控制。在此过程中,使用了我们所设计的 quotaTurbo 特性。该特性的整体思路是在业务运行过程中,持续监控容器的压制( throttled )状态,并依据当前 CPU 负载对容器所使用的 CPU 时间片进行分级调整。在保障整机负载水位安全稳定及不影响其他业务的前提下,按需动态调整业务容器 CPU 限额,实现业务 CPU 动态调整、降低了业务的节流率,从而提高业务的整体运行性能。
前面介绍了两个 CPU 敏感型应用的例子,接下来我们来看下内存敏感型应用在容器在离线混部时会碰到的问题:假设容器在离线混部时,参与混部的离线业务是内存消耗型,其占用了过多的内存,导致在线业务在需要的时候申请不到内存,从而在线业务的 QoS 下降。
在这种场景下,从技术层面我们需要压制离线应用的内存使用量并及时释放离线应用所使用的内存。所以,我们在 openEuler 的混部 QoS 方案上开发了基于 cgroup 级的内存管理快压制慢恢复方案(FSSR)。
下面,我们通过一个测试用例来验证 FSSR 方案的效果。我们通过以下这个测试模型进行用户模拟测试 :
在本测试里,图上各黄色标识的进程分别担任以下角色:
在测试时,重点观测点是在线业务的 QoS(即业务的下载耗时),并设计三个测试用例:
在测试完成后,我们获得如下曲线图:
能够看到:
以上测试表明,通过使用动态调整在线业务和离线业务内存分配的 FSSR 策略,能够优先保障在线业务的内存使用,提升在线业务在在离线混部时的 QoS。
最后,我们一起来分析下网络 IO 敏感型应用的场景。当在离线业务混部时,如离线业务某段时间网络 IO 需求增高,在离线业务产生网络资源的争抢。此时,在线业务如果无法及时获得关键的网络资源,就会导致 QoS 的下降。针对这种场景,我们 openEuler 的混部 QoS 方案开发了容器 POD 带宽管理特性。
同样的,我们设计了一个测试用例来验证该特性的效果。为了便于观察网络带宽的变化,本次测试的在线业务和离线业务均采用了 iperf3[5] 来模拟业务进程。网络拓扑模型如下 :
测试步骤如下:
通过采集未开启/开启 Pod 网络带宽管理特性两轮测试的测试数据,获得曲线图如下。可见:
由上测试可见,通过 openEuler 混部 QoS 方案的 Pod 网络带宽管理特性,当在离线业务竞争网络资源的时候,在线业务能够在百毫秒内实现带宽资源的抢占,快速获得急需的网络带宽资源,从而保障了在线业务的 QoS。
通过上面的四个案例,我们为大家展示了 openEuler 的资源利用率提升方案可以为在线业务带来的一些收益:即在提升节点资源利用率的时候,通过多维度资源优先级隔离和自动干扰控制保证关键在线业务的服务质量。
接下来,我们会在后续的系列文章中逐一为大家带来关键特性的技术剖析。
更多回帖