Почему счетчик двойной, а не длинный? - PullRequest
0 голосов
/ 23 сентября 2019

Какая мотивация для Микрометрического счетчика быть двойной, а не длинной?Есть ли причина, по которой пользователь считает частичные изменения?Как он продолжает измерять приращения после того, как число превысило размер мантиссы (я полагаю, ~ 2 миллиарда)?

Обновление: Было отмечено, что двойное число имеет точность для9 квадриллионов, а не 2 миллиарда.Это дает гораздо больше места.

1 Ответ

3 голосов
/ 25 сентября 2019

Есть несколько причин, по которым счетчики являются двойными вместо длинных.Как и в любой архитектуре, он уравновешивает компромиссы.

Максимальная совместимость с базовыми библиотеками метрик

Микрометр - это фасад по сравнению с другими структурами метрик, а double - наиболее универсальный вариант.

Prometheus, например, использует удвоение для своих счетчиков и, придерживаясь того же типа, это максимизирует совместимость.

Еще одна причина, по которой Prometheus использует double s, заключается в том, чтобы внутренне обрабатывать все метрики одинаково, упрощая свою архитектуру и оптимизируя производительность и использование памяти.Хотя это другая тема для обсуждения.

Измерение частичных изменений

В то время как большинство использований счетчиков увеличивают отдельные события.Счетчики по-прежнему целесообразны при измерении других вещей, таких как полученные байты, обработанные строки и т. Д. Хотя ни один из этих примеров не является частичным.Это не мешает пользователю придумать сценарий использования, в котором он хочет измерить частичное число.Одним из примеров может быть «обработка потраченных секунд», поскольку частичные секунды очень распространены в вычислениях.Некоторые системы измеряют целые единицы измерения, например, миллисекунды или наносекунды. Давайте рассмотрим это далее.

Максимальная точность

Двойной тип обеспечивает большую точность.Хотя это может показаться нелогичным, потерпите меня.Некоторые длительности, которые могут быть измерены в счетчике, будут общим временем, потраченным на выполнение некоторой задачи.Сбор мусора, обработка БД и т. Д. Некоторые из этих событий занимают наносекунды.Хотя я не рекомендовал бы Микрометр в качестве замены для профилировщика, измерение небольших единиц времени может привести к путанице (см. Кто хочет секунды , где инженер Prometheus объясняет эту причину далее)

Если реестрдолжны были стандартизировать наносекунды для всех измерений, те порядки, что long (9 квинтиллионов в длинных против 9 квадриллионов в двойном) в любом случае израсходует дополнительную точность длинных.

You 'Отметим, что Micrometer использует удвоения для измерения общей длительности в таймерах, и прелесть этого показателя в том, что он на самом деле является счетчиком в своем ядре (монотонно возрастающим числом).

Двойной достаточно большой

Я вспоминаю грубую математику, и если счетчик измеряет отдельные события, это означает, что он может измерять 10 000 событий каждую секунду в течение более 20 000 лет и не начать терять точность.

Так что, безусловно, существуют ограничения, о которых стоит знать, но с учетом ожиданий потребностей системы double вполне достаточно.

...