mirror of https://github.com/voidlizard/hbs2
devlog
This commit is contained in:
parent
0ce52cc4ba
commit
f8a437c2f1
|
@ -1,6 +1,91 @@
|
|||
|
||||
## 2023-02-25
|
||||
|
||||
TODO: counters-and-metrics
|
||||
Сделать механизм счётчиков и измерений на их основе.
|
||||
Идея такая: счётчик заводится и каким-то образом
|
||||
изменяется ( в зависимости от типа ). Наиболее вероятные
|
||||
типы: Integer, Double.
|
||||
|
||||
Некий процесс производит измерения счётчиков в зависимости
|
||||
от их типа/настроек. Например, средее за период. Скользящее
|
||||
среднее. Изменение за период времени (TBD).
|
||||
|
||||
Счётчики могут быть доступны как в логе, так и удалённо
|
||||
(RPC), для целей отладки.
|
||||
|
||||
Простейшее примение: watchdog. Смотрим на некую величину,
|
||||
если она не меняется некоторое время (например, между
|
||||
двумя запросами) --- следовательно, произошла авария
|
||||
и нужно рестартовать сервис и/или рапортовать об
|
||||
этом.
|
||||
|
||||
Что бы не таскать счётчики по монадам/публичным интерфейсам,
|
||||
можно поступить с ними аналогично тому, как сделаны логи.
|
||||
|
||||
Счётчики должны быть максимально возможно быстрые и вносить
|
||||
минимальные задержки в работу программы.
|
||||
|
||||
Задача разбивается на несколько частей:
|
||||
|
||||
1. Счётчик, показывающий текущиее состояние.
|
||||
Пример, текущее значение потребления RAM.
|
||||
Или текущее количество запросов.
|
||||
|
||||
2. Измерение, т.е некий процесс, который с заданной
|
||||
периодичностью смотрит значение счётчика и что-то с ним
|
||||
делает: например, считает скользящее среднее или
|
||||
экспоненциальное среднее.
|
||||
|
||||
3. Вывод информации о счётчиках (Лог? RPC?)
|
||||
|
||||
4. Анализ информации о счётчиках
|
||||
|
||||
Пример, зачем нужен счётчик: введём подпротокол
|
||||
для измерения RTT, для использования в алгоритме
|
||||
Congestion Control.
|
||||
|
||||
Еще пример, зачем нужен счётчик: заводим в каждом
|
||||
процессе, который подозревается на наличие busyloop.
|
||||
Смотрим скорость изменения счетчика. Если она больше
|
||||
некоторого порога, определяемого периодичностью процесса,
|
||||
следовательно, у нас busyloop.
|
||||
|
||||
Можно определять эти busyloop даже без явно заданного
|
||||
порога, просто глядя на график от времени и обнаруживая
|
||||
аномалии.
|
||||
|
||||
Порядок реализации:
|
||||
|
||||
1. драфт дизайна, включающий примеры использования
|
||||
2. обсуждение
|
||||
3. реализация
|
||||
|
||||
возможно, есть что-то готовое/полуготовое.
|
||||
|
||||
Во всякий там прометеус/графану и прочее подобное я не верю.
|
||||
Но даже если и есть годное, можно адаптировать.
|
||||
|
||||
Счётчики это типичные временные ряды, можно их складывать
|
||||
в ClickHouse.
|
||||
|
||||
Опять же, у нас нет цели поддерживать/мониторить целую огромную
|
||||
инфраструктуру отрядом девопсов.
|
||||
|
||||
Цели две: отладка и реализация watchdog-ов, т.е нода должна сама,
|
||||
своими силами анализировать счётчики и как-то справляться с
|
||||
аномалиями.
|
||||
|
||||
То есть: пир состоит из двух (или чуть больше) независимых (forkOS)
|
||||
потоков, один из которых делает работу, второй смотрит за первым,
|
||||
и рестартует его, если надо.
|
||||
|
||||
Отдельно можно анализировать снапшоты данных метрик и скармливать
|
||||
их в BDD, что бы строить деревья принятия решений: нормальная ситуация,
|
||||
или требуется загасить/перезапустить ноду, или же речь вообще идёт о
|
||||
DDoS атаке и надо обороняться --- банить каких-то пиров, например.
|
||||
|
||||
|
||||
FIXME: blocks-wip-inconsistency
|
||||
Иногда показывает blocks.wip не равный 0, когда
|
||||
блоки в действительности скачаны.
|
||||
|
|
Loading…
Reference in New Issue