Health Status Provider
От: Аноним  
Дата: 04.02.08 11:44
Оценка:
Есть некая система (библиотека). Одна из ее составных частей — уровень провайдеров данных.
Для провайдера введено такое понятие как "health status". В общем случае, health status это некая информация, характеризующая текущее состояние провайдера (StatusCode и StatusText).

Провайдер может быть в одном из трех состояний:
1. Зеленое — Все нормально. Соединение с источником данных есть (или что-то типа этого).
2. Желтое — Внимание. Была ошибка при доступе к источнику, но теперь соединение восстановлено (или что-то типа этого).
3. Красный — ошибка при доступе к источнику данных (или что-то типа этого).

Из состояния 2 ожидается переход либо в состояние 1, либо 3.

Провайдер должен поддерживать информацию о своем health status наряду с обработкой/выкидыванием эксепшенов.

Мне не совсем очевидно как увязать между собой эти две вещи. Может кто-нить подскажет пример где позожая конценпция уже реализована. Или что-нить типа guidelines по имплементации чего-нить типа health status'а.
Re: Health Status Provider
От: malkolinge Украина  
Дата: 04.02.08 14:54
Оценка:
Банда 4х паттерн STATE
Re[2]: Health Status Provider
От: Аноним  
Дата: 05.02.08 08:57
Оценка:
Здравствуйте, malkolinge, Вы писали:

M>Банда 4х паттерн STATE


Сомневаюсь что конечный автомат здесь может чем-то помочь )
Переход мнжду состояниями здесь отнюдь не самое важное и сложное.
Вопрос в том как грамотно это увязать с exception handling чтобы работало и то, и другое
Re[3]: Health Status Provider
От: rsn81 Россия http://rsn81.wordpress.com
Дата: 05.02.08 10:27
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>Сомневаюсь что конечный автомат здесь может чем-то помочь )

А>Переход мнжду состояниями здесь отнюдь не самое важное и сложное.
А>Вопрос в том как грамотно это увязать с exception handling чтобы работало и то, и другое
В чем собственно сложность? Посмотрим, что случилось бы, если б вы последовали совету выше. Открываем GoF на странице 291 и читаем про паттерн State:

Используйте паттерн состояние в следующих случаях:

...

Кроме того, GoF приводят пример чуть не один в один с вашим: на диаграмме классов TCPConnection, абстрактное состояние TCPState и его наследники, ровно 3, как и у вас: TCPEstablished, TCPListen, TCPClosed.

PS Можно почитать про шаблон проектирования State в статьях этого ресурса.
Re[4]: Health Status Provider
От: Аноним  
Дата: 05.02.08 12:27
Оценка: :)
Здравствуйте, rsn81, Вы писали:

R>В чем собственно сложность? Посмотрим, что случилось бы, если б вы последовали совету выше. Открываем GoF на странице 291 и читаем про паттерн State:

Используйте паттерн состояние в следующих случаях:

  • когда поведение объекта зависит от его состояния и должно изменяться во время выполнения;
...


У меня поведение объекта не зависит и не должно меняться в зависимости от его состояния.
Просто на ряду с тем, что объект должен хэндлить возможные эксепшены, он также должен иметь возможность "рассказать" о своем состоянии (по запросу).
Естесственно, та информация, которую он должен выдать в ответ на запрос о своем состоянии будет изменяться в зависимотси от того, к примеру, было ли посленее чтение из источника данных успешным.

Думаю что применение паттерна только усложнит ситуацию в данном случае.
Re: Health Status Provider
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 10.02.08 14:08
Оценка: +1
Здравствуйте, Аноним, Вы писали:

А>Есть некая система (библиотека). Одна из ее составных частей — уровень провайдеров данных.

А>Для провайдера введено такое понятие как "health status". В общем случае, health status это некая информация, характеризующая текущее состояние провайдера (StatusCode и StatusText).

А>Провайдер может быть в одном из трех состояний:


Это не состояние провайдера, а сигнал, который он выдаёт.

А>1. Зеленое — Все нормально. Соединение с источником данных есть (или что-то типа этого).

А>2. Желтое — Внимание. Была ошибка при доступе к источнику, но теперь соединение восстановлено (или что-то типа этого).
А>3. Красный — ошибка при доступе к источнику данных (или что-то типа этого).

А>Из состояния 2 ожидается переход либо в состояние 1, либо 3.


А что, можно куда-нибудь ещё?

Короче, профессор не прав, всё не так было.

Есть множество контролируемых параметров системы. Для каждого параметра, кроме состояния Unknown определены диапазоны значений, к которым привязаны оценки: OK, Warning, Failed. Соответсвенно, health monitor (HM) может по результатам анализа выставить один из трёх сигналов:

