美文网首页
LB VIP CPU 推算

LB VIP CPU 推算

作者: 程序员札记 | 来源:发表于2023-03-19 08:36 被阅读0次

对于LB这种网络类系统来说,带宽(bandwidth)和CPU是两大类资源开销。所谓的“hot LB”问题所关切的资源对象具体是指什么呢?
在10G LB时代是带宽。
在40G LB时代,CPU赶在带宽前面成为新的瓶颈。

这个变化也给我们带来了一个新的难题:我们怎么知道某个VIP迁移后,原有LB上能降低多少CPU开销呢?令人沮丧的是,即使LB厂商也没有这样的数学模型。

在半自动化时代,我们的做法是:

人工选一个qps最高(或者bps最高)的VIP,启动迁移。

等迁移完之后,复查原先LB的CPU情况。

如果还超出阈值,则重复步骤1和步骤2。

为什么需要做第3步的复查呢?原因是缺乏模型,我们无法知道这个VIP迁移后,对CPU下降的实际效果如何。简单来说,就是“迁一个VIP试试,看看效果”。

所以我们必须要有这样的模型。假设这么一个情况:
某一台hot LB目前CPU峰值是80%,而目标CPU峰值为65%。其上有100个VIP,如果我们根据数学模型和qps、bps监控数值,计算出对应消耗的CPU资源:
VIP1: 8% CPU
VIP2: 7% CPU
VIP3: 3% CPU
VIP4: 2% CPU

由于我们的目标是迁走至少15%的CPU开销,那么由于VIP1和VIP2的CPU开销正好是15%(8%+7%),我们的全自动化就可以选择这两个VIP进行迁移。

我们相信,流量特征(rps, IN bps, OUT bps)确定的VIP,其对应的CPU开销值应该也是可以确定的(至少能缩小到某一个精度区间之内)。从原理上说,VIP的流量,本质上是数据包在LB的网卡、L4处理(TCP)、L6处理(TLS)、L7(HTTP)处理上的开销。我们逐一分析:

rps的因素:rps恒定的情况下,CPU跟bps成正比。

bps的因素:bps恒定的情况下,CPU跟包量(pps)成正比。

TLS的因素:https跟http相比,因为多了TLS加解密环节,所以会消耗更多CPU。

设备型号的因素:同样流量特征的VIP,其CPU开销在新型号LB上小,在旧型号上大。

如果有这么一个数学模型,输入值包括:qps, bps, protocol, hardware model,输出值是CPU开销,那么这个“如何选择合适的VIP做迁移”的问题,就能答上一大半了。另外一小半主要跟业务特点相关。这个问题其实就转化一个数学问题。 如果根据多个变量拟合一个函数。

如何在python中计算一条最佳拟合线,然后在matplotlib中将其绘制在散点图上?
用普通最小二乘回归计算线性最佳拟合线,如下所示:

from sklearn import linear_model
clf = linear_model.LinearRegression()
x = [[t.x1,t.x2,t.x3,t.x4,t.x5] for t in self.trainingTexts]
y = [t.human_rating for t in self.trainingTexts]
clf.fit(x,y)
regress_coefs = clf.coef_
regress_intercept = clf.intercept_

这是多变量的(每种情况都有很多x值)。所以,x是一个列表,y是一个列表。
例如:

x = [[1,2,3,4,5], [2,2,4,4,5], [2,2,4,4,1]]
y = [1,2,3,4,5]

但是如何处理高阶多项式函数呢?例如,不仅仅是线性的(x对m=1的幂),而是二项式的(x对m=2的幂),四次方的(x对m=4的幂),等等。例如,如何从下面得到最佳拟合曲线?
摘自Christopher Bishops的“模式识别和机器学习”,第7页:

最佳答案

this question
提供a small multi poly fit library这将完全满足您使用numpy的需要,并且您可以将结果插入到绘图中,如我下面概述的那样。
您只需将X和Y点数组以及所需的拟合度(顺序)传递到multipolyfit中即可。这将返回可用于使用numpy的polyval绘制的系数。
注:下面的代码已修改为进行多变量拟合,但绘图图像是早期非多变量答案的一部分。

import numpy
import matplotlib.pyplot as plt
import multipolyfit as mpf

data = [[1,1],[4,3],[8,3],[11,4],[10,7],[15,11],[16,12]]
x, y = zip(*data)
plt.plot(x, y, 'kx')

stacked_x = numpy.array([x,x+1,x-1])
coeffs = mpf(stacked_x, y, deg)
x2 = numpy.arange(min(x)-1, max(x)+1, .01) #use more points for a smoother plot
y2 = numpy.polyval(coeffs, x2) #Evaluates the polynomial for each x2 value
plt.plot(x2, y2, label="deg=3")

注意:这是前面答案的一部分,如果没有多变量数据,它仍然是相关的。不要使用coeffs = mpf(...
对于非多变量数据集,最简单的方法可能是使用numpy'scoeffs = numpy.polyfit(x,y,3)
polyfit
最小二乘多项式拟合。
将度numpy.polyfit(x, y, deg, rcond=None, full=False, w=None, cov=False)的多项式拟合到点p(x) = p[0] * x**deg + ... + p[deg]。返回系数p的向量,该向量将平方误差最小化。

相关文章

  • 【vip】关于高可用vip

    主备vip vip一般特指LB上提供服务的ip,如果LB是主备模式,那么就属于漂移ip的性质。 负载均衡ip 如果...

  • 负载均衡导学

    负载均衡 负载均衡(Load Balancing,简称LB),用于在计算机集群、网络连接、CPU、磁盘驱动器或其他...

  • Linux_346_keepalived双主实践

    之前是单实例,主备模式的高可用VIP飘逸keepalived还支持多实例,双向主备模式A业务在lb01上是主模式,...

  • ebpf

    接上篇udp压测场景性能较差,想用ebpf优化下性能,毕竟ebpf已经有LB方案可以替代ipvs,基于更低的cpu...

  • Keepalived高可用

    VRRP 1.准备环境 准备机器lb01 lb02 web01 web02lb01 lb02 安装软件yum in...

  • marathon-lb配置及负载nginx

    marathon-lb配置 marathon-lb get images Marathon-lb既是一个服务发现工...

  • kube-ovn enable lb 功能

    如果是enable lb, pod经switch lb 访问svc后端pod,而关闭enable lb,流量经ov...

  • k8s 控制平面HA vip LB

    k8s 控制平面的HA怎么做的? 首先cluster ip 也能起到vip的作用,同时也具备HA的功能。 当然cl...

  • 负载均衡

    负载均衡(LB)是任意一个分布式系统中的非常关键的组成部分。它可以通过多个度量(随机,轮训,随机加权重,CPU与内...

  • 《推算》

    在手机日历里,以5月12日来往前推算: 19001天前的那一天,是我出生的日子。很震惊!才知道我来到这个世界上已经...

网友评论

      本文标题:LB VIP CPU 推算

      本文链接:https://www.haomeiwen.com/subject/yanerdtx.html