Server 如何在Web服务器上将全局系统度量分解为每个端点
我正在大规模地为后端API实现一个度量系统,并且遇到了一个难题:使用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秒”)足够小,并且
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)