twitterfacebookrss

Архитектура. Часть 1. Проект 1

Сегодняшний пост открывает серию, посвященную архитектуре ПО. Дело в том, что лично я встречаю мало примеров из реальной жизни по этому вопросу, а посмотреть и поучиться этой теме очень хочется.

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

Далее по тексту, я решил было поумничать:

«Когда я говорю «архитектура», то придерживаюсь «строительной метафоры» С. Макконнелла, т.е. разработка ПО сравнивается со строительством здания – вначале здание проектируется, затем закладывается фундамент, и после этого начинается полномасштабное строительство. В сто процентном виде эта метафора выглядит несколько утопично – уверен, многие сталкивались с переделкой фундамента ПО где-нибудь в момент сдачи всего небоскреба-программы, или даже далеко после сдачи. И эта переделка всегда занимает время (и часто влечет за собой «расползание» всей системы), а время это деньги. Поэтому фундамент должен быть спланирован тщательно — чтобы выглядел как укрепленный бетонный бункер и при этом ещё был мягким и гибким как пластилин, и при всём при этом надо помнить что «нет серебряной пули» для фундамента»

но пока всё это писал, понял, что по уровню не дотягиваю для таких поучений, да и не мой это стиль изложения – я предпочитаю разговорный. Так что просто опишу, как выглядит архитектура в нашем текущем проекте.

ТЗ на систему (в общих чертах):

Есть компьютер, на котором пользователь может выйти в инет, поиграть в игрушку, попечатать в Word-е. Вся работа пользователя учитывается, и за все действия (мегабайты в инете, минуты в игре и т.д.) взимается денюжка. Таких компов порядка 100 000, и разбросаны они по всей стране. Есть сервер, который каждый день принимает от этих компьютеров информацию об их работе за предыдущий день и также скидывает им различную инфу (к примеру, тарифы за работу в инете).

Так вот, мы рассмотрим архитектуру этого сервера.

Подробнее о задачах, которые ему нужно решить:

  • Регистрация новых рабочих мест (вновь подключаемых компов)
  • Центр управления всей сеткой компов
  • Прием и отправка файлов

Вкратце всё.

Изначальные программные и технологические требования\договоренности:

Программирование:

  • Asp.Net 2.0
  • .Net framework 3.5
  • C#
  • Visual Studio 2008

Сервер баз данных:

  • Sql Server 2008 R2

Веб-сервер:

  • IIS 7

Операционная система:

  • Microsoft Windows Server 2008 R2

Протоколы:

  • http

Форматы обмена данных:

  • XML

Ближе к концу вышли некоторые коллизии, но об этом позже.

Итак, начнем с файлов.

Форматом файла был выбран XML, так исторически сложилось, и я никак не оказывал на это влияния. Были разработаны форматы файлов, т.е. файл по тарифам за инет имел одну структуру, файл по работе с программами другую. У нас появляются несколько задач:

  • Прием файлов
  • Отправка файлов
  • Запись данных из файлов в БД, чтобы эту инфу можно было мониторить

Сходу у меня возникла идея использовать Веб-службы (Web-services) для решения задач приема\отсылки. Но в ходе прототипирования, при нагрузочном тестировании, выяснилось, что IIS 7, может одновременно обрабатывать не больше 3-х запросов к Веб-службе одновременно, тогда как если это Веб-сайт, то IIS создаёт одновременно кучу потоков. Из-за чего так происходит, выяснить не удалось, поэтому было принято такое решение о приеме файлов:

На сервере висит веб-сайт и по http-протоколу методом Get, кидается xml-файл, как-то так:

http://filereceiver.servername/Default.aspx?id=4512312301&filetype=10

, где id – номер компа, filetype – тип файла

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

Третью задачу я решил так: принятые файлы валяются в куче на винте, виндовая служба (Windows-service) с небольшим промежутком запускается и записывает всю инфу в БД.

Как краткий итог, взгляд с высоты птичьего полета будет таким:

Обзор системы с высоты птичьего полета

По схеме:
Смотрим наверх:
Рабочее место администратора -> Интернет -> Центр управления -> Windows.dll -> БД
Это связка для администрирования компов, назначения тарифов, проверки выхода на связь и т.д.

Связка ниже показывает схему для решения задач приемки\отдачи и регистрации. Из этой схемы следует, что наружу у нас висят сайты и службы, которые общаются с БД посредством набора Windows.dll (то, что я назвал «ядром» системы). Кстати, такого рода схемы я активно использую в работе, объясняя команде архитектуру (Visio рулит!).

В реализации веб-сайтов нет ничего интересного, это просто web-формы, в которых всё сделано одной процедурой, чтобы минимизировать задержки.

Архитектуру виндовс-службы я рассмотрю чуть позже, т.к. она затрагивает библиотеки ядра, могу дать ссылку для тех, кто совсем никогда не делал windows-services.

В следующем посте будет рассказ про ядро.

Часть 2
Часть 3

[WP-POST-SLIDER]
Опубликовать в Google Plus
Опубликовать в LiveJournal
Опубликовать в Мой Мир
Опубликовать в Одноклассники
Опубликовать в Яндекс
Автор статьи: Александр Шибанов

Александр Шибанов IT - предприниматель с более чем 10 летним стажем в индустрии. Принимал участие в различных по сложности проектах, на позициях программиста и руководителя проектов. С 2011 - года индивидуальный предприниматель.

Комментарии: