Библиотека сайта rus-linux.net
Проект Graphite
Глава 7 из книги "Архитектура приложений с открытым исходным кодом", том 1.
Оригинал: Graphite,
глава из книги "The Architecture of Open Source Applications" том 1.
Автор: Chris Davis
Перевод: Н.Ромоданов
7.2. Серверная часть: Простой сервис хранения данных
Серверная часть проекта Graphite представляет собой процесс-демон, называемый carbon-cache
, на который обычно ссылаются как на carbon
. Он собран на Twisted, хорошо масштабируемом управляемым событиями фреймворке ввода/вывода для языка Python. Twisted позволяет серверу carbon
эффективно общаться с большим количеством клиентов и обрабатывать большой объём трафика с малыми накладными расходами. На рис.7.2 показан поток данных, идущий между carbon
, whisper
и веб-приложением: клиентские приложения собирают данные и отсылают их на серверную сторону Graphite в carbon
, где данные хранятся в файлах whisper
. Затем эти данные могут использоваться веб-приложением Graphite для создания графиков.
Рис.7.2: Поток данных
Основная функция демона carbon
состоит в запоминании значений точек данных для метрик, предоставляемых клиентами. В терминологии Graphite метрикой является любая сущность, которую можно измерить и которая изменяется с течением времени (например, использование ресурсов процессора сервера или объем продаж какого-либо продукта). Точка данных является просто парой (timestamp, value)
, соответствующей значению конкретной метрики, измеренному в определенное время. Метрики идентифицируются уникальным образом с помощью собственного имени, причем имена каждой метрики точно также, как и точки данных передаются из клиентских приложений. Обычным типом клиентского приложения является агент, осуществляющий мониторинг, который собирает значения системных или прикладных метрик и отсылает собранные значения демону carbon
для хранения и визуализации. Метрики в Graphite имеют простые, иерархические имена, похожие на пути в файловых системах и отличающиеся лишь тем, что в качестве разделителя иерархий используется точка, а не слэш или обратный слэш. Carbon
берет любое допустимое имя и для каждой метрики создает файл whisper
, в котором хранятся точки данных этой метрики. Файлы \code{whisper} хранятся в каталоге данных \code{carbon} в виде иерархической файловой системы, отражающей иерархию деления точками на части имени каждой метрики, Следовательно servers.www01.cpuUsage
отображается, например, в .../servers/www01/cpuUsage.wsp
.
Когда клиентское приложение хочет отправить в Graphite значения точек данных, оно должно установить с carbon
обычно через порт 2003 [2] соединение TCP. Все сообщения поступают только со стороны клиента: carbon
ничего не пересылает через это соединение. Пока соединение остается открытым, клиент, когда это необходимо, отсылает значения точек данных в простом текстовом формате. Формат представляет собой одну текстовую строку для каждого значения точки ввода, в которой указываются разделяемые пробелами имя, имеющее точки, значение данных и временная отметка, использующая формате времени UNIX. Например, клиент может послать следующее:
servers.www01.cpuUsage 42 1286269200 products.snake-oil.salesPerMinute 123 1286269200 [one minute passes] servers.www01.cpuUsageUser 44 1286269260 products.snake-oil.salesPerMinute 119 1286269260
Если рассматривать в общем, то все, что carbon
делает, это прослушивает поступающие данные в этом формате и с помощью whisper
пытается сохранить их на диске настолько быстро, насколько это возможно. Далее мы обсудим некоторые конкретные особенности, используемые для обеспечения масштабируемости и достижения наилучшей производительности, которую мы можем получить на обычном жёстком диске.
Далее: Клиентская часть: Графики по запросу