Server 如何在Web服务器上将全局系统度量分解为每个端点

Server 如何在Web服务器上将全局系统度量分解为每个端点,server,metrics,usage-statistics,statsd,Server,Metrics,Usage Statistics,Statsd,我正在大规模地为后端API实现一个度量系统,并且遇到了一个难题:使用statsd,应用程序本身在每个端点上记录请求度量,但CPU度量是在全局服务器级别。目前,每台服务器有10个线程,这意味着可以同时处理10个请求(是的,是的,实际上是串行的) 例如,如果我们有两个端点,/user和/item,那么statsd实现就是区分每个端点的统计数据(DB/Redis I/O等)。然而,假设我们每N秒查看一次linux度量值,这些统计数据本质上并没有分离端点 我相信,如果您的轮询时间(“N秒”)足够小,并且

我正在大规模地为后端API实现一个度量系统,并且遇到了一个难题:使用
statsd
,应用程序本身在每个端点上记录请求度量,但CPU度量是在全局服务器级别。目前,每台服务器有10个线程,这意味着可以同时处理10个请求(是的,是的,实际上是串行的)

例如,如果我们有两个端点,
/user
/item
,那么
statsd
实现就是区分每个端点的统计数据(DB/Redis I/O等)。然而,假设我们每
N秒查看一次
linux度量值
,这些统计数据本质上并没有分离端点

我相信,如果您的轮询时间(“
N秒
”)足够小,并且您的请求中有足够的多样性,则可以分解全局系统度量以在端点级别创建估计值

想象这样一个场景:

注意:
a
表示aGETto
/user
b
表示aGETto
/item

在每个时间步,
t
(即
t1
t2
等),我们还对系统指标进行快照。我觉得应该有一种方法(可能通过某种信号分解)来估计每个
a
/
b
请求所需的平均负载。现在,实际上我有大约20条路线,所以要得到准确的估计要困难得多。但正如我之前所说,如果您的请求具有足够的多样性(但不是太多),以便它们在上述某些地方重叠,那么至少应该有可能得到一个粗略的估计

我不得不想象,这种事情有一些名字,或者至少有一些研究或者这种方法的幼稚实现。在实践中,是否有任何方法可以实现这些结果


注意:考虑到请求可能会在这些时间段内流失,这可能会更加困难,但几乎所有请求都需要我相信答案是通过线性方程进行和分解。如果我们说一个系统度量,例如CPU,是一个函数
CPU(t1)
,那么对于所发布的示例,只需求解以下方程组即可:


|------|------|------|------|------|------|------|------|------|------|
|  t1  |  t2  |  t3  |  t4  |  t5  |  t6  |  t7  |  t8  |  t9  |  t10 |
|------|------|------|------|------|------|------|------|------|------|
|  a   |  b   |   b  |  a   |  a   |  b   |  b   |  a   |  b   |  b   |
|  b   |  a   |   b  |      |  b   |  a   |  b   |      |  b   |      |
|  a   |  b   |   b  |      |  a   |  a   |  b   |      |  a   |      |
|  a   |      |   b  |      |  b   |  a   |  a   |      |  a   |      |
|  a   |      |   b  |      |  a   |  a   |  b   |      |      |      |
|      |      |      |      |  a   |      |  a   |      |      |      |
|------|------|------|------|------|------|------|------|------|------|


4a + b = CPU(t1)
a + 2b = CPU(t2)
5b = CPU(t3)
a = CPU(t4)
3a + 3b = CPU(t5)
4a + b = CPU(t6)
2a + 4b = CPU(t7)
a = CPU(t8)
2a + 2b = CPU(t9)
b = CPU(t10)
现在,将有不止一种方法来求解这个方程(即
a=CPU(t8)
a=CPU(t4)
),但是如果你从相应的解中取a和b的平均值(
AVG(a)
),你应该会得到一个非常可靠的度量


|------|------|------|------|------|------|------|------|------|------|
|  t1  |  t2  |  t3  |  t4  |  t5  |  t6  |  t7  |  t8  |  t9  |  t10 |
|------|------|------|------|------|------|------|------|------|------|
|  a   |  b   |   b  |  a   |  a   |  b   |  b   |  a   |  b   |  b   |
|  b   |  a   |   b  |      |  b   |  a   |  b   |      |  b   |      |
|  a   |  b   |   b  |      |  a   |  a   |  b   |      |  a   |      |
|  a   |      |   b  |      |  b   |  a   |  a   |      |  a   |      |
|  a   |      |   b  |      |  a   |  a   |  b   |      |      |      |
|      |      |      |      |  a   |      |  a   |      |      |      |
|------|------|------|------|------|------|------|------|------|------|


4a + b = CPU(t1)
a + 2b = CPU(t2)
5b = CPU(t3)
a = CPU(t4)
3a + 3b = CPU(t5)
4a + b = CPU(t6)
2a + 4b = CPU(t7)
a = CPU(t8)
2a + 2b = CPU(t9)
b = CPU(t10)