Исходная позиция: разрабатываю и эксплуатирую с коллегами онлайн-систему, которая обслуживает сотни клиентов. Наша система работает на нескольких серверах, использует несколько БД, использует очереди сообщений, внешние сервисы для отправки смс и почты. Типичная ситуация? Вполне.
Что хочу получить?
Хочу получить более прозрачную систему для охвата всей картины подшефного хозяйства, чтобы видеть узкие места, видеть зависимости одних частей системы от других, знать, что ssh на одном сервере крайне важен для «вон того маленького обработчика», который работает по ночам на другом сервере.
Зачем? Иногда требуется охватить взглядом все свое подведомственное хозяйство для получения четкой картины, увидеть направления масштабирования и узкие места. В общем, подумать об архитектуре всей системы. Понимаешь, что одни сервисы (БД, очереди сообщений) используются другими (приложения), а эти сервисы в свою очередь используются третьими. Это удобно для архитектора-разработчика при разработке и развитии системы, это удобно для эксплуатанта при эксплуатации системы.
Почему не ITSM/ITIL? Если глянуть в ITSM/ITIL, то можно там увидеть тему про сервисно-ресурсную модель. Вполне вероятно, что я не совсем компетентен рассуждать о сложностях ITSM/ITIL и внедрении оного в компаниях. Поэтому поправляйте меня, пожалуйста, если я где-то ошибаюсь, здесь и далее.
ITIL (IT Infrastructure Library) — библиотека, описывающая лучшие из применяемых на практике способов организации работы подразделений или компаний, занимающихся предоставлением услуг в области информационных технологий. (ITIL в Википедии)
В ITSM/ITIL есть про сервисно-ресурсную модель. Но когда я начинаю читать всю эту кухню и думать о внедрении какого-либо «ентерпрайз» продукта, например: ИнфраМенеджер или ОмниТрекер, то «мой голова вай-вай». (Более того эти продукты целиком мне ни к чему, затраты на их покупку, внедрение и замену используемых в текущий момент будут ого-го, причем большая часть затрат будет не на ПО). Из всего ITSM мне надо немного — только схему зависимостей ресурсов, более того ITSM вроде как должен охватить всю организацию, я же хочу всего лишь использовать на маленьком выделенном участке в узкой области.
Далее изложу очень упрощенную версию сервисно-ресурсной модели. Почему такое упрощение? Просто пока не испытываю потребности вводить больше сущностей для понимания работы всей своей системы.
Основы и термины.
Система — сочетание всего нашего ИТ-хозяйства, которое установлено на наших серверах.
Сервис — любое приложение, будь-то веб-сервер или БД (далее приложение = сервис)
Ресурс — предоставляемая возможность сервисом для его использования из-вне сервиса.
Зависимость — связь сервиса с каким-либо ресурсом иного сервиса.
Т.е. систему можно представить как совокупность сервисов, часть из которых предоставляет ресурсы, а другая их использует.
Надо понимать, что зависимость от ресурса — это не равно потоку данных. Т.е. если наше приложение, например, зависит от сервера сообщений, то оно как принимает, так и отправляет сообщения через сервер сообщений.
Нарисуем простую схему концепта.
Например, у нас есть два хоста, на одном работает приложение node.js и сервер БД, на другом сервер PowerDNS и сервер БД. Наше приложение на node.js при создании новой учетной записи добавляет соответствующий домен 3-его уровня, занося записи в БД PowerDNS'а.
Далее можно дополнять и увеличивать количество сервисов и их зависимостей. Принцип понятен.
Инструменты
Раньше я подобные схемы рисовал в Gliffy.com. Но сейчас все чаще сталкиваюсь с необходимостью поддерживать эту схему в актуальном состоянии. Но в gliffy связи на схеме — это всего лишь соединение линии и прямоугольника. Поэтому идет поиск инструмента для хранения структуры взаимосвязей и отображения этих связей на схеме.
Вот пример моей схемы в Gliffy
Извините, пожалуйста, за качество.
Deedoo
Пока идет поиск (а я надеюсь, что вы, уважаемые читатели, в комментариях подскажете мне какие-либо инструменты, возможно, что-то подобное уже было на Хабре, да я не нашел), как прототип мы с коллегой набросали небольшое приложение deedoo. В нем мы храним информацию о хостах, сервисах, их ресурсах и зависимостях, а также строим схему зависимостей. Схема строится с использованием библиотеки Joint.js.
Проект на гитхабе: github.com/antirek/deedoo Инструкция по установке есть в репозитории. С помощью deedoo нарисована схема с PowerDNS выше.
Вот, например, как выглядят зависимости node.js приложения в веб-интерфейсе deedoo
Пока приложение Deedoo кроме рисования зависимостей больше ничего не умеет. Но еще есть идея использовать его как сервер настроек. Ведь если мы знаем, что наше произвольное приложение зависит от некоторых ресурсов, пусть оно их требует для своей работы.
Написав, что-то вроде config = serverConf('http://config.server.ru').appID('super_key').get(); мы можем получить все необходимые настройки приложения при его запуске. При отсутствии в загруженном конфиге необходимых параметров мы просто не запускаем приложение. Например, при переносе БД на другой хост нам для получения настроек приложением достаточно только перезагрузить, не так ли?
Что дальше?
Пока не знаю. С одной стороны хочется более универсально, с другой — практично. Ведь цель — это сделать развитие системы более четким, прозрачным. С одной стороны подпирает мониторинг, с другой управление конфигурациями. Т.е. к этому списку сервисов — хочется видеть их метрики работы, состояния, производительности. А еще хотелось бы нажать кнопку и обновить параметры БД, приложения и т.д.
Итак, подошли к самому ключевому моменту данной заметки: что делать дальше? Варианты:
а) таки сделать все серьезно — внедрять ITSM/ITIL, выбрав какой-либо готовый продукт? (возможно есть отличные free & open source решения? описания внедрений в интернете?)
б) развивать свой велосипед? Т.е. использовать сервис, описывающий все зависимости. А новые разрабатываемые приложения используют загрузку настроек из этого сервиса. ( Мне, в целом, нравится идея любым получения настроек любым приложением с сервера настроек, добавить группы, типы — и вообще получится здравая система, имхо. Более того получение настроек свяжет эти декларированные зависимости в deedoo с реальными приложениями, которые работают на серверах. Но может это как-то стоит делать иначе? Может быть есть уже подобные системы? )
в) иное?
В общем, все получилось немного сумбурно и смешанно, т.к. здесь есть и про разработку онлайн-системы и ее же эксплуатацию. Плюс некоторый бардак в терминологии. Поделился своими мыслями и наработками, надеюсь на конструктивную обратную связь сообщества по вопросам заметки.
Upd.
Вопросы инфраструктуры волнуют не только меня. Из интересных проектов могу отметить terraform.io (в связке с consul.io) и weave.works.
Комментарии (15)
Botkin
19.05.2015 16:00+1Столкнулся с подобной проблемой, только я бы хотел увидеть инструмент, реализующий также некоторую логику. Например, хранить некий «вес» квадритика и в соответствии с определенными правилами вычислять этот «вес» для зависимых квадратиков. Так мы можем оценить критичность того или иного квадратика. Или, например, посчитать его стоимость
Перепробовал множество инструментов и так ничего и не нашел тоже. Пробую использовать Flying Logic Pro, но оно умеет только красиво распологать квадратики — не более.antirek Автор
19.05.2015 17:02Алексей, ожидал вашего комментария: ) Серьезно, при поиске по Хабру по сервисно-ресурсной модели ваш комментарий один из первых.
Flying Logic Pro поставлю посмотреть, там даже версия для linux есть — отлично (у большинства софта под тему ITSM только win версия).
А зачем оценивать критичность и стоимость?
Botkin
20.05.2015 09:25+1Кейс А: Сломались одновременно серверы/системы/ресурсы 3 и 5. Какой из них в первую очередь чинить? Тот, который наиболее критичен.
Так как все сервисы, предоставляемые конечным пользователям, так или иначе привязаны к ресурсам, то мы можем ввести некий параметр критичности этих сервисов (пусть выраженный в количестве пользователей), а потом эту критичность каким-то образом транслировать на ресурсы. Подцепили новое приложение к базе данных — у базы данных выросла критичность; у серверов, от которых зависит база данных выросла критичность; и тд. Чтобы не подходить к этой проблеме интуитивно, хотелось бы иметь некоторую визуализацию. Как вариант, энтерпрайзную систему мониторинга.
Кейс Б: Во сколько нам обходится почта? Не дешевле ли перейти в gapps/office365?
Тут тоже самое, только наоборот. У каждого ресурса есть либо собственная стоимость (админ, физ. сервер, абон. плата), либо унаследованная (вирт. сервер, некое приложение). Пусть же стоимость всех ресурсов по восходящей просуммируется и мы получим стоимость, собственно, сервиса.
Сейчас я считаю всё вот так:
Распечатываю из flying logic, склеиваю, беру карандаш, калькулятор и поехали. Сами понимаете, таким способом расчитывать что-либо в реальном времени невозможно физически.
До сих пор не понимаю, почему я не смог найти готового инструмента для своей задачи; неужели она такая нетипичная?antirek Автор
20.05.2015 12:41А вы смотрели в сторону графовых БД, типа neo4j? Мне думается, что у вас задача где-то вот рядом с этой темой.
Вот здесь на видео vimeo.com/12014944 есть немного кухни. Можно у каждого узла назначать свойства. И, наверное, как-то алгоритмически обсчитывать эти самые свойства.
Схемка ух!Botkin
20.05.2015 13:40+1Спасибо за наводку. Посмотрю.
(Схемка на фотографии старая, можно сказать демо. Сейчас она гораздо более ух)ITSystemsManagement
30.05.2015 02:50А из какой системы вы получаете сырые данные для расчетов? Считаете недельную доступность?
Привожу сугубо для примера скриншоты из коммерческой BMC Atrium CMDB.
Здесь можно разглядеть настройку веса связи одного сервиса на другой (в примере банковские сервисы Дилинг и Факторинг) и методы влияния критичности событий на элементы модели — повышение (Warning-Critical), понижение, без влияния и т.д.):
На этом скриншоте видно, что можно настроить вычисление статуса элемента сервисно-ресурсной модели:
Далее модель передается в систему мониторинга, которая прицепляет события к этим объектам и в конце концов позволяет вычислить дневную, недельную и так далее доступность любого сервиса для понимания CIO, что админы систем не шланги какие-нибудь.
Если у коллег по цеху получится сделать такое решение на основе open-source решений то будет, конечно, круто. А если прикрутить к тому же Заббиксу, то круто вдвойне.
BigD
19.05.2015 23:12+2Хотел было написать, что вы изобретаете CMDB, а потом задумался, а подходит ли типовая CMDB как для регистрации, так и для удобного использования информации о зависимостях, интерфейсах и прочих связях между, например, разными приложениями. На практике вообще с нормальными CMDB не сталкивался.
ITSystemsManagement
30.05.2015 02:52А вы смотрели плагин для Заббикса, который умеет влияния строить? Может его можно как-то доработать до нужного вам уровня?
norguhtar
www.yworks.com/en/products/yfiles/yed
antirek Автор
Написано, что можно импортировать данные из Excel со связями. Попробую, спасибо.