SlideShare a Scribd company logo
1 of 29
Download to read offline
Graphite@Scale:
Как сохранять миллионы точек в секунду
Vladimir Smirnov
System Administrator
hangops_ru 2017
Зачем вообще хранить метрики?
Обычно метрики нужны когда:
Пришло время планировать закупки железа
Отладка проблем и расследование инцидентов
Бизнес-метрики и их визуализация
И многое многое другое...
Graphite и его архитектура
Оригинал: graphiteapp.org
Хранит time-series данные
Текствой протокол и простой HTTP API
Моудльный — меняй что хочешь
Типичный Graphite
LoadBalancer
graphite-web
graphite-web
carbon-cache
Store1
DC1
Servers, Apps, etc
carbon-relay
Metrics
User Requests
graphite-web
carbon-cache
Store2
graphite-web
graphite-web
carbon-cache
Store1
DC2
graphite-web
carbon-cache
Store2
carbon-aggegator
Ломаем Graphtie: проблемы масштабирования
LoadBalancer
graphite-web
graphite-web
carbon-cache
Store1
DC1
Servers, Apps, etc
carbon-relay
Metrics
User Requests
graphite-web
carbon-cache
Store2
graphite-web
graphite-web
carbon-cache
Store1
DC2
graphite-web
carbon-cache
Store2
carbon-aggegator
Что не так с этой схемой?
carbon-relay — SPOF
Плохо масштабируется
Синхронизация данных
после аварий?
Время ответа увеличивается
с ростом инфраструктуры
"Чиним"carbon-relay
LoadBalancer
graphite-web
graphite-web
carbon-cache
Store1
DC1
carbon-c-relay
carbon-c-relay
Metrics
User Requests
graphite-web
carbon-cache
Store2
graphite-web
graphite-web
carbon-cache
Store1
DC2
graphite-web
carbon-cache
Store2
carbon-c-relay
Servers, Apps, etc Server
carbon-c-relay
"Чиним"carbon-relay
carbon-c-relay:
Написан на C
Может 1M точек в секунду всего на 2-х ядрах
Играет роль L7 балансировщика
Может делать агрегацию
Позволяет пережить маленький падения
Zipper: скрываем проблемы от пользователей
Оригинал: "The essence of bugfixing" by irisuhime
Zipper: скрываем проблемы от пользователей
Запрос: target=sys.server.cpu.user
Результат:
t0 V V V V V t1 Node1
t0 V V V V V t1 Node2
t0 V V V V V V V t1 Zipped metric
Zipper: Архитектура
LoadBalancer
carbonzipper
carbonserver
go-carbon
Store1
DC1
User Requests
carbonserver
go-carbon
Store2
carbonzipper
carbonserver
go-carbon
Store1
DC2
carbonserver
go-carbon
Store2
graphite-web graphite-web
Zipper: Результаты
Написан на Go
Может опрашивать несколько серверов параллельно
Может "Лечить"данные
carbonzipper ⇔ carbonserver — 2700 RPS
graphite-web ⇔ carbon-cache — 80 RPS.
carbonserver теперь модуль go-carbon (с декабря 2016)
Распределение метрик: как это работало
Разница до 20%
Распределение метрик: jump hash
arxiv.org/pdf/1406.2294v1.pdf
Переписываем Frontend на Go: carbonapi
LoadBalancer
carbonzipper
carbonserver
go-carbon
Store1
DC1
carbon-c-relay
User Requests
carbonserver
go-carbon
Store2
graphite-web carbonapi
Переписываем Frontend на Go: итог
Существенно ускорились ответы пользователям (99-ый
Перцентиль 15s ⇒ 0.8s)
Стало возможно быстро выполнять сложные запросы
Проще добавлять новые мат. функции
Также можно использовать в другом коде, как package
Replication factor — что это такое и как его готовить
a,h c,a
b,c d,e
e,f g,b
f,d h,g
Replication Factor 2
Replication factor — что это такое и как его готовить
a,e c,g
b,f d,h
a,e c,g
b,f d,h
Replication Factor 1
Replication factor — что это такое и как его готовить
a,e c,g
b,f d,h
a,g h,e
c,f b,d
Replication Factor 1, randomized
Replication factor — что это такое и как его готовить
Replication factor — что это такое и как его готовить
carbonsearch — простой поиск по тэгам
Пример:
target = sum(virt.v1. ∗ .dc : dc1.status : live.role : graphiteStore.text − match : metricsReceived)
Поток тэгов и данных разделен
Не совсем честный — отсутствует история изменений
Синтаксис поддерживает только фильтрацию по "and"
Ищем тех кто неправильно использует систему
Ищем тех кто неправильно использует систему: flamegraphs
Собираем данные каждые 30 минут.
Что у нас есть сейчас
32 Frontend сервера
400 RPS на чтение
40k Метрик читается в секунду
3.5B точек в самом сложном периодическом запросе*
11 Gbps трафик на backend
200 серверов в 2-х DC
3M уникальных метрик в секудну (12M попадают на storage)
130 TB данных
Заменили весь стэк
* — Чтобы отфильтровать из них 9kb JSON.
Тестируем Clickhouse на одном сервере
Планы на будущее
Поиск по метаданным (в процессе)
Найти замену Whisper (в процессе)
Придумать что делать с Агрегаторами
Заменить протокол общения между компонентами
Улучшить совместимость с Graphite 1.0.0
Доделать тэги
Документация, пакеты, Docker образы
А еще все это — Open Source!
carbonapi — github.com/go-graphite/carbonapi
carbonzipper — github.com/go-graphite/carbonzipper
carbonsearch — github.com/kanatohodets/carbonsearch
carbon-c-relay — github.com/grobian/carbon-c-relay
go-carbon — github.com/lomik/go-carbon
carbonmem — github.com/go-graphite/carbonmem
replication factor test — github.com/Civil/graphite-rf-test
И еще пара ссылок на интересные проекты
Организация в которой мы собираем кластеризуемый
графит: github.com/go-graphite
buckytools — менедмент и ребалансировка графита,
написанная на Go: github.com/jjneely/buckytools
Proof of concept построения список метрик в виде flamegraph:
github.com/Civil/carbonserver-flamegraphs
Офигенный адаптер Clickhouse->Graphite от Романа
Ломоносова: github.com/lomik/graphite-clickhouse
Офигенный адаптер Graphite->Clickhouse от Романа
Ломоносова: github.com/lomik/carbon-clickhouse
Официальный адаптер Clickhouse<->Graphite:
github.com/yandex/graphouse
What’s next?
Спасибо за внимание!
А еще мы нанимаем в Амстердам!
Site Reliability Engineer
Site Reliability Engineer - Team Lead
Контакты: vladimir.smirnov@booking.com