Зелёный — все параметры OK;
Жёлтый — как минимум один параметр оценен как Warning;
Красный — как минимум один параметр оценен как Failed.

Индукции могут быть и другими, например "Красный" сигнал может выдаваться, если все параметры некоторой группы стали Failed.

Что это за параметры, как они вычисляются и т.п. — решается по месту, для данной системы. Допустим, ты контролируешь состояние какого-то потока по критериям: а) существования и б) загрузки CPU. Соответственно, нужно периодически проверять валидность соответствующего ThreadID: есть такой поток — OK, нет — Failed (Warning тут, очевидно, не возможен). И ещё, нужно смотреть на CPU Loading, это можно вычислять в самом потоке — обращением к ОС. Здесь уже возможны вариации, например: 0-70% — OK, 71%-85% — Warning, >85% — Failed.

Дальше HM анализирует все параметры и вычисляет значение итогового сигнала, плюс выдаёт список самих параметров и их оценок.

А>Провайдер должен поддерживать информацию о своем health status...


Периодически сканирует своё состояние, оценка выводится по общим принципам.

А>наряду с обработкой/выкидыванием эксепшенов.


Интересно, а запас эксепшенов у HM большой? Не кончатся по ходу дела?

Сомнительная затея — передавать HM ексепшены. Ты с логом HM не путаешь, нет? Приложение может выдать монитору сигнал о том, что какая-то подсистема, например ушла в down; HM выдаст соответвующий сигнал пользователю, если он сам располагает описанием соответствующего сигнала и "знает", как его обработать.

А>Мне не совсем очевидно как увязать между собой эти две вещи. Может кто-нить подскажет пример где позожая конценпция уже реализована. Или что-нить типа guidelines по имплементации чего-нить типа health status'а.


Поищи по ключевым словам "system health monitoring". То, что я тут написал, только верхушка айсберга, вариантов много, вплоть до размещения монитора на отдельной машине. Кратко требования: собственная надёжность и минимум влияния на окружающую систему (т.е. min памяти, min CPU).
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[2]: Health Status Provider
От: Аноним  
Дата: 11.02.08 10:07
Оценка:
Здравствуйте, Геннадий Васильев, Вы писали:

А>>Из состояния 2 ожидается переход либо в состояние 1, либо 3.


ГВ>А что, можно куда-нибудь ещё?


Ну может остаться в состоянии 2 )

ГВ> Короче, профессор не прав, всё не так было.


ГВ>Есть множество контролируемых параметров системы. Для каждого параметра, кроме состояния Unknown определены диапазоны значений, к которым привязаны оценки: OK, Warning, Failed. Соответсвенно, health monitor (HM) может по результатам анализа выставить один из трёх сигналов:


ГВ>Зелёный — все параметры OK;

ГВ>Жёлтый — как минимум один параметр оценен как Warning;
ГВ>Красный — как минимум один параметр оценен как Failed.

Все так и есть

[]

А>>Провайдер должен поддерживать информацию о своем health status...


ГВ>Периодически сканирует своё состояние, оценка выводится по общим принципам.


по идее, можно и без периодического сканирования. т.к. информацию о health status провайдер должен выдавать по специальному запросу, то и собрать ее можно в момент запроса.

А>>наряду с обработкой/выкидыванием эксепшенов.


ГВ>Интересно, а запас эксепшенов у HM большой? Не кончатся по ходу дела?


ГВ>Сомнительная затея — передавать HM ексепшены. Ты с логом HM не путаешь, нет? Приложение может выдать монитору сигнал о том, что какая-то подсистема, например ушла в down; HM выдаст соответвующий сигнал пользователю, если он сам располагает описанием соответствующего сигнала и "знает", как его обработать.


Может я не так выразился. Я имел ввиду, что например, при доступе к файлу на диске возможно будет выброшен эксепшн. Который система, естессно, должна хэнжлить. + Параллельно этому данная ситуация (с выброшенным эксепшеном) должна отразиться на текущем health status'е. вот я и ищу какой-нить красивый способ это увязать.

А>>Мне не совсем очевидно как увязать между собой эти две вещи. Может кто-нить подскажет пример где позожая конценпция уже реализована. Или что-нить типа guidelines по имплементации чего-нить типа health status'а.


ГВ>Поищи по ключевым словам "system health monitoring". То, что я тут написал, только верхушка айсберга, вариантов много, вплоть до размещения монитора на отдельной машине. Кратко требования: собственная надёжность и минимум влияния на окружающую систему (т.е. min памяти, min CPU).


Ок. Спасибо!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.