[.NET] событийная модель в распределенной системе
От: xk Россия  
Дата: 07.10.10 07:29
Оценка:
Здравствуйте.

Разрабатываеться распределенная система.
Есть сервер который постоянно получает входные данные и их обрабатывает, и есть GUI клиенты (WPF), которые должны получать
информацию от сервера (в основном клиенты занимаються мониторингом).

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

Возникла идея событийной модели: пользователь попадает на экран — клиент подписываеться на какое-то
серверное событие, при возникновении которого сервер посылает клиенту данные и тот их отображает. При переходе на другой экран
клиент отписываеться от текущего события и подписывается на другое. Максимальное количество таких событий 5-10 в секунду.

Вопрос в том как это реализовать наименее геморойно в стеке технологий .NET? Или возможно эта идея бредовая?

Буду благодарен любым мыслям, советам, ссылкам! Я впервые столкнулся с распределенными приложениям
... << RSDN@Home 1.2.0 alpha 4 rev. 1445>>
Re: [.NET] событийная модель в распределенной системе
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 07.10.10 07:54
Оценка:
Здравствуйте, xk, Вы писали:

xk>Задача состоит в том, что клиенты не должны получать всю информацию, которыми в данный момент распологает сервер, а должны

xk>получать только данные в зависимости от текущего пользовательского экрана + прав доступа пользователя.

xk>Возникла идея событийной модели: пользователь попадает на экран — клиент подписываеться на какое-то

xk>серверное событие, при возникновении которого сервер посылает клиенту данные и тот их отображает. При переходе на другой экран
xk>клиент отписываеться от текущего события и подписывается на другое. Максимальное количество таких событий 5-10 в секунду.

xk>Вопрос в том как это реализовать наименее геморойно в стеке технологий .NET? Или возможно эта идея бредовая?


Конечно бредовая. Клиент сам должен запрашивать все что ему надо, а сервер должен отдавать что доступно клиенту. Не надо никаких событий.

xk> Я впервые столкнулся с распределенными приложениям

Заметно.
Re[2]: [.NET] событийная модель в распределенной системе
От: genre Россия  
Дата: 07.10.10 09:25
Оценка: 3 (1) +1
Здравствуйте, gandjustas, Вы писали:

xk>>Задача состоит в том, что клиенты не должны получать всю информацию, которыми в данный момент распологает сервер, а должны

xk>>получать только данные в зависимости от текущего пользовательского экрана + прав доступа пользователя.

xk>>Возникла идея событийной модели: пользователь попадает на экран — клиент подписываеться на какое-то

xk>>серверное событие, при возникновении которого сервер посылает клиенту данные и тот их отображает. При переходе на другой экран
xk>>клиент отписываеться от текущего события и подписывается на другое. Максимальное количество таких событий 5-10 в секунду.

G>Конечно бредовая. Клиент сам должен запрашивать все что ему надо, а сервер должен отдавать что доступно клиенту. Не надо никаких событий.


Ну если например клиент должен получать данные асинхронно, то не такая уж и бредовая. Иначе как реализовать запросы вида "а сообщи мне когда температура на датчике 143634 измениться"?
... << RSDN@Home 1.2.0 alpha 4 rev. 1476>>
Re[3]: [.NET] событийная модель в распределенной системе
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 07.10.10 09:31
Оценка: +4
Здравствуйте, genre, Вы писали:

G>Здравствуйте, gandjustas, Вы писали:


xk>>>Задача состоит в том, что клиенты не должны получать всю информацию, которыми в данный момент распологает сервер, а должны

xk>>>получать только данные в зависимости от текущего пользовательского экрана + прав доступа пользователя.

xk>>>Возникла идея событийной модели: пользователь попадает на экран — клиент подписываеться на какое-то

xk>>>серверное событие, при возникновении которого сервер посылает клиенту данные и тот их отображает. При переходе на другой экран
xk>>>клиент отписываеться от текущего события и подписывается на другое. Максимальное количество таких событий 5-10 в секунду.

G>>Конечно бредовая. Клиент сам должен запрашивать все что ему надо, а сервер должен отдавать что доступно клиенту. Не надо никаких событий.


G>Ну если например клиент должен получать данные асинхронно, то не такая уж и бредовая.

Все равно бредовая

G>Иначе как реализовать запросы вида "а сообщи мне когда температура на датчике 143634 измениться"?

polling