More Related Content

What's hot

Применение в Enterprise-приложении графовой базы данных Neo4j - Антон Максимо...
Применение в Enterprise-приложении графовой базы данных Neo4j - Антон Максимо...Применение в Enterprise-приложении графовой базы данных Neo4j - Антон Максимо...
Применение в Enterprise-приложении графовой базы данных Neo4j - Антон Максимо...Dev2Dev
 
Новые нереляционные системы хранения данных
Новые нереляционные системы хранения данныхНовые нереляционные системы хранения данных
Новые нереляционные системы хранения данныхVsevolod Dyomkin
 
Criteo 1TiB Benchmark
Criteo 1TiB BenchmarkCriteo 1TiB Benchmark
Criteo 1TiB BenchmarkRamblerML
 
Антон Корзунов «Как разместить тысячи объектов на карте без увеличения нагруз...
Антон Корзунов «Как разместить тысячи объектов на карте без увеличения нагруз...Антон Корзунов «Как разместить тысячи объектов на карте без увеличения нагруз...
Антон Корзунов «Как разместить тысячи объектов на карте без увеличения нагруз...Yandex
 
Павел Артёмкин — Разработка C++ API для реализации алгоритмов на больших графах
Павел Артёмкин — Разработка C++ API для реализации алгоритмов на больших графахПавел Артёмкин — Разработка C++ API для реализации алгоритмов на больших графах
Павел Артёмкин — Разработка C++ API для реализации алгоритмов на больших графахYandex
 
