为什么计数器是 double 而不是 long?
Why is a counter a double and not a long?
Micrometer counter 是双而不是长的动机是什么?用户计算部分更改是否有原因?在计数超过尾数的大小(我相信大约 20 亿)后,它如何继续测量增量?
更新:
有人指出 double 的精度为 9 千万亿,而不是 20 亿。这使得更多 space.
计数器是双精度而不是多精度有几个原因。与任何架构一样,它平衡了权衡。
与底层指标库的最大兼容性
Micrometer 是其他指标框架的外观,double
是最通用的选项。
例如,Prometheus 对其计数器使用双精度数,并且通过坚持使用相同的类型,它最大限度地提高了兼容性。
Prometheus 使用 double
s 的另一个原因是在内部对所有指标进行相同的处理,从而简化其架构并优化其性能和内存利用率。虽然那是一个不同的讨论话题。
测量局部变化
虽然大多数计数器使用的是递增单个事件。在测量接收的字节数、处理的行数等其他内容时,计数器仍然是一个可行的选择。虽然这些示例中的 none 是部分计数。它不会阻止用户提出他们想要测量部分计数的用例。一个例子可能是 'seconds spent processing',因为部分秒在计算中很常见。有些系统改为测量整个单位,例如毫秒或纳秒,接下来我们将介绍它。
最大精度
double 类型提供更高的精度。虽然这听起来可能违反直觉,但请耐心等待。可以在计数器中测量的一些持续时间将是执行某些任务所花费的总时间。垃圾收集、数据库处理等。其中一些事件需要几纳秒。虽然我不建议使用 Micrometer 来替代分析器,但测量较小的时间单位会造成混淆(请参阅 Who Wants Seconds,Prometheus 工程师进一步解释了这一推理)
如果注册管理机构要对所有测量的纳秒进行标准化,那么 long
的那些数量级(long 中的 9 quintillion 与 double 中的 9 quatrillion)将用完 long 的额外精度无论如何。
您会注意到 Micrometer 使用双精度数来测量计时器的总持续时间,而该指标的优点在于它实际上是其核心的计数器(单调递增的数字)。
双人床足够大
我记得做过一些粗略的计算,如果一个计数器正在测量单个事件,这意味着它可以每秒测量 10,000 个事件超过 20,000 年并且不会开始失去精度。
所以当然有一些限制值得注意,但考虑到系统需求的预期 double
就足够了。
Micrometer counter 是双而不是长的动机是什么?用户计算部分更改是否有原因?在计数超过尾数的大小(我相信大约 20 亿)后,它如何继续测量增量?
更新: 有人指出 double 的精度为 9 千万亿,而不是 20 亿。这使得更多 space.
计数器是双精度而不是多精度有几个原因。与任何架构一样,它平衡了权衡。
与底层指标库的最大兼容性
Micrometer 是其他指标框架的外观,double
是最通用的选项。
例如,Prometheus 对其计数器使用双精度数,并且通过坚持使用相同的类型,它最大限度地提高了兼容性。
Prometheus 使用 double
s 的另一个原因是在内部对所有指标进行相同的处理,从而简化其架构并优化其性能和内存利用率。虽然那是一个不同的讨论话题。
测量局部变化
虽然大多数计数器使用的是递增单个事件。在测量接收的字节数、处理的行数等其他内容时,计数器仍然是一个可行的选择。虽然这些示例中的 none 是部分计数。它不会阻止用户提出他们想要测量部分计数的用例。一个例子可能是 'seconds spent processing',因为部分秒在计算中很常见。有些系统改为测量整个单位,例如毫秒或纳秒,接下来我们将介绍它。
最大精度
double 类型提供更高的精度。虽然这听起来可能违反直觉,但请耐心等待。可以在计数器中测量的一些持续时间将是执行某些任务所花费的总时间。垃圾收集、数据库处理等。其中一些事件需要几纳秒。虽然我不建议使用 Micrometer 来替代分析器,但测量较小的时间单位会造成混淆(请参阅 Who Wants Seconds,Prometheus 工程师进一步解释了这一推理)
如果注册管理机构要对所有测量的纳秒进行标准化,那么 long
的那些数量级(long 中的 9 quintillion 与 double 中的 9 quatrillion)将用完 long 的额外精度无论如何。
您会注意到 Micrometer 使用双精度数来测量计时器的总持续时间,而该指标的优点在于它实际上是其核心的计数器(单调递增的数字)。
双人床足够大
我记得做过一些粗略的计算,如果一个计数器正在测量单个事件,这意味着它可以每秒测量 10,000 个事件超过 20,000 年并且不会开始失去精度。
所以当然有一些限制值得注意,但考虑到系统需求的预期 double
就足够了。