Как отслеживать системные зависимости?
Введение
В моей нынешней организации у нас есть много настольных и веб-приложений, которые в какой-то момент подпитываются друг в друга. Рассматривая старые приложения или создавая новые приложения, очень сложно попытаться запомнить, какая система использует другие системы для работы. Я не говорю о зависимостях программного обеспечения, таких как DLL и изображения, я говорю о целых системах, таких как финансовая система, зависящая от системы управления персоналом и т.д.
Мой вопрос
Каков наилучший способ отслеживать, как одна целая система зависит от другой?
Ответ может предложить либо метод выполнения вышеизложенного, либо программный пакет, либо методы документации.
В моем конкретном случае Many означает более 20 веб-приложений и настольных приложений на десятках серверов.
Ответы
Ответ 1
Я бы сказал, чтобы четко указать, что в вашем архитектурном документе. Для этого есть хорошие инструменты, например Enterprise Architect. Этот инструмент позволяет вам создавать диаграммы с использованием стандарта UML для четкого и визуального описания этих зависимостей.
Ответ 2
Лучший источник информации обычно содержится в файлах Config. Обычно это строки подключения, URL-адреса веб-сервисов и т.д., Что даст хорошее представление о внешних зависимостях.
Другой способ - использовать профилирование, трассировку и применение фильтров, мы можем легко отслеживать любые внешние вызовы. В большинстве случаев зависимость зависит от уровня базы данных, а проверка подключенных серверов и отслеживание их зависимостей может выявить много информации.
Я не уверен, есть ли какой-либо автоматический способ получить эту информацию, особенно если системы находятся на нескольких платформах. Для документирования будет задействовано много ручной работы.
Ответ 3
Это приложение, которое мы производим в Tideway Systems, и для этого используются многие крупные организации. Вы можете использовать этот продукт для поиска своего имущества и использовать возможности моделирования для описания ваших бизнес-приложений (которые обычно состоят из более чем одного программного обеспечения и серверов диапазона).
Похоже, вы имеете право использовать бесплатное Community Edition of Foundation, которое вы можете использовать на 30 серверах - просто download это и проверить. Тогда дайте нам знать, что вы думаете, пожалуйста!
Отказ от ответственности: я запускаю группу разработки Tideway. Продукт очень классный IMO, хотя я сам не написал его непосредственно:)
Ответ 4
Отключите каждую машину один за другим и посмотрите, какие перерывы..; p
Серьезно, однако, нет простого ответа на этот вопрос. С помощью набора систем вы можете создать диаграмму, показывающую основные зависимости, но она не имела бы большого значения, если бы у вас не было представления о том, что такое зависимость. Обычно ваша цель состоит в том, чтобы определить, что вам нужно "пересмотреть" при смене другой системы, а не на какие машины вы можете отключить наугад. Но такая информация требует большого количества деталей и с трудом накапливается в первую очередь.
Все это в конечном итоге заканчивается в ситуации, когда вы находитесь в системе перед автоматизацией. Вы никогда не найдете инструмент автоматизации с термоусадочной пленкой, который поддерживает работу. С другой стороны, с такой большой деталью необходимо что-нибудь, что может позаботиться о половине или даже одной трети рабочей нагрузки.
Ответ 5
Это хороший вопрос. Кажется, мы каждый раз с этим сталкиваемся с этим.
То, что мы пытались сделать за последний год или около того, будет "безжалостным" по двум причинам:
-
автоматизация - если вы автоматизируете его и часто устанавливаете/развертываете, то процесс автоматизации, как правило, будет иметь смысл в большинстве случаев (настройки конфигурации и т.д.)
-
wiki, wiki, wiki - мы стараемся быть жесткими в обновлении текущей версии команды и проекта wiki.
Любопытно видеть другие ответы.
Ответ 6
Звучит как работа для обнаружения предприятия, которая автоматизирована, насколько это возможно. В зависимости от размера вашей организации и окружающей среды существуют разные решения. Для больших ландшафтов вам понадобится CMDB (база данных управления конфигурациями). Такие продукты, как HP Universal CMDB могут обнаруживать и отслеживать зависимости в крупномасштабных средах.
например. он может обнаруживать отношения между системой SAP и связанными с ней базами данных и узлами, на которых работают распределенные системы, и показывает зависимости. Более важно, чтобы вы могли предупредить вас в случае, если какие-то несанкционированные изменения будут внесены в реальную среду.
Таким образом, ответ зависит от того, что вы считаете "большим".
Ответ 7
Два вида проблем:
a.) для тех, кто хочет знать, как определять зависимости для каждого компонента
b.) для тех, кто хочет отслеживать взаимозависимости и их приоритеты в системе компонентов. (как в, какой компонент сначала устанавливается в тестовую среду и т.д.)
Если у вас есть серия компонентов, для каждой из которых вы знаете зависимости, и вам нужен порядок зависимостей для всего списка компонентов, вы можете найти модуль Perl под названием Algorithm:: Dependency:: Ordered to be некоторой ценности. Существуют и другие связанные модули, которые могут работать с базами данных записей компонентов и т.д. Или даже с простыми файловыми записями. Но предупреждение: у меня были проблемы с тем, чтобы это работало.
В качестве альтернативы инструмент графического отображения может иметь значение.
Ответ 8
Это функция группы "Управление конфигурацией". Чтобы начать работу, вам нужно поговорить с "экспертами" в вашей компании и создать карту/график приложений. Используйте graphviz/dot для создания диаграммы, это будет не очень красиво, но это даст вам визуальное представление зависимостей.
Вот пример:
digraph g {
rankdir=LR;
app1->app2->db1;
app1->app3;
}
Надеюсь, что это поможет,
Ответ 9
Отображение системных зависимостей - это одно.
Настоящие проблемы с окружающей средой, uid, пароли, настройки олицетворения, имена баз данных и другие данные, которые меняются от разработки до qa до uat, являются реальной проблемой.
Кто хранит/запоминает их все?
Разработчик не знает, на каком производственном сервере (ах) его приложение будет находиться.
Он только документирует имя своей базы данных разработки, uid's, pwd и описывает его таблицы базы данных, строки привязки и т.д.
Как только он проверяется в репозитории кода и переносится в среду QA, кто хранитель данных, необходимых для обновления этих файлов конфигурации с соответствующими значениями?
Снова при переносе в QA и UAT, кто?
Кто несет ответственность за информирование следующей группы миграции о том, что необходимо изменить?
В моей компании это то, что вызывает у нас большую головную боль. К моменту, когда он будет одобрен внутренним процессом управления изменениями и будет создан запрос миграции для переноса приложения в производственную среду, все, что требуется, - это один параметр конфигурации, который нужно забыть, чтобы разрушить всю реализацию, и это происходит все время, потому что четкие линии ответственности не нарисованы (в моем случае).
Помимо ответственности, я думаю, это центральный репозиторий для этой информации.
т. Система, в которой хранятся все параметры конфигурации для всех проектов/приложений, и на основе вашей "роли" вы можете/не можете видеть фактические значения.
Разработчик заканчивает свою сборку и создает запрос на миграцию в "системе".
Лицо QA получает уведомление, что сборка ### готова.
Пользователь QA входит в "систему" и получает инструкции по миграции.
Теперь они четко знают, что нужно сделать, и они вызывают проверку кода и процесс миграции.
Повторите для UAT и, в конечном итоге, выполните
Когда кто-то строит эту систему миграции, дайте мне знать, потому что это поможет многим людям.
Может быть, я сам его построю... Кто хочет заключить контракт?
Ответ 10
Я был знаком с работой, и было предложено в качестве первой задачи, которую я хочу определить, системных зависимостей. Оказывается, то, что имел в виду мой босс, заключалось в том, чтобы поговорить с людьми - таким образом я узнал бы, кто есть кто. Я думал, что мой босс хотел, чтобы я написал компьютерную программу для этого. И так я и сделал.
Мое предположение заключалось в том, что если программа была клиентом другой программы (службы или сервера), то netstat -pant
и netstat -panu
, тогда grep для ESTABLISHED даст вам это. Вы можете идентифицировать сервисы путем grepping вывода для LISTENING.
Это лишь частичное решение. Да, это говорит вам, какие приложения говорят с приложениями, но есть и другие зависимости. Так, например, некоторые приложения используют DNS для поиска своих серверов, а другие - жестко закодированные или в файлах конфигурации. Все, что использует TCP или UDP, зависит от IP. В большинстве мест IP зависит от ARP и Ethernet или WiFi. Все, что зависит от службы в другой локальной сети, зависит от хотя бы одного маршрутизатора.
Если у вас есть балансировщик нагрузки или какой-то кластер, проблема становится более интересной. Если я предоставляю услугу, которая выходит из балансировщика нагрузки, и "реальный" сервер за брандмауэром идет вниз, тогда служба деградирует, но все еще работает.
Это становится еще интереснее, потому что службы (программы) зависят от серверов (аппаратных). Серверы, в свою очередь, зависят от мощности и кондиционирования воздуха.
Итак, когда мое мышление вышло из-под контроля, все стало намного сложнее, и я подумал о создании языка, специфичного для домена (DSL), чтобы захватить все эти зависимости. Я думал, что, например, server_1, server_3 и server_5 находятся в фазе питания 1; server_2, server_4 и server_6 находятся на этапе питания 2. Сервер_1, Server_3 и server_5 все сбой примерно в одно и то же время: возможно, фаза 1 завершилась неудачей. Я все еще не совсем понял это. Очевидно, что ситуацию можно представить ориентированным графом, я просто не разработал детали.