Pulsedb — система хранения временных рядов
Pulsedb — система хранения временных рядовPulsedb — система хранения временных рядов
Pulsedb — система хранения временных рядовMax Lapshin
 
Developing high load systems using C++
Developing high load systems using C++Developing high load systems using C++
Developing high load systems using C++Ciklum Ukraine
 
Integration testing in DataGrip
Integration testing in DataGripIntegration testing in DataGrip
Integration testing in DataGripVasilii Chernov
 
Эволюция клиентской разработки: от веба ко "всеобщей мобилизации” или mobile-...
Эволюция клиентской разработки: от веба ко "всеобщей мобилизации” или mobile-...Эволюция клиентской разработки: от веба ко "всеобщей мобилизации” или mobile-...
Эволюция клиентской разработки: от веба ко "всеобщей мобилизации” или mobile-...Pavel Dovbush
 
Станислав Кралин, Сайтсофт - Связанные открытые данные федеральных органов ис...
Станислав Кралин, Сайтсофт - Связанные открытые данные федеральных органов ис...Станислав Кралин, Сайтсофт - Связанные открытые данные федеральных органов ис...
Станислав Кралин, Сайтсофт - Связанные открытые данные федеральных органов ис...AIST
 
мониторинг производительности Web приложений на python
мониторинг производительности Web приложений на pythonмониторинг производительности Web приложений на python
мониторинг производительности Web приложений на pythonSlach
 
Реклама со скоростью света (DMP-платформа), Сергей Жемжицкий (Clever Data)
Реклама со скоростью света (DMP-платформа), Сергей Жемжицкий (Clever Data)Реклама со скоростью света (DMP-платформа), Сергей Жемжицкий (Clever Data)
Реклама со скоростью света (DMP-платформа), Сергей Жемжицкий (Clever Data)Ontico
 
PostgreSQL + PostGIS + TimescaleDB - storage for monitoring systems
PostgreSQL + PostGIS + TimescaleDB - storage for monitoring systemsPostgreSQL + PostGIS + TimescaleDB - storage for monitoring systems
PostgreSQL + PostGIS + TimescaleDB - storage for monitoring systemsIvan Muratov
 
"OLAP с помощью Postgres (как мы строили BI)" Фефелов Андрей, Mastery.pro
"OLAP с помощью Postgres (как мы строили BI)" Фефелов Андрей, Mastery.pro"OLAP с помощью Postgres (как мы строили BI)" Фефелов Андрей, Mastery.pro
"OLAP с помощью Postgres (как мы строили BI)" Фефелов Андрей, Mastery.proit-people
 
Мониторинг, когда не тестируешь
Мониторинг, когда не тестируешьМониторинг, когда не тестируешь
Мониторинг, когда не тестируешьUptime Community
 
История одной картинки
История одной картинкиИстория одной картинки
История одной картинкиAndrey Rodionov
 
Экосистема Common Lisp
Экосистема Common LispЭкосистема Common Lisp
Экосистема Common LispVsevolod Dyomkin
 
Near-realtime аналитика событий в высоконагруженном проекте
Near-realtime аналитика событий в высоконагруженном проектеNear-realtime аналитика событий в высоконагруженном проекте
Near-realtime аналитика событий в высоконагруженном проектеAlexandr Krasheninnikov
 

What's hot (18)

Применение в Enterprise-приложении графовой базы данных Neo4j - Антон Максимо...
Применение в Enterprise-приложении графовой базы данных Neo4j - Антон Максимо...Применение в Enterprise-приложении графовой базы данных Neo4j - Антон Максимо...
Применение в Enterprise-приложении графовой базы данных Neo4j - Антон Максимо...
 
Новые нереляционные системы хранения данных
Новые нереляционные системы хранения данныхНовые нереляционные системы хранения данных
Новые нереляционные системы хранения данных
 
