Обзор архитектуры современных программных систем
1.8. Понятие о Service-Oriented Architecture (SOA)
Сервисно-ориентированная архитектура (SOA) – один из наиболее современных подходов к программированию.
Сервис – это компонента программы, непосредственно доступная пользователю.
Пример сервиса: Получение прогноза погоды через Интернет.
Основной принцип SOA. С точки зрения пользователя, программный продукт представляет собой набор простых в использовании Web-сервисов с удобным графическим Web-интерфейсом.
Сервисно-ориентированная модель должна быть расширяемой: пользователь должен иметь возможность добавить новые сервисы или изменить набор доступных сервисов.
Пользователи также должны иметь возможность обращаться к сервисам через сеть с самых различных по своим возможностям устройств – desktop-машин, мобильных устройств и т.д.
Метод реализации Web-сервисов (.NET, Java и др.) для пользователя несущественен.
Разработчик должен иметь возможность публикации своих Web-сервисов.
Поддержка SOA осуществляется во многих современных программных инструментах, в том числе:
- Microsoft SharePoint - простой инструмент для создания расширяемых Web-страниц и Web-сервисов);
- UDDI (Universal Discovery, Description and Integration) – технология для публикации и поиска Web-сервисов (Microsoft).
С данной точки зрения, облачные вычисления соответствуют принципам SOA.
1.9. Понятие о Software-as-a-Service (SaaS)
Software as a Service (SaaS) – модель разработки программ, основанная на использовании лицензируемых программных сервисов "по требованию" клиентами, получающими (покупающими) лицензии у сервис-провайдеров.
Термин SaaS возник в 1999 г.
Основная идея SaaS - использование ПО по требованию (on demand) по невысокой стоимости, вместо покупки полной лицензии на ПО для всех платформ.
Характеристики SaaS:
- Доступ к коммерческому ПО через сеть;
- Удаленное управление ПО пользователями через центральный Web-сайт;
- Использование модели "one-to-many" (multi-tenant application), т.е. использование одного приложения многими клиентами;
- Централизация управления версиями и патчами (пользователи могут загружать новые версии через сеть);
- Постоянная интеграция программных сервисов в общий гибридный набор ПО, потребляемый пользователем, как mash-ups – гибридных Web-приложений.
С данной точки зрения, облачные вычисления соответствуют принципам SaaS.
1.10. Понятие об облачных вычислениях (cloud computing)
Англоязычному термину cloud computing соответствует русский термин "облачные" вычисления.
"Облако" (cloud) – широко используемая метафора для изображения сервисов, предоставляемых через Интернет или другую коммуникационную сеть (например, через ATM-сеть).
Облачные вычисления – модель вычислений, основанная на динамически масштабируемых (scalable) и виртуализованных (virtual) ресурсах - данных, приложениях, ОС и др., - которые доступны и используются как сервисы через Интернет и реализуются с помощью мощных центров обработки данных (data centers).
С точки зрения пользователей, существуют "облака" (общедоступные или частные) , предоставляемые различными компаниями для использования мощных вычислительных ресурсов, которых нет у индивидуального пользователя.
Перспективы облачных вычислений, как будет видно из данного курса, весьма многообещающие.
Недостаток облачных вычислений: пользователь полностью зависит от "облака" и не может управлять даже резервным копированием своих данных и программ.
Наиболее популярная "облачная" платформа – Microsoft Windows Azure (облачная ОС) и Microsoft Azure Services Platform (реализованная на основе Microsoft.NET). О ней и пойдет речь в данном курсе.
В настоящее время все крупные компании (Microsoft, IBM, HP, Dell, Oracle и др.) разрабатывают свои системы облачных вычислений; имеется тенденция к интеграции этих корпоративных систем в единое доступное пользователю "облако". Однако имеются и частные "облака", доступные только служащим определенной компании.
1.11. Резюме
Подход к разработке программного обеспечения в новом тысячелетии принципиально изменился.
Вместо индивидуальных изолированных разработок на собственном компьютере программное обеспечение разрабатывается в виде совокупности сетевых приложений и сервисов, а основная тенденция для пользоватетей - использование (consuming) готовых сервисов через Web.
Будущее – за сетевым и распределенным программным обеспечением, основанным на Web-сервисах, многоклиентских и многоярусных архитектурах -принципах SOA, SaaS, multi-tenancy, multi-tiered architecture.
Всем этим принципам соответствует модель облачных вычислений.
Microsoft – одна из ведущих компаний, поддерживающих и развивающих этот новый подход в своей облачной платформе Windows Azure, реализованной на базе платформы .NET – платформе надежного и безопасного многоязыкового программирования.
Ключевые термины
Вертикальный слой, срез (в некоторых технологиях - аспект) –совокупность рассредоточенных фрагментов кода, реализующих (сквозную) функциональность, например, проверку безопасности. Авторы концепции: проф. А.Л. Фуксман (Ростовский университет, 1979 – технология вертикального слоения; G. Kiczales (Xerox PARC, аспектно-ориентированное программирование и система AspectJ).
Клиент (client) – пользователь и (или) компьютер, использующий какие-либо программные сервисы.
Многоклиентская архитектура (multi-tenant architecture) – архитектура клиент-серверного ПО, при которой один экземпляр серверного ПО, исполняемый на сервере, обслуживает несколько клиентов (tenants – букв. клиенты, арендаторы). Пример: Web-сервис.
Многоярусная архитектура (multi-tier architecture) – архитектура ПО, при которой презентация результатов, обработка и управление данными реализованы как отдельные процессы. Пример: Использование middleware для взаимодействия с сервером и СУБД для взаимодействия с данными.
Облачные вычисления (cloud computing) – модель вычислений, основанная на динамически масштабируемых (scalable) и виртуализованных (virtual) ресурсах - данных, приложениях, ОС и др., - которые доступны и используются как сервисы через Интернет и реализуются с помощью мощных центров обработки данных (data centers).
Полнофункциональный клиент (rich client) – клиент Web-сервиса, имеющий полнофункциональный GUI и общающийся с Web-сервисом через слой промежуточного программного интерфейса (middleware), обеспечивающий его функциональность; примеры ПО для поддержки rich clients: Microsoft Silverlight, Oracle JavaFX и т.д.
Программное обеспечение как сервис (Software as a Service - SaaS) – модель разработки программ, основанная на использовании лицензируемых программных сервисов "по требованию" клиентами, получающими (покупающими) лицензии у сервис-провайдеров.
Промежуточное программное обеспечение (middleware) – совокупность слоев ПО, лежащих между клиентом и сервером и обеспечивающих их взаимодействие, например, поддержку сетевых коммуникационных протоколов
Сервер (server) – компьютер или центр обработки данных, предоставляющий программные сервисы.
Сервисно-ориентированная архитектура (SOA) – архитектура ПО, при которой программный продукт представляет собой набор простых в использовании Web-сервисов с удобным графическим Web-интерфейсом.
Слой (layer) – крупная независимая компонента архитектуры ПО. Различают горизонтальные слои (или уровни абстракции), вертикальные слои (срезы) и др.
Тонкий клиент (thin client) – клиент Web-сервиса с минимальным пользовательским интерфейсом, не имеющий состояния, сеанса, полнофункционального GUI и общающийся с Web-сервисом только через браузер и протокол HTTP посредством отправки HTTP-запросов и получения HTML-страниц.
Уровень абстракции (abstraction layer) или "горизонтальный слой" (номер N) – совокупность модулей, реализация которых использует только модули уровня N-1 (N > 0). Нулевой уровень абстракции образует аппаратура или базовые библиотеки (API). Концепция принадлежит Э. Дейкстре и сформулирована в конце 1960-х гг. в ходе разработки операционной системы THE (Технического университета Эйндховена).
Ярус (tier) – слой программного обеспечения, реализующий какую-либо независимую часть его архитектуры; например: business tier – реализация бизнес-логики; Web tier – реализация взаимодействия с Web. Если используется понятие tier, следовательно, архитектура ПО настолько сложна, что двумерная модель (горизонтальный слой / вертикальный слой) ее полностью не описывает. Tier может находиться и использоваться в любой компоненте архитектуры ПО.
Набор для практики
Вопросы
- Перечислите виды современного программного обеспечения (ПО).
- Перечислите требования к современному ПО
- Перечислите характерные черты современного ПО
- Какие Вы знаете современные платформы для разработки ПО?
- Назовите наиболее важные качества программных продуктов.
- Каковы три классических элемента любой технологии программирования.
- Что такое клиент-серверная архитектура и ее компоненты - клиент и сервер?
- Что такое тонкий клиент?
- Что такое полнофункциональный клиент?
- Что такое слой ПО?
- Что такое уровень абстракции ПО?
- Что такое вертикальный срез (слой) ПО?
- Что такое ПО промежуточного уровня (middleware)?
- Что такое ярус ПО (tier)?
- В чем основная идея многоярусной архитектуры ПО?
- Что такое многоклиентская (multi-tenant) архитектура ПО?
- Что такое сервисно-ориентированная архитектура?
- В чем суть концепции Software as a Service (SaaS)?
- Что такое облачные вычисления?
Упражнения
Для данной вводной лекции упражнения не предусмотрены.
Темы для курсовых работ, рефератов, эссе
- Краткий обзор видов современного ПО (реферат)
- Обзор требований к современному ПО (реферат)
- Обзор современных платформ для разработки ПО (реферат)
- Многоярусные архитектуры ПО (реферат)
- Многоклиентские архитектуры ПО (реферат)
- Обзор сервисно-ориентированных архитектур ПО (реферат)
- Обзор концепции Software as a Service (реферат)
- Облачные вычисления как пример многоярусной, многоклиентской и сервисно-ориентированной архитектуры (эссе).