Понимание метрик opscenter с помощью команд nodetool результатов cfstats и cfhistograms

Я работаю над сравнительным анализом кластера кассандры и, следовательно, использую инструмент стресса кассандры. Возможность вставлять 1M записей в одну из таблиц с коэффициентом репликации 2, CL как кворум, скоростью потоков 40, на 2 узлах и нагрузкой от 11.43.600.66.

./cassandra-stress профиль пользователя = demo.yaml n=1000000 операций (вставка =1, вероятный запрос0=2) cl= кворум -узел 11.43.600.66,11.43.600.65 -скорость потоков =40

**demo.yaml script:**  
columnspec:  
  - name: user_name  
    size: gaussian(20..45)  
    population: gaussian(10000..50000)  
  - name: system_name  
    size: gaussian(20..45)  
    population: gaussian(50..60)  
  - name: time  
    size: uniform(15..25)  
    population: uniform(100000..1000000)  
  - name: request_uri  
    size: gaussian(50..80)  
    population: gaussian(100..150)  

insert:  
  partitions: fixed(1)            
  select:  fixed(1)/1000        
  batchtype: UNLOGGED   

Я пытаюсь понять результаты cfstats nodetool, cfhistograms с тем из OpsCenter. Метрики уровня таблицы Write и чтения RequestLatencies (ms/op) от Opscenter:
WriteRequestLatency] (HTTP: // [WriterequestlatencygraphsReadRequestLatency] (HTTP: // [ReadRequestLatencygraphs
Результаты cfhistograms для расчета времени записи и чтения. Задержки в микросекундах
cfhistogramsstats] (HTTP: // [cfhistogramsstats
cfstats приводит к миллисекундам
cfstats] (http: // [результаты cfstats

a) As per the results of cfhistograms and cfstats  
Write Latency: 0.0117ms = 11.7 micros
Read Latency:  0.0943ms = 94.3 micros
This would approximately match the results at 50% as 
Write Latency: 10micros
Read Latency: 103micros  

Вопрос 1: На основании какого процентиля cfstats и cfhistograms показывают результаты? Я бы всегда рассматривал 95%, но для 95% результаты cfstats здесь не совпадают с cfhistograms здесь. Я рассматриваю что-то не так?

b) From OpsCenter results:
Write Latency: 1.6ms/op = 1600 micros
Read Latency:  1.9ms/op = 1900 micros 

Вопрос 2: Почему несоответствие с результатами cfhistograms и opscenter? Это как значения записи по оси Y opscenter, задержка чтения должна быть в микро / операциях, а не в мс / операциях?

Версии:
Кассандра 2.1.8.689
OpsCenter 5.2.2

Пожалуйста, дайте мне знать, если я ошибаюсь..!!
Спасибо

1 ответ

Это два разных типа метрик, которые отслеживаются статистически по-разному.

Начнем с того, что задержки чтения / записи кластера представляют собой представление координатора, включая возможную связь между узлами. Из opscenter, если навести указатель мыши на метрику для определения:

Среднее время ответа (в миллисекундах) клиентской записи. Период времени начинается, когда узел получает запрос на запись от клиента, и заканчивается, когда узел отвечает клиенту. В зависимости от уровня согласованности и коэффициента репликации это может включать задержку сети от записи в реплики.

В то время как в cfhistograms вы смотрите на локальные задержки для этого узла, это также сохраняется в OpsCenter под метриками CF: или TBL: (в зависимости от версии). Существует график процентиля, который на самом деле покажет это

Минимальный, средний, максимальный, 90-й и 99-й процентили времени отклика для чтения данных из memtable и sstables для конкретной таблицы. Время, прошедшее с момента, когда реплика получает запрос от координатора и отправляет ответ.

задержки на основе гистограммы

Таким образом, с точки зрения того, что описывают две метрики, это разные уровни чтения / записи.

Дополнительно - статистика, используемая для их измерения, различна.

Средняя задержка займет общее количество времени записи координатора с момента последней проверки, деленное на количество записей координатора с момента последней проверки (см. https://github.com/apache/cassandra/blob/94ff639429a65acb5f122ed559e98dd60a40e42d/src/java/org/apache/cassandra/metrics/LatencyMetrics.java#L125). Это может быть далеко от того, что ожидается, так как может быть много запросов sub ms и один 30-секундный запрос, который в среднем пока составляет 1 мс.

"Лучшие" показатели по-прежнему имеют некоторые статистические потери, но гораздо лучше описывают распределение задержек. Они (процентили в opscenter cfhistograms) обновляются путем представления задержек в сегментах, каждый из которых представляет временной диапазон. Эта гистограмма обновляется во время запроса. В OpsCenter он отслеживает состояние гистограммы каждую минуту и ​​по разнице может определить, сколько запросов произошло за каждый период времени. Это также позволяет статистически точнее объединять данные между узлами в представлении кластера. Если один узел имеет 1000 запросов, а другой - 1, усреднение даст половину пути. Сложив итоговые значения для каждого узла, можно лучше представить фактическое распределение задержки. Здесь все еще есть потеря, но сравнительно небольшая. Каждый сегмент представляет диапазон, и мы не знаем, где в этом диапазоне происходил каждый из запросов в этом сегменте, но он достаточно мал, чтобы быть "достаточно хорошим" и достаточно хорошо представлять порядок величины.

У cdehistograms Nodetool было несколько версий, чтобы насторожиться. Он использовал https://en.wikipedia.org/wiki/Reservoir_sampling алгоритм отбора проб резервуара (vitters r) вместо гистограммы, которая основана на идее, что нормальное распределение может быть представлено с меньшей выборкой данных. К сожалению, задержки - это очень тяжелое распределение с ненормальными значениями, и они могут быть на несколько порядков меньше. https://issues.apache.org/jira/browse/CASSANDRA-8662

Другие вопросы по тегам