Criteo 1TiB Benchmark
Criteo 1TiB BenchmarkCriteo 1TiB Benchmark
Criteo 1TiB Benchmark
 
Антон Корзунов «Как разместить тысячи объектов на карте без увеличения нагруз...
Антон Корзунов «Как разместить тысячи объектов на карте без увеличения нагруз...Антон Корзунов «Как разместить тысячи объектов на карте без увеличения нагруз...
Антон Корзунов «Как разместить тысячи объектов на карте без увеличения нагруз...
 
Павел Артёмкин — Разработка C++ API для реализации алгоритмов на больших графах
Павел Артёмкин — Разработка C++ API для реализации алгоритмов на больших графахПавел Артёмкин — Разработка C++ API для реализации алгоритмов на больших графах
Павел Артёмкин — Разработка C++ API для реализации алгоритмов на больших графах
 
Pulsedb — система хранения временных рядов
Pulsedb — система хранения временных рядовPulsedb — система хранения временных рядов
Pulsedb — система хранения временных рядов
 
Developing high load systems using C++
Developing high load systems using C++Developing high load systems using C++
Developing high load systems using C++
 
Integration testing in DataGrip
Integration testing in DataGripIntegration testing in DataGrip
Integration testing in DataGrip
 
Эволюция клиентской разработки: от веба ко "всеобщей мобилизации” или mobile-...
Эволюция клиентской разработки: от веба ко "всеобщей мобилизации” или mobile-...Эволюция клиентской разработки: от веба ко "всеобщей мобилизации” или mobile-...
Эволюция клиентской разработки: от веба ко "всеобщей мобилизации” или mobile-...
 
Станислав Кралин, Сайтсофт - Связанные открытые данные федеральных органов ис...
Станислав Кралин, Сайтсофт - Связанные открытые данные федеральных органов ис...Станислав Кралин, Сайтсофт - Связанные открытые данные федеральных органов ис...
Станислав Кралин, Сайтсофт - Связанные открытые данные федеральных органов ис...
 
мониторинг производительности Web приложений на python
мониторинг производительности Web приложений на pythonмониторинг производительности Web приложений на python
мониторинг производительности Web приложений на python
 
Реклама со скоростью света (DMP-платформа), Сергей Жемжицкий (Clever Data)
Реклама со скоростью света (DMP-платформа), Сергей Жемжицкий (Clever Data)Реклама со скоростью света (DMP-платформа), Сергей Жемжицкий (Clever Data)
Реклама со скоростью света (DMP-платформа), Сергей Жемжицкий (Clever Data)
 
PostgreSQL + PostGIS + TimescaleDB - storage for monitoring systems
PostgreSQL + PostGIS + TimescaleDB - storage for monitoring systemsPostgreSQL + PostGIS + TimescaleDB - storage for monitoring systems
PostgreSQL + PostGIS + TimescaleDB - storage for monitoring systems
 
"OLAP с помощью Postgres (как мы строили BI)" Фефелов Андрей, Mastery.pro
"OLAP с помощью Postgres (как мы строили BI)" Фефелов Андрей, Mastery.pro"OLAP с помощью Postgres (как мы строили BI)" Фефелов Андрей, Mastery.pro
"OLAP с помощью Postgres (как мы строили BI)" Фефелов Андрей, Mastery.pro
 
Мониторинг, когда не тестируешь
Мониторинг, когда не тестируешьМониторинг, когда не тестируешь
Мониторинг, когда не тестируешь
 
История одной картинки
История одной картинкиИстория одной картинки
История одной картинки
 
Экосистема Common Lisp
Экосистема Common LispЭкосистема Common Lisp
Экосистема Common Lisp
 
Near-realtime аналитика событий в высоконагруженном проекте
Near-realtime аналитика событий в высоконагруженном проектеNear-realtime аналитика событий в высоконагруженном проекте
Near-realtime аналитика событий в высоконагруженном проекте
 

Similar to Graphite@Scale: Как сохранять миллионы точек в секунду

