Обзор архитектуры современных программных систем
Цель лекции: Ознакомление с современными архитектурами программного обеспечения, решаемыми задачами, требованиями к современному программному обеспечению, тенденциями его развития, основными концепциями архитектуры ПО.
Презентацию к данной лекции Вы можете скачать здесь.
1.1 Введение.
Данный курс познакомит Вас с принципами современных облачных вычислений и наиболее перспективной платформой облачных вычислений Windows Azure и научит ее практически использовать. Будет дан детальный научный анализ концепции облачных вычислений в целом, оценены ее достоинства, недостатки, перспективы и проблемы развития.
1.2. Комментарии к списку литературы.
Список литературы по курсу приведен в конце данной лекции.
Вот некоторые комментарии к этому списку.
В книге [1] рассмотрен широкий круг практических вопросов, связанных с облачными вычислениями в целом: затраты на облачные вычисления, проблемы их безопасности, ограничения, поставщики облачных сервисов (Google, Microsoft, Amazon, Yahoo, IBM, EMC/VMware, Salesforce.com и др.), используемое оборудование и инфраструктура облачных вычислений, клиенты, платформы, приложения, сервисы, память, стандарты (HTTP, HTML, DHTML, XMPP, SSL, OpenIDWeb, REST, SOAP, JSON), концепции Platform as a Service (PaaS), Software as a Service (SaaS), Software plus Services (S+S), среды и инструменты разработки программ для облачных вычиcлений, понятия тонкого клиента и виртуализации.
Книга [2] посвящена в основном платформе Windows Azure. В книге проанализированы отличия локальных (on-premises) приложений от облачных и рассмотрены проблемы, возникающие при разработке облачного ПО, - безопасность, защита конфиденциальных данных, соблюдение общих правил и ограничений, резервное копирование и восстановление, каталогизация элементов облака и другие общие технические вопросы. Описаны принципы и примеры разработки облачных компонент, включая память (Storage), SQL Data Services и .NET Services. Рассмотрены также более специфические вопросы:
- Сформулированы преимущества использования платформы Azure Services Platform для облачных вычислений
- Показано на примерах, как использовать компоненты Windows Azure, включая Azure Table and Blob storage, .NET Services и SQL Azure
- Описаны проблемы разработки гибридных приложений, сочетающих облачные компоненты и обычные Web-сервисы
- Приведены конкретные работающие примеры облачных приложений, доступные для скачивания с сопроводительного Web-сайта книги.
Книга [3] и учебное пособие [4] автора курса предназначены для изучения современных операционных систем. В частности, в курсе и книге кратко рассмотрены основные принципы и возможности Windows Azure и бесплатных облачных сервисов Windows Live.
Курс автора [5] – обзорно-аналитический курс по архитектурам и моделям программ и знаний. Одна из лекций курса посвящена основам облачных вычислений и Windows Azure.
1.3. Некоторые виды современного программного обеспечения.
Прежде чем обратиться непосредственно к облачным вычислениям и к платформе Azure, рассмотрим важные основные концепции современной архитектуры ПО и проанализируем место облачных вычислений в этой общей схеме.
Рассмотрим некоторые наиболее характерные виды современного программного обеспечения:
- Клиент-серверные системы
- Web – сервисы и Web-приложения
- Интегрированные распределенные решения (solutions)
- Встроенные системы
- Системы реального времени
- Программное обеспечение мобильных устройств
- Программное обеспечение носимых (wearable) компьютеров
- Программное обеспечение промежуточного уровня (middleware)
- ПО для облачных вычислений и центров обработки данных
- ПО для компьютерных кластеров
- ПО для виртуализации
- ПО для управления информацией (information management)
- ПО для управления знаниями (knowledge management)
- ПО для научных вычислений (scientific computing)
В целом для современного ПО характерна тенденция к значительному усложнению архитектуры.
Клиент-серверные системы получили широкое распространение уже в течение десятков лет. Известны следующие основные разновидности серверов: сервер приложений, Web-сервер, сервер баз данных, сервер электронной почты, файл-сервер и другие [3].
Интернет (Web) – приложения предназначены для исполнения в Сети. В современных условиях большинство из них разрабатывается на платформе .NET или Java, хотя некоторые программисты и фирмы до сих пор пишут Интернет-приложения на C. В современном Web-программировании также широко используются языки с динамическими типами – JavaScript, Python, Ruby, для которых характерно динамическое изменение и конструирование типов во время выполнения программы, что удобно, так как отражает динамичную природу Web-приложений и Web-сайтов.
Интернет-приложения подразделяются на клиентские (например, браузеры) и серверные (например, Web-сервисы).
Интегрированные решения являются распределенными программными системами для управления информацией и функционированием предприятий, фирм, банков, университетов. Для интегрированных решений характерно наличие модулей аутентификации и авторизации пользователей, работы с базами данных, работы с сетью, реализации бизнес-логики. Интегрированные решения могут быть разработаны с использованием различных языков программирования.
Встроенные системы – это программное обеспечение специализированных микропроцессоров, управляющих работой самых различных устройств – от атомных реакторов до холодильников, кардиостимуляторов, линий электропередач и автомобилей. Характерным требованием к программному обеспечению встроенных систем является фиксированность предельно допустимого времени ответа (response time), от которого зависит работоспособность, надежность и безопасность системы и управляемого ею объекта в целом, а подчас и само существование объекта или живого организма. Типичное требование к основному циклу работы подобной системы – отсутствие прерываний, которые могут вызвать недопустимые временные задержки.
Программное обеспечение мобильных устройств – одна из наиболее современных и широко распространенных разновидностей ПО. Его особенности: ограничения на ресурсы (прежде всего – на объем памяти), необходимость учитывать различия в архитектуре конкретных моделей мобильных устройств (дисплеев и клавиш управления). ПО мобильных устройств, как правило, разрабатывается на платформе Java, либо с использованием продуктов Microsoft, например, .NET Compact Framework.
Как экзотический, но актуальный пример, приведем также ПО носимых компьютеров. Они встроены в спецодежду или обувь., используемые человеком, выполняют мониторинг состояния и поведения человека и дают экспертные рекомендации. Данный класс устройств также имеет весьма жесткие ограничения по памяти.
ПО промежуточного уровня (middleware) занимает промежуточное положение между клиентом и сервером. К наиболее типичным примерам middleware относится, например, ПО для поддержки протоколов отправки и приема мгновенных сообщений (instant messaging and presence).
ПО центров обработки данных (ЦОД) - еще один современный вид программного обеспечения. В нем особо важную роль играют СУБД, например, Microsoft SQL Server.
ПО для виртуализации – это современный вид ПО, предназначенный для инсталляции и использования виртуальных машин на реальное оборудование с целью расширения функций компьютерной аппаратуры, использования других ОС и ПО для других платформ. Пример – Microsoft Virtual PC.
ПО для облачных вычислений (cloud computing) – это сетевые операционные системы (например, Microsoft Windows Azure) и программное обеспечение, функцией которого является обеспечение работы пользователей через "облако", т.е. через сеть, хранения данных и приложений на "облачных" серверах.
ПО для управления знаниями играет в настоящее время все более важную роль, в связи с интеллектуализацией Web и все большей популярностью разработки интеллектуальных программных решений. Примеры: Protege, система управления знаниями, разработанная в Стэнфордском университете, обеспечивающая работу на языке определения онтологий OWL; система Knowledge.NET разработки Санкт-Петербургского университета, расширение C# средствами представления знаний и интегрированная среда для платформы .NET.
ПО для управления информацией (information management) – офисные приложения (например, Microsoft Office, OpenOffice) и системы управления базами данных, например, Oracle, MySQL, Microsoft SQL Server.
ПО для научных вычислений – разнообразные инструменты и пакеты программ для поддержки решения научных задач, Пример: MATHLAB.
1.4. Характерные черты современных программных систем
Рассмотрим теперь наиболее характерные черты современных программных систем, которые присущи большинству из них, независимо от их предметной области и платформы, на которой они используются.
Наиболее важная особенность современных программных систем – Web -awareness, т.е. ориентация на использование в Интернете. Наилучшими воплощениями этого принципа являются платформы .NET и Java.
Для современного ПО характерна универсализация представления моделей программ и данных, которая во многом вытекает из сетевой ориентации ПО. Unified Modeling Language (UML) уже 20 лет используется как де-факто стандарт для моделирования программ и процессов их разработки. Что касается представления данных, то здесь де-факто стандартом является XML, обеспечивающий единое текстовое структурированное представление данных.
Trustworthy computing (надежные и безопасные вычисления) – подход к разработке ПО, предложенный фирмой Microsoft. Его суть в том, чтобы на всех этапах проектирования и разработки программы учитывать требования к надежности и безопасности, реализовывать их в программном продукте и применять специальные виды тестирования для их верификации.
Важный принцип современного ПО – единая инфраструктура, в которую должны быть интегрированы инструменты, данные, знания и программы, используемые для решения прикладных задач.
Повторная используемость (reusability) кода весьма важна для успешной разработки программ, так как позволяет существенно экономить ресурсы при разработке.
Сервисно-ориентированная архитектура ПО отражает тенденцию к явному выделению понятия программного сервиса (преимущественно, Web-сервиса). О ней подробнее см. п. 1.8.
Виртуализация широко применяется в программном обеспечении для моделирования новых аппаратных архитектур, расширения возможностей доступа к данным, памяти и др.
Облачные вычисления (cloud computing) - в настоящее время один из наиболее популярных подходов к разработке и использованию ПО, реализующий метафору "облака" (cloud) – Интернет- или интранет-сети, через которую пользователям доступны ресурсы – приложения, данные, знания. Данный подход подробно рассмотрен в курсе.
Управление знаниями (knowledge management) играет важнейшую роль в современном ПО, так как для решения многих реальных задач недостаточно чисто алгоритмических методов; требуется интеграция методов инженерии программ и инженерии знаний. Эта важная идея реализована в нашей системе управления знаниями Knowledge.NET (http://www.knowledge-net.ru).