Чтобы сервер что-то сообщал клиенту по своему усмотрению надо держать открытым соединение. Это дорого, это ломает любые схемы failover, это приводт к тому что сервер вынужден у себя хранить состояние клиента для многих сценариев работы. Кроме того у сервера мало возможностей отслеживать жив ли вообще клиент или нет, это плохо влияет на API.
Re: [.NET] событийная модель в распределенной системе
От: perekrestov Украина  
Дата: 07.10.10 09:34
Оценка:
Здравствуйте, xk, Вы писали:

Посмотрите на http://www.codeproject.com/KB/IP/PubSubUsingWCF.aspx
Или на http://www.nservicebus.com/
Re[4]: [.NET] событийная модель в распределенной системе
От: genre Россия  
Дата: 07.10.10 09:42
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>>Иначе как реализовать запросы вида "а сообщи мне когда температура на датчике 143634 измениться"?

G>polling

ну то есть ты предлагаешь постоянно опрашивать сервер о состоянии этого конкретного датчика?
... << RSDN@Home 1.2.0 alpha 4 rev. 1476>>
Re[5]: [.NET] событийная модель в распределенной системе
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 07.10.10 10:02
Оценка:
Здравствуйте, genre, Вы писали:

G>Здравствуйте, gandjustas, Вы писали:


G>>>Иначе как реализовать запросы вида "а сообщи мне когда температура на датчике 143634 измениться"?

G>>polling

G>ну то есть ты предлагаешь постоянно опрашивать сервер о состоянии этого конкретного датчика?

Я не думаю что это единственное о чем будет спрашивать клиент.
Re[6]: [.NET] событийная модель в распределенной системе
От: genre Россия  
Дата: 07.10.10 10:14
Оценка: 4 (2)
Здравствуйте, gandjustas, Вы писали:

G>>>>Иначе как реализовать запросы вида "а сообщи мне когда температура на датчике 143634 измениться"?

G>>>polling

G>>ну то есть ты предлагаешь постоянно опрашивать сервер о состоянии этого конкретного датчика?

G>Я не думаю что это единственное о чем будет спрашивать клиент.

Возможно и не единственное. Но схема когда клиент раз в длительный промежуток времени делает запросы к серверу, а все остальное время ждет асинхронных данных от него, причем с минимальной задержкой, вполне себе валидна.

И если например клиенту нужно знать состояние тысячи из десяти тысяч датчиков, причем с минимальной задержкой, а клиентов сотня, то они просто заддосят сервер.

А схема с подпиской будет отлично работать.
... << RSDN@Home 1.2.0 alpha 4 rev. 1476>>
Re[7]: [.NET] событийная модель в распределенной системе
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 07.10.10 10:27
Оценка:
Здравствуйте, genre, Вы писали:

G>Здравствуйте, gandjustas, Вы писали:


G>>>>>Иначе как реализовать запросы вида "а сообщи мне когда температура на датчике 143634 измениться"?

G>>>>polling

G>>>ну то есть ты предлагаешь постоянно опрашивать сервер о состоянии этого конкретного датчика?

G>>Я не думаю что это единственное о чем будет спрашивать клиент.

G>Возможно и не единственное. Но схема когда клиент раз в длительный промежуток времени делает запросы к серверу, а все остальное время ждет асинхронных данных от него, причем с минимальной задержкой, вполне себе валидна.

Ну и ладно. А спрашивать все равно эффективнее.

G>И если например клиенту нужно знать состояние тысячи из десяти тысяч датчиков, причем с минимальной задержкой, а клиентов сотня, то они просто заддосят сервер.

Хреновый сервер если его сотня клиентов с простыми запросами завалят.

G>А схема с подпиской будет отлично работать.

Ну напиши такой сервер, посмотрим.
Re[8]: [.NET] событийная модель в распределенной системе
От: genre Россия  
Дата: 07.10.10 10:44
Оценка: 1 (1) +1
Здравствуйте, gandjustas, Вы писали:

G>>И если например клиенту нужно знать состояние тысячи из десяти тысяч датчиков, причем с минимальной задержкой, а клиентов сотня, то они просто заддосят сервер.

G>Хреновый сервер если его сотня клиентов с простыми запросами завалят.

Быстр ты ярлыки вешать. Кто сказал, что запросы простые? Сервер на каждый запрос должен сделать выборку по доступным датчикам, проверить права доступа, итд.

G>>А схема с подпиской будет отлично работать.

G>Ну напиши такой сервер, посмотрим.

Ну сервера раздающие финансовую инфу, котировки например, именно так и работают.
... << RSDN@Home 1.2.0 alpha 4 rev. 1476>>
Re[9]: [.NET] событийная модель в распределенной системе
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 07.10.10 11:02
Оценка:
Здравствуйте, genre, Вы писали:

G>Здравствуйте, gandjustas, Вы писали:


G>>>И если например клиенту нужно знать состояние тысячи из десяти тысяч датчиков, причем с минимальной задержкой, а клиентов сотня, то они просто заддосят сервер.

G>>Хреновый сервер если его сотня клиентов с простыми запросами завалят.

G>Быстр ты ярлыки вешать. Кто сказал, что запросы простые? Сервер на каждый запрос должен сделать выборку по доступным датчикам, проверить права доступа, итд.

В большинстве случаев сервер скажет что ничего не изменилось.
Если что-то изменилось, то скажет когда изменилось последний раз и вышлет изменения из своего кеша.
Если данных в кеше нет, то вытащит их из хранилища.

Сервер по такому же принципу работает с БД. Получает изменения с даты последнего считывания и сохраняет в кеше.

G>>>А схема с подпиской будет отлично работать.

G>>Ну напиши такой сервер, посмотрим.

G>Ну сервера раздающие финансовую инфу, котировки например, именно так и работают.

Ну ты же не сервер, раздающий финансовую инфу пишешь.
Там важна скорость, передачи. Чем быстрее, тем лучше. А для отображения температуры этого не надо.
Re[8]: [.NET] событийная модель в распределенной системе
От: cadet354 Россия
Дата: 07.10.10 11:05
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>Здравствуйте, genre, Вы писали:


G>>Здравствуйте, gandjustas, Вы писали:


G>>>>>>Иначе как реализовать запросы вида "а сообщи мне когда температура на датчике 143634 измениться"?

G>>>>>polling

G>>>>ну то есть ты предлагаешь постоянно опрашивать сервер о состоянии этого конкретного датчика?

G>>>Я не думаю что это единственное о чем будет спрашивать клиент.

G>>Возможно и не единственное. Но схема когда клиент раз в длительный промежуток времени делает запросы к серверу, а все остальное время ждет асинхронных данных от него, причем с минимальной задержкой, вполне себе валидна.

G>Ну и ладно. А спрашивать все равно эффективнее.
зависит от критичности данных, а то счетчик может несколько раз изменить свое состояние, а клиент этого и не узнает.

G>>И если например клиенту нужно знать состояние тысячи из десяти тысяч датчиков, причем с минимальной задержкой, а клиентов сотня, то они просто заддосят сервер.

G>Хреновый сервер если его сотня клиентов с простыми запросами завалят.
для этих цифр нормальная схема.
... << RSDN@Home 1.2.0 alpha 4 rev. 1270>>
Re: [.NET] событийная модель в распределенной системе
От: cadet354 Россия
Дата: 07.10.10 11:05
Оценка:
Здравствуйте, xk, Вы писали:

xk>Здравствуйте.


xk>Разрабатываеться распределенная система.

xk>Есть сервер который постоянно получает входные данные и их обрабатывает, и есть GUI клиенты (WPF), которые должны получать
xk>информацию от сервера (в основном клиенты занимаються мониторингом).

xk>Задача состоит в том, что клиенты не должны получать всю информацию, которыми в данный момент распологает сервер, а должны

xk>получать только данные в зависимости от текущего пользовательского экрана + прав доступа пользователя.

xk>Возникла идея событийной модели: пользователь попадает на экран — клиент подписываеться на какое-то

xk>серверное событие, при возникновении которого сервер посылает клиенту данные и тот их отображает. При переходе на другой экран
xk>клиент отписываеться от текущего события и подписывается на другое. Максимальное количество таких событий 5-10 в секунду.

xk>Вопрос в том как это реализовать наименее геморойно в стеке технологий .NET? Или возможно эта идея бредовая?


можно еще глянуть в сторону event system например rabbitmq есть клиент для .net
... << RSDN@Home 1.2.0 alpha 4 rev. 1270>>
Re[10]: [.NET] событийная модель в распределенной системе
От: genre Россия  
Дата: 07.10.10 11:32
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>В большинстве случаев сервер скажет что ничего не изменилось.

G>Если что-то изменилось, то скажет когда изменилось последний раз и вышлет изменения из своего кеша.
G>Если данных в кеше нет, то вытащит их из хранилища.

Что ничего не изменилось по каждому датчику тоже надо проверять. А при большом количестве клиентов и датчиков это все может оказаться не быстро. А главное — зачем это делать, если можно не делать?

G>>Ну сервера раздающие финансовую инфу, котировки например, именно так и работают.

G>Ну ты же не сервер, раздающий финансовую инфу пишешь.
G>Там важна скорость, передачи. Чем быстрее, тем лучше. А для отображения температуры этого не надо.

Ну мы не знаем что конкретно пишет автор топика.
Мое дело маленькое, ситуацию, когда то что он предлагает не бред я тебе предложил.
... << RSDN@Home 1.2.0 alpha 4 rev. 1476>>
Re: [.NET] событийная модель в распределенной системе
От: mselez  
Дата: 07.10.10 12:52
Оценка:
Здравствуйте, xk, Вы писали:

distributed cache ?
Re[9]: [.NET] событийная модель в распределенной системе
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 07.10.10 13:44
Оценка: :)
Здравствуйте, cadet354, Вы писали:

C>Здравствуйте, gandjustas, Вы писали:


G>>Здравствуйте, genre, Вы писали:


G>>>Здравствуйте, gandjustas, Вы писали:


G>>>>>>>Иначе как реализовать запросы вида "а сообщи мне когда температура на датчике 143634 измениться"?

G>>>>>>polling

G>>>>>ну то есть ты предлагаешь постоянно опрашивать сервер о состоянии этого конкретного датчика?

G>>>>Я не думаю что это единственное о чем будет спрашивать клиент.

G>>>Возможно и не единственное. Но схема когда клиент раз в длительный промежуток времени делает запросы к серверу, а все остальное время ждет асинхронных данных от него, причем с минимальной задержкой, вполне себе валидна.

G>>Ну и ладно. А спрашивать все равно эффективнее.
C>зависит от критичности данных, а то счетчик может несколько раз изменить свое состояние, а клиент этого и не узнает.
Если датчик температуры за секунду 500 раз поменяет значение сколько изменений увидит пользователь?
Re[11]: [.NET] событийная модель в распределенной системе
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 07.10.10 13:46
Оценка:
Здравствуйте, genre, Вы писали:

G>Здравствуйте, gandjustas, Вы писали:


G>>В большинстве случаев сервер скажет что ничего не изменилось.

G>>Если что-то изменилось, то скажет когда изменилось последний раз и вышлет изменения из своего кеша.
G>>Если данных в кеше нет, то вытащит их из хранилища.

G>Что ничего не изменилось по каждому датчику тоже надо проверять. А при большом количестве клиентов и датчиков это все может оказаться не быстро. А главное — зачем это делать, если можно не делать?

Вот я тоже не понял, зачем проверять если можно не проверять.

G>>>Ну сервера раздающие финансовую инфу, котировки например, именно так и работают.

G>>Ну ты же не сервер, раздающий финансовую инфу пишешь.
G>>Там важна скорость, передачи. Чем быстрее, тем лучше. А для отображения температуры этого не надо.

G>Ну мы не знаем что конкретно пишет автор топика.

Если бы он писал сервер торговой системы, то он бы вряд ли тут вопросы задавал.
Re[12]: [.NET] событийная модель в распределенной системе
От: genre Россия  
Дата: 07.10.10 14:42
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>>Ну мы не знаем что конкретно пишет автор топика.

G>Если бы он писал сервер торговой системы, то он бы вряд ли тут вопросы задавал.

Ну наше дело не гадать, а указать все возможные варианты.

Ты с тем, что подписки не всегда бред уже согласен?
... << RSDN@Home 1.2.0 alpha 4 rev. 1476>>
Re[13]: [.NET] событийная модель в распределенной системе
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 07.10.10 16:41
Оценка: -1
Здравствуйте, genre, Вы писали:

G>Здравствуйте, gandjustas, Вы писали:


G>>>Ну мы не знаем что конкретно пишет автор топика.

G>>Если бы он писал сервер торговой системы, то он бы вряд ли тут вопросы задавал.

G>Ну наше дело не гадать, а указать все возможные варианты.


G>Ты с тем, что подписки не всегда бред уже согласен?


Не-а. Можно продолжить. Кроме архитектурных проблем с подписками, есть и те, которые появятся при реализации через события.
Например отслеживание время жизни объекта, к которому подписываются и тому подобное.

Поэтому подписками не стоит заниматься, только в том случае когда надо будет с минимальной латентностью передавать данные от сервера.
Re[10]: [.NET] событийная модель в распределенной системе
От: cadet354 Россия
Дата: 07.10.10 20:28
Оценка:
Здравствуйте, gandjustas, Вы писали:

C>>зависит от критичности данных, а то счетчик может несколько раз изменить свое состояние, а клиент этого и не узнает.

G>Если датчик температуры за секунду 500 раз поменяет значение сколько изменений увидит пользователь?
мы тут не сферического коня рассматриваем, ТС пишет:

Максимальное количество таких событий 5-10 в секунду.

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