Grpahite&amp;grafana
Grpahite&amp;grafanaGrpahite&amp;grafana
Grpahite&amp;grafanaLevon Avakyan
 
Работа с Big Data
Работа с Big Data Работа с Big Data
Работа с Big Data MATLAB
 
мониторинг производительности приложения на PINBA
мониторинг производительности приложения на PINBAмониторинг производительности приложения на PINBA
мониторинг производительности приложения на PINBASlach
 
Оптимизации поисковой выдачи Яндекса / Иван Хватов, Сергей Ляджин (Яндекс)
Оптимизации поисковой выдачи Яндекса / Иван Хватов, Сергей Ляджин (Яндекс)Оптимизации поисковой выдачи Яндекса / Иван Хватов, Сергей Ляджин (Яндекс)
Оптимизации поисковой выдачи Яндекса / Иван Хватов, Сергей Ляджин (Яндекс)Ontico
 
Anton Tsitou "Cycle ORM and Graphs"
Anton Tsitou "Cycle ORM and Graphs"Anton Tsitou "Cycle ORM and Graphs"
Anton Tsitou "Cycle ORM and Graphs"Fwdays
 
Мониторинг в микросервисной архитектуре / Владимир Колобаев (Avito)
Мониторинг в микросервисной архитектуре / Владимир Колобаев (Avito)Мониторинг в микросервисной архитектуре / Владимир Колобаев (Avito)
Мониторинг в микросервисной архитектуре / Владимир Колобаев (Avito)Ontico
 
Прогрессивный рендеринг и Catberry.js / Михаил Реенко (2GIS / Flamp)
Прогрессивный рендеринг и Catberry.js / Михаил Реенко (2GIS / Flamp)Прогрессивный рендеринг и Catberry.js / Михаил Реенко (2GIS / Flamp)
Прогрессивный рендеринг и Catberry.js / Михаил Реенко (2GIS / Flamp)Ontico
 
Веб-сервер Phantom
Веб-сервер PhantomВеб-сервер Phantom
Веб-сервер Phantomyaevents
 
Анализ данных в MATLAB 
Анализ данных в MATLAB Анализ данных в MATLAB 
Анализ данных в MATLAB MATLAB
 
Автоматизация: технологии и средства
Автоматизация: технологии и средстваАвтоматизация: технологии и средства
Автоматизация: технологии и средстваCisco Russia
 
Как обслужить 60 миллионов абонентов, Артем Руфанов (ПЕТЕР-СЕРВИС)
Как обслужить 60 миллионов абонентов, Артем Руфанов (ПЕТЕР-СЕРВИС)Как обслужить 60 миллионов абонентов, Артем Руфанов (ПЕТЕР-СЕРВИС)
Как обслужить 60 миллионов абонентов, Артем Руфанов (ПЕТЕР-СЕРВИС)Ontico
 
Twisted Framework - сетевые приложения в Python
Twisted Framework - сетевые приложения в PythonTwisted Framework - сетевые приложения в Python
Twisted Framework - сетевые приложения в PythonAndrey Smirnov
 
