Архитектура серверной части системы
От: Xenon_IPC  
Дата: 30.07.12 00:04
Оценка:
Здравствуйте уважаемые гуру проектирования и разработки программного обеспечения.
Требуется разработать одну систему с небольшой нагрузкой (до нескольких десятков клиентов). Клиент постараюсь сделать максимально возможно тонким и бизнес-логику по максимуму вынести на сервер. Хотел бы посоветоваться с архитектурой серверной части. Общую идею попробовал изобразить на следующей картинке (клик чтобы увеличить):

Интересуют следующие вопросы:
    1. Насколько из данного изображения понятна архитектура и основные внутренние процессы в системе
    2. Насколько академически корректны данные условные обозначения (по возможности конкретизировать какие элементы изображены неверно и какое условное обозначение является для них верным)
    3. Какие замечания собственно по самой архитектуре (что неверно, что можно улучшить)

Чтобы внести ясность того насколько Ваше понимание системы после ознакомления с изображением соответствует тому что я хотел передать, постараюсь описать это словами:
на неком сервере (в intranet сети либо internet сети это собственно не важно) существует сервис который принимает соединения от удаленных клиентов. Для каждого подключенного клиента создается свой экземпляр сервиса в котором он работает (в терминологии WCF InstanceContextMode = PerSession). Вызовы с клиента являются асинхронными (для этого на изображении я попытался это обозначить с помощью дуги на стрелке), т.е. клиент при вызове метода не блокируется. Ответ от сервера является также асинхронным, по сути это callback на клиент с результатом либо некоторым извещением (например об ошибке или прогрессе операции). Другими словами обычный дуплексный режим. Далее, в сервисе существует некий синглтон-пул для работы с БД. Каждый экземпляр сервиса заносит свой запрос в этот пул, пул его обрабатывает и результат отдает обратно сервису по callback'у. У некоторых возможно возникнет вопрос, для чего понадобился пул запросов и почему к БД не обращаться непосредственно из сервера. Это вызвано одним из требованием к системе: клиент может сделать одновременно несколько запросов к серверу, которые должны выполняться параллельно. Т.е. например клиент хочет получить список заказов и пока они грузятся открывает новое окошко с каталогом продукции. В этом случае на сервер сначала идет запрос получить список заказов, этот запрос ложится в пул и сервис готов для приема следующего запроса: каталога продукции, который тоже ложится в пул и т.д. В пуле созданы 4 потока (думаю этот параметр сделать настраиваемым), которые ожидают появления новых запросов. Расположение БД не должно играть роль (будет находиться на том же компьютере либо на удаленном).
Вот, в общих чертах на словах схема работы серверной части. Прошу высказывайте свои комментарии и конструктивную критику.

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