Наши партнеры

UnixForum





Библиотека сайта 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 пытается сохранить их на диске настолько быстро, насколько это возможно. Далее мы обсудим некоторые конкретные особенности, используемые для обеспечения масштабируемости и достижения наилучшей производительности, которую мы можем получить на обычном жёстком диске.


Далее: Клиентская часть: Графики по запросу