Twisted Framework - фреймворк для написания сетевых приложений на Python (Анд...
Twisted Framework - фреймворк для написания сетевых приложений на Python (Анд...Twisted Framework - фреймворк для написания сетевых приложений на Python (Анд...
Twisted Framework - фреймворк для написания сетевых приложений на Python (Анд...Ontico
 
Twisted Framework - сетевые приложения в Python
Twisted Framework - сетевые приложения в PythonTwisted Framework - сетевые приложения в Python
Twisted Framework - сетевые приложения в PythonAndrey Smirnov
 
Телеметрия. Обзор технологии и сценарии ее использования
Телеметрия. Обзор технологии и сценарии ее использованияТелеметрия. Обзор технологии и сценарии ее использования
Телеметрия. Обзор технологии и сценарии ее использованияCisco Russia
 
Планирование и оптимизация сети оператора связи IP/MPLS с Cisco WAN Orchestra...
Планирование и оптимизация сети оператора связи IP/MPLS с Cisco WAN Orchestra...Планирование и оптимизация сети оператора связи IP/MPLS с Cisco WAN Orchestra...
Планирование и оптимизация сети оператора связи IP/MPLS с Cisco WAN Orchestra...Cisco Russia
 
Оптимизация high-contention write в PostgreSQL / Александр Коротков, Олег Бар...
Оптимизация high-contention write в PostgreSQL / Александр Коротков, Олег Бар...Оптимизация high-contention write в PostgreSQL / Александр Коротков, Олег Бар...
Оптимизация high-contention write в PostgreSQL / Александр Коротков, Олег Бар...Ontico
 
Александр Зобнин, Grafana Labs
Александр Зобнин, Grafana LabsАлександр Зобнин, Grafana Labs
Александр Зобнин, Grafana LabsBadoo Development
 
Smirnov Twisted Python
Smirnov Twisted PythonSmirnov Twisted Python
Smirnov Twisted PythonHighLoad2009
 
Итак, оно тормозит
Итак, оно тормозитИтак, оно тормозит
Итак, оно тормозитVsevolod Polyakov
 

Similar to Graphite@Scale: Как сохранять миллионы точек в секунду (20)

Grpahite&amp;grafana
Grpahite&amp;grafanaGrpahite&amp;grafana
Grpahite&amp;grafana
 
Работа с Big Data
Работа с Big Data Работа с Big Data
Работа с Big Data
 
мониторинг производительности приложения на PINBA
мониторинг производительности приложения на PINBAмониторинг производительности приложения на PINBA
мониторинг производительности приложения на PINBA
 
Оптимизации поисковой выдачи Яндекса / Иван Хватов, Сергей Ляджин (Яндекс)
Оптимизации поисковой выдачи Яндекса / Иван Хватов, Сергей Ляджин (Яндекс)Оптимизации поисковой выдачи Яндекса / Иван Хватов, Сергей Ляджин (Яндекс)
Оптимизации поисковой выдачи Яндекса / Иван Хватов, Сергей Ляджин (Яндекс)
 
Anton Tsitou "Cycle ORM and Graphs"
Anton Tsitou "Cycle ORM and Graphs"Anton Tsitou "Cycle ORM and Graphs"
Anton Tsitou "Cycle ORM and Graphs"
 
Мониторинг в микросервисной архитектуре / Владимир Колобаев (Avito)
Мониторинг в микросервисной архитектуре / Владимир Колобаев (Avito)Мониторинг в микросервисной архитектуре / Владимир Колобаев (Avito)
Мониторинг в микросервисной архитектуре / Владимир Колобаев (Avito)
 
Прогрессивный рендеринг и Catberry.js / Михаил Реенко (2GIS / Flamp)
Прогрессивный рендеринг и Catberry.js / Михаил Реенко (2GIS / Flamp)Прогрессивный рендеринг и Catberry.js / Михаил Реенко (2GIS / Flamp)
Прогрессивный рендеринг и Catberry.js / Михаил Реенко (2GIS / Flamp)
 
Веб-сервер Phantom
Веб-сервер PhantomВеб-сервер Phantom
Веб-сервер Phantom
 
Анализ данных в MATLAB 
Анализ данных в MATLAB Анализ данных в MATLAB 
Анализ данных в MATLAB 
 
Автоматизация: технологии и средства
Автоматизация: технологии и средстваАвтоматизация: технологии и средства
Автоматизация: технологии и средства
 
Как обслужить 60 миллионов абонентов, Артем Руфанов (ПЕТЕР-СЕРВИС)
Как обслужить 60 миллионов абонентов, Артем Руфанов (ПЕТЕР-СЕРВИС)Как обслужить 60 миллионов абонентов, Артем Руфанов (ПЕТЕР-СЕРВИС)
Как обслужить 60 миллионов абонентов, Артем Руфанов (ПЕТЕР-СЕРВИС)
 
Twisted Framework - сетевые приложения в Python
Twisted Framework - сетевые приложения в PythonTwisted Framework - сетевые приложения в Python
Twisted Framework - сетевые приложения в Python
 
Twisted Framework - фреймворк для написания сетевых приложений на Python (Анд...
Twisted Framework - фреймворк для написания сетевых приложений на Python (Анд...Twisted Framework - фреймворк для написания сетевых приложений на Python (Анд...
Twisted Framework - фреймворк для написания сетевых приложений на Python (Анд...
 
Twisted Framework - сетевые приложения в Python
Twisted Framework - сетевые приложения в PythonTwisted Framework - сетевые приложения в Python
Twisted Framework - сетевые приложения в Python
 
Телеметрия. Обзор технологии и сценарии ее использования
Телеметрия. Обзор технологии и сценарии ее использованияТелеметрия. Обзор технологии и сценарии ее использования
Телеметрия. Обзор технологии и сценарии ее использования
 
Планирование и оптимизация сети оператора связи IP/MPLS с Cisco WAN Orchestra...
Планирование и оптимизация сети оператора связи IP/MPLS с Cisco WAN Orchestra...Планирование и оптимизация сети оператора связи IP/MPLS с Cisco WAN Orchestra...
Планирование и оптимизация сети оператора связи IP/MPLS с Cisco WAN Orchestra...
 
Оптимизация high-contention write в PostgreSQL / Александр Коротков, Олег Бар...
Оптимизация high-contention write в PostgreSQL / Александр Коротков, Олег Бар...Оптимизация high-contention write в PostgreSQL / Александр Коротков, Олег Бар...
Оптимизация high-contention write в PostgreSQL / Александр Коротков, Олег Бар...
 
Александр Зобнин, Grafana Labs
Александр Зобнин, Grafana LabsАлександр Зобнин, Grafana Labs
Александр Зобнин, Grafana Labs
 
Smirnov Twisted Python
Smirnov Twisted PythonSmirnov Twisted Python
Smirnov Twisted Python
 
Итак, оно тормозит
Итак, оно тормозитИтак, оно тормозит
Итак, оно тормозит
 

Graphite@Scale: Как сохранять миллионы точек в секунду

  • 1. Graphite@Scale: Как сохранять миллионы точек в секунду Vladimir Smirnov System Administrator hangops_ru 2017
  • 2. Зачем вообще хранить метрики? Обычно метрики нужны когда: Пришло время планировать закупки железа Отладка проблем и расследование инцидентов Бизнес-метрики и их визуализация И многое многое другое...
  • 3. Graphite и его архитектура Оригинал: graphiteapp.org Хранит time-series данные Текствой протокол и простой HTTP API Моудльный — меняй что хочешь
  • 4. Типичный Graphite LoadBalancer graphite-web graphite-web carbon-cache Store1 DC1 Servers, Apps, etc carbon-relay Metrics User Requests graphite-web carbon-cache Store2 graphite-web graphite-web carbon-cache Store1 DC2 graphite-web carbon-cache Store2 carbon-aggegator
  • 5. Ломаем Graphtie: проблемы масштабирования LoadBalancer graphite-web graphite-web carbon-cache Store1 DC1 Servers, Apps, etc carbon-relay Metrics User Requests graphite-web carbon-cache Store2 graphite-web graphite-web carbon-cache Store1 DC2 graphite-web carbon-cache Store2 carbon-aggegator Что не так с этой схемой? carbon-relay — SPOF Плохо масштабируется Синхронизация данных после аварий? Время ответа увеличивается с ростом инфраструктуры
  • 7. "Чиним"carbon-relay carbon-c-relay: Написан на C Может 1M точек в секунду всего на 2-х ядрах Играет роль L7 балансировщика Может делать агрегацию Позволяет пережить маленький падения
  • 8. Zipper: скрываем проблемы от пользователей Оригинал: "The essence of bugfixing" by irisuhime
  • 9. Zipper: скрываем проблемы от пользователей Запрос: target=sys.server.cpu.user Результат: t0 V V V V V t1 Node1 t0 V V V V V t1 Node2 t0 V V V V V V V t1 Zipped metric
  • 11. Zipper: Результаты Написан на Go Может опрашивать несколько серверов параллельно Может "Лечить"данные carbonzipper ⇔ carbonserver — 2700 RPS graphite-web ⇔ carbon-cache — 80 RPS. carbonserver теперь модуль go-carbon (с декабря 2016)
  • 12. Распределение метрик: как это работало Разница до 20%
  • 13. Распределение метрик: jump hash arxiv.org/pdf/1406.2294v1.pdf
  • 14. Переписываем Frontend на Go: carbonapi LoadBalancer carbonzipper carbonserver go-carbon Store1 DC1 carbon-c-relay User Requests carbonserver go-carbon Store2 graphite-web carbonapi
  • 15. Переписываем Frontend на Go: итог Существенно ускорились ответы пользователям (99-ый Перцентиль 15s ⇒ 0.8s) Стало возможно быстро выполнять сложные запросы Проще добавлять новые мат. функции Также можно использовать в другом коде, как package
  • 16. Replication factor — что это такое и как его готовить a,h c,a b,c d,e e,f g,b f,d h,g Replication Factor 2
  • 17. Replication factor — что это такое и как его готовить a,e c,g b,f d,h a,e c,g b,f d,h Replication Factor 1
  • 18. Replication factor — что это такое и как его готовить a,e c,g b,f d,h a,g h,e c,f b,d Replication Factor 1, randomized
  • 19. Replication factor — что это такое и как его готовить
  • 20. Replication factor — что это такое и как его готовить
  • 21. carbonsearch — простой поиск по тэгам Пример: target = sum(virt.v1. ∗ .dc : dc1.status : live.role : graphiteStore.text − match : metricsReceived) Поток тэгов и данных разделен Не совсем честный — отсутствует история изменений Синтаксис поддерживает только фильтрацию по "and"
  • 22. Ищем тех кто неправильно использует систему
  • 23. Ищем тех кто неправильно использует систему: flamegraphs Собираем данные каждые 30 минут.
  • 24. Что у нас есть сейчас 32 Frontend сервера 400 RPS на чтение 40k Метрик читается в секунду 3.5B точек в самом сложном периодическом запросе* 11 Gbps трафик на backend 200 серверов в 2-х DC 3M уникальных метрик в секудну (12M попадают на storage) 130 TB данных Заменили весь стэк * — Чтобы отфильтровать из них 9kb JSON.
  • 25. Тестируем Clickhouse на одном сервере
  • 26. Планы на будущее Поиск по метаданным (в процессе) Найти замену Whisper (в процессе) Придумать что делать с Агрегаторами Заменить протокол общения между компонентами Улучшить совместимость с Graphite 1.0.0 Доделать тэги Документация, пакеты, Docker образы
  • 27. А еще все это — Open Source! carbonapi — github.com/go-graphite/carbonapi carbonzipper — github.com/go-graphite/carbonzipper carbonsearch — github.com/kanatohodets/carbonsearch carbon-c-relay — github.com/grobian/carbon-c-relay go-carbon — github.com/lomik/go-carbon carbonmem — github.com/go-graphite/carbonmem replication factor test — github.com/Civil/graphite-rf-test
  • 28. И еще пара ссылок на интересные проекты Организация в которой мы собираем кластеризуемый графит: github.com/go-graphite buckytools — менедмент и ребалансировка графита, написанная на Go: github.com/jjneely/buckytools Proof of concept построения список метрик в виде flamegraph: github.com/Civil/carbonserver-flamegraphs Офигенный адаптер Clickhouse->Graphite от Романа Ломоносова: github.com/lomik/graphite-clickhouse Офигенный адаптер Graphite->Clickhouse от Романа Ломоносова: github.com/lomik/carbon-clickhouse Официальный адаптер Clickhouse<->Graphite: github.com/yandex/graphouse
  • 29. What’s next? Спасибо за внимание! А еще мы нанимаем в Амстердам! Site Reliability Engineer Site Reliability Engineer - Team Lead Контакты: vladimir.smirnov@booking.com