- •Сообщение об авторском праве
- •Предисловие С. Сомасегара
- •Предисловие Скотта Гатри
- •Предисловие Девида Хилла
- •Введение
- •Целевая аудитория
- •Как работать с данным руководством
- •Обратная связь и поддержка
- •Техническая поддержка
- •Сообщество и группа новостей
- •Авторская группа
- •Авторы и рецензенты
- •Поделитесь с нами своими успехами
- •Архитектура и дизайн программного обеспечения
- •Что такое архитектура программного обеспечения?
- •Почему архитектура так важна?
- •Цели архитектуры
- •Архитектура сегодня и завтра
- •Принципы проектирования архитектуры
- •Основные принципы проектирования архитектуры
- •Дополнительные источники
- •Основные принципы проектирования архитектуры ПО
- •Обзор
- •Основные принципы проектирования
- •Основные вопросы проектирования
- •Определение типа приложения
- •Выбор стратегии развертывания
- •Выбор соответствующих технологий
- •Выбор показателей качества
- •Решение о путях реализации сквозной функциональности
- •Архитектурные шаблоны и стили
- •Обзор
- •Что такое архитектурный стиль?
- •Обзор основных архитектурных стилей
- •Сочетание архитектурных стилей
- •Архитектура клиент/сервер
- •Компонентная архитектура
- •Проектирование на основе предметной области
- •Многослойная архитектура
- •Архитектура, основанная на шине сообщений
- •N-уровневая / 3-уровневая архитектура
- •Объектно-ориентированная архитектура
- •Сервисно-ориентированная архитектура
- •Дополнительные источники
- •Методика построения архитектуры и дизайна
- •Обзор
- •Исходные данные, выходные данные и этапы проектирования
- •Определение целей архитектуры
- •Время и объем работ
- •Ключевые сценарии
- •Важные с точки зрения архитектуры варианты использования
- •Общее представление приложения
- •Подходящие технологии
- •Графическое представление архитектуры
- •Основные проблемы
- •Параметры качества
- •Сквозная функциональность
- •Вопросы, требующие особого внимания при проектировании
- •Варианты решений
- •Базовая архитектура и возможные варианты архитектуры
- •Пилотные архитектуры
- •Что дальше?
- •Анализ архитектуры
- •Оценки на основании сценариев
- •Представление дизайна архитектуры
- •Дополнительные источники
- •Основы проектирования
- •Рекомендации по проектированию многослойных приложений
- •Обзор
- •Логическое разделение на слои
- •Слой представления, бизнес-слой и слой данных
- •Сервисы и слои
- •Слой сервисов
- •Этапы проектирования многослойной структуры
- •Шаг 1 – Выбор стратегии разделения на слои
- •Шаг 2 – Выбор необходимых слоев
- •Шаг 3 – Принятие решения о распределении слоев и компонентов
- •Шаг 4 – Выяснение возможности сворачивания слоев
- •Шаг 5 – Определение правил взаимодействия между слоями
- •Шаг 6 – Определение сквозной функциональности
- •Шаг 7 – Определение интерфейсов между слоями
- •Шаг 8 – Выбор стратегии развертывания
- •Шаг 9 – Выбор протоколов связи
- •Рекомендации по проектированию слоя представления
- •Обзор
- •Общие принципы проектирования
- •Специальные вопросы проектирования
- •Кэширование
- •Сетевое взаимодействие
- •Композиция
- •Управление исключениями
- •Навигация
- •Взаимодействие с пользователем
- •Пользовательский интерфейс
- •Валидация
- •Выбор технологии
- •Мобильные приложения
- •Насыщенные клиентские приложения
- •Насыщенные Интернет-приложения
- •Веб-приложения
- •Аспекты производительности
- •Этапы проектирования слоя представления
- •Шаблоны проектирования
- •Предложения patterns & practices
- •Дополнительные источники
- •Рекомендации по проектированию бизнес-слоя
- •Обзор
- •Общие принципы проектирования
- •Специальные вопросы проектирования
- •Аутентификация
- •Авторизация
- •Кэширование
- •Связывание и связность
- •Управление исключениями
- •Протоколирование, аудит и инструментирование
- •Валидация
- •Вопросы развертывания
- •Этапы проектирования бизнес-слоя
- •Шаблоны проектирования
- •Предложения группы patterns & practices
- •Дополнительные источники
- •Рекомендации по проектированию слоя доступа к данным
- •Обзор
- •Общие принципы проектирования
- •Специальные вопросы проектирования
- •Пакетная обработка
- •Большие бинарные объекты
- •Подключения
- •Формат данных
- •Управление исключениями
- •Объектно-реляционное сопоставление
- •Запросы
- •Хранимые процедуры
- •Сравнение хранимых процедур и динамического SQL
- •Транзакции
- •Валидация
- •Вопросы выбора технологий
- •Вопросы производительности
- •Вопросы безопасности
- •Вопросы развертывания
- •Этапы проектирования слоя доступа к данным
- •Шаблоны проектирования
- •Дополнительные источники
- •Рекомендации по проектированию слоя сервисов
- •Обзор
- •Общие принципы проектирования
- •Специальные вопросы проектирования
- •Аутентификация
- •Авторизация
- •Сетевое взаимодействие
- •Управление исключениями
- •Каналы обмена сообщениями
- •Структура сообщения
- •Конечная точка для передачи сообщения
- •Безопасность сообщений
- •Маршрутизация сообщений
- •Преобразование сообщений
- •Интерфейс сервиса
- •Валидация
- •REST и SOAP
- •Аспекты проектирования при использовании REST
- •Аспекты проектирования при использовании SOAP
- •Вопросы выбора технологий
- •Вопросы развертывания
- •Этапы проектирования слоя сервисов
- •Шаблоны проектирования
- •Дополнительные источники
- •Рекомендации по проектированию компонентов
- •Обзор
- •Общие рекомендации по проектированию компонентов
- •Распределение компонентов по слоям
- •Компоненты слоя представления
- •Компоненты слоя сервисов
- •Компоненты бизнес-слоя
- •Компоненты слоя доступа к данным
- •Компоненты сквозной функциональности
- •Шаблоны проектирования
- •Предложения группы patterns & practices
- •Дополнительные источники
- •Проектирование компонентов представления
- •Обзор
- •Шаг 1 – Понимание предъявляемых к UI требований
- •Шаг 2 – Выбор необходимого типа UI
- •Шаг 3 – Выбор технологии UI
- •Шаг 4 – Проектирование компонентов представления
- •Компоненты пользовательского интерфейса
- •Компоненты логики представления
- •Компоненты модели представления
- •Сущности представления
- •Шаг 5 – Определение требований к привязке данных
- •Шаг 6 – Выработка стратегии обработки ошибок
- •Шаг 7 – Определение стратегии валидации
- •Предложения patterns & practices
- •Дополнительные источники
- •Проектирование компонентов бизнес-слоя
- •Обзор
- •Шаг 1 – Выбор компонентов бизнес-слоя, которые будут использоваться в приложении
- •Шаг 3 – Выбор соответствующей поддержки транзакций
- •Шаг 4 – Выработка стратегии обработки бизнес-правил
- •Шаг 5 – Выбор шаблонов, соответствующих требованиям
- •Дополнительные источники
- •Обзор
- •Шаг 1 – Выбор способа представления сущностей
- •Шаг 2 – Выбор дизайна бизнес-сущностей
- •Шаг 3 – Определение механизмов сериализации
- •Проектирование на основе предметной области
- •Дополнительные источники
- •Проектирование компонентов рабочего процесса
- •Обзор
- •Шаг 1 – Выбор стиля рабочего процесса на основании сценариев
- •Шаг 2 – Выбор способа разработки
- •Шаг 3 – Определение стратегии обработки правил
- •Шаг 4 – Выбор решения для рабочего процесса
- •Шаг 5 – Проектирование компонентов бизнес-слоя для поддержки рабочего процесса
- •Windows Workflow Foundation
- •Сервер BizTalk
- •BizTalk с ESB
- •Совместное использование Windows Workflow Foundation и BizTalk
- •Дополнительные источники
- •Проектирование компонентов слоя доступа к данным
- •Обзор
- •Шаг 1 – Выбор технологии доступа к данным
- •Шаг 2 – Принятие решения о методе извлечения и хранения бизнес-объектов источника данных
- •Шаг 3 – Выбор способа подключения к источнику данных
- •Подключения
- •Пул подключений
- •Транзакции и параллелизм
- •Шаг 4 – Выработка стратегий обработки ошибок источника данных
- •Исключения
- •Логика повтора попыток
- •Истечение времени ожидания
- •Шаг 5 – Проектирование объектов агентов сервисов (необязательный)
- •Дополнительные источники
- •Показатели качества
- •Обзор
- •Общие показатели качества
- •Доступность
- •Концептуальная целостность
- •Возможность взаимодействия
- •Удобство и простота обслуживания
- •Управляемость
- •Производительность
- •Надежность
- •Возможность повторного использования
- •Масштабируемость
- •Безопасность
- •Обеспеченность технической поддержкой
- •Тестируемость
- •Взаимодействие с пользователем /удобство и простота использования
- •Дополнительные источники
- •Сквозная функциональность
- •Обзор
- •Общие принципы проектирования
- •Специальные вопросы проектирования
- •Аутентификация
- •Авторизация
- •Кэширование
- •Сетевое взаимодействие
- •Управление конфигурацией
- •Управление исключениями
- •Протоколирование и инструментирование
- •Управление состоянием
- •Валидация
- •Этапы проектирования стратегии кэширования
- •Шаг 1 – Выбор данных, подлежащих кэшированию
- •Шаг 2 – Выбор места кэширования данных
- •Шаг 3 – Определение формата кэширования данных
- •Шаг 4 – Выработка подходящей стратегии управления кэшем
- •Шаг 5 – Выбор метода загрузки кэшированных данных
- •Этапы проектирования стратегии управления исключениями
- •Шаг 1 – Выбор обрабатываемых исключений
- •Шаг 2 – Выбор стратегии выявления исключений
- •Шаг 3 – Выработка стратегии распространения исключений
- •Шаг 4 – Выработка стратегии использования собственных исключений
- •Шаг 5 – Выбор соответствующих данных для сбора
- •Шаг 6 – Выработка стратегии протоколирования исключений
- •Шаг 7 – Выбор стратегии уведомления об исключениях
- •Шаг 8 – Принятие решение об обработке необрабатываемых исключений
- •Этапы проектирования стратегии валидации ввода и данных
- •Шаг 1 – Определение границ доверия
- •Шаг 2 – Определение ключевых сценариев
- •Шаг 3 – Выбор места валидации
- •Шаг 4 – Выработка стратегий валидации
- •Шаблоны проектирования
- •Предложения группы patterns & practices
- •Дополнительные источники
- •Взаимодействие и обмен сообщениями
- •Обзор
- •Общие принципы проектирования
- •Рекомендации по реализации связи посредством обмена сообщениями
- •Сравнение асинхронного и синхронного взаимодействия
- •Связывание и связность
- •Форматы данных
- •Возможность взаимодействия с другими системами
- •Производительность
- •Управление состоянием
- •Контрактно-ориентированное проектирование
- •Вопросы безопасности
- •Безопасность на транспортном уровне
- •Безопасность на уровне сообщения
- •Технологии
- •Технология WCF
- •Технология ASMX
- •Дополнительные источники
- •Физические уровни и развертывание
- •Обзор
- •Распределенное и нераспределенное развертывание
- •Нераспределенное развертывание
- •Распределенное развертывание
- •Вопросы производительности и проектирования в распределенных средах
- •Рекомендации по размещению компонентов при распределенном развертывании
- •Шаблоны распределенного развертывания
- •Развертывание клиент-сервер
- •n-уровневое развертывание
- •2-уровневое развертывание
- •3-уровневое развертывание
- •4-уровневое развертывание
- •Развертывание веб-приложения
- •Развертывание насыщенного Интернет-приложения
- •Развертывание насыщенного клиентского приложения
- •Шаблоны развертывания для обеспечения наилучшей производительности
- •Кластер с балансировкой нагрузки
- •Привязка к конкретному серверу и сеансы пользователей
- •Фермы приложений
- •Шаблоны развертывания для обеспечения надежности
- •Отказоустойчивый кластер
- •Шаблоны обеспечения безопасности
- •Олицетворение/делегирование
- •Доверенная подсистема
- •Модель с применением множества доверенных удостоверений сервиса
- •Вертикальное и горизонтальное масштабирование
- •Вопросы вертикального масштабирования
- •Проектирование с поддержкой горизонтального масштабирования
- •Компромиссы и последствия их принятия
- •Компоненты без сохранения состояния
- •Секционирование данных и базы данных
- •Вопросы безопасности сетевой инфраструктуры
- •Вопросы управляемости
- •Шаблоны проектирования
- •Дополнительные источники
- •Архетипы приложений
- •Выбор типа приложения
- •Обзор
- •Обзор архетипов приложений
- •Типы приложений
- •Мобильное приложение
- •Насыщенное клиентское приложение
- •Насыщенное Интернет-приложение
- •Сервис
- •Веб-приложение
- •Обзор
- •Общие принципы проектирования
- •Специальные вопросы проектирования
- •Обработка запросов приложения
- •Аутентификация
- •Авторизация
- •Кэширование
- •Управление исключениями
- •Протоколирование и инструментирование
- •Навигация
- •Компоновка страницы
- •Формирование визуального отображения страницы
- •Управление сеансами
- •Валидация
- •Вопросы проектирования слоев
- •Слой представления
- •Бизнес-слой
- •Слой доступа к данным
- •Слой сервисов
- •Вопросы тестирования и тестируемости
- •Вопросы выбора технологий
- •Вопросы выбора стратегии развертывания
- •Нераспределенное развертывание
- •Распределенное развертывание
- •Балансировка нагрузки
- •Шаблоны проектирования
- •Дополнительные источники
- •Проектирование насыщенных клиентских приложений
- •Обзор
- •Общие принципы проектирования
- •Специальные вопросы проектирования
- •Бизнес-слой
- •Сетевое взаимодействие
- •Композиция
- •Управление конфигурацией
- •Доступ к данным
- •Управление исключениями
- •Удобство и простота обслуживания
- •Слой представления
- •Управление состоянием
- •Рабочий процесс
- •Вопросы безопасности
- •Вопросы обработки данных
- •Кэширование данных
- •Параллельная обработка данных
- •Привязка данных
- •Вопросы автономной работы/работы без постоянного подключения
- •Вопросы выбора технологий
- •Вопросы развертывания
- •Самодостаточное приложение
- •Развертывание по схеме клиент/сервер
- •N-уровневое развертывание
- •Технологии развертывания
- •Шаблоны проектирования
- •Дополнительные источники
- •Проектирование насыщенных Интернет-приложений
- •Обзор
- •Общие принципы проектирования
- •Специальные вопросы проектирования
- •Бизнес-слой
- •Кэширование
- •Сетевое взаимодействие
- •Композиция
- •Доступ к данным
- •Управление исключениями
- •Протоколирование
- •Мультимедиа и графика
- •Приложения для мобильных устройств
- •Портируемость
- •Представление
- •Управление состоянием
- •Валидация
- •Вопросы безопасности
- •Вопросы обработки данных
- •Вопросы выбора технологий
- •Вопросы развертывания
- •Установка подключаемого модуля RIA
- •Распределенное развертывание
- •Балансировка нагрузки
- •Веб-ферма
- •Шаблоны проектирования
- •Дополнительные источники
- •Проектирование мобильных приложений
- •Обзор
- •Общие принципы проектирования
- •Специальные вопросы проектирования
- •Аутентификация и авторизация
- •Кэширование
- •Сетевое взаимодействие
- •Управление конфигурацией
- •Доступ к данным
- •Особенности устройств
- •Управление исключениями
- •Протоколирование
- •Портирование приложений
- •Управление энергопотреблением
- •Синхронизация
- •Тестирование
- •Пользовательский интерфейс
- •Валидация
- •Вопросы выбора технологий
- •Microsoft Silverlight for Mobile
- •.NET Compact Framework
- •Windows Mobile
- •Windows Embedded
- •Вопросы развертывания
- •Шаблоны проектирования
- •Дополнительные источники
- •Проектирование сервисных приложений
- •Обзор
- •Общие принципы проектирования
- •Специальные вопросы проектирования
- •Аутентификация
- •Авторизация
- •Бизнес-слой
- •Сетевое взаимодействие
- •Слой доступа к данным
- •Управление исключениями
- •Структура сообщения
- •Конечная точка сообщения
- •Защита сообщений
- •Преобразование сообщений
- •Шаблоны обмена сообщениями
- •Передача репрезентативного состояния
- •Слой сервисов
- •SOAP
- •Валидация
- •Вопросы выбора технологий
- •Вопросы развертывания
- •Шаблоны проектирования
- •Дополнительные источники
- •Проектирование размещаемых сервисов и сервисов в облаке
- •Обзор
- •Обработка данных в облаке
- •Терминология размещаемых сервисов и сервисов в облаке
- •Преимущества приложений в облаке
- •Преимущества для ISV и поставщиков услуг размещения
- •Преимущества корпоративных потребителей сервисов
- •Вопросы проектирования
- •Изоляция и совместное использование данных
- •Безопасность данных
- •Шаблоны обеспечения безопасности данных
- •Хранение и расширяемость данных
- •Управление удостоверениями
- •Многотенантная архитектура
- •Локально или удаленно, создавать или покупать
- •Производительность
- •Композиция сервисов
- •Интеграция сервисов
- •Управление сервисами
- •Шаблоны проектирования
- •Дополнительные источники
- •Проектирование офисных бизнес-приложений
- •Обзор
- •Компоненты офисных бизнес-приложений
- •Основные сценарии использования офисных бизнес-приложений
- •Управление корпоративной информацией
- •Бизнес-аналитика
- •Унифицированный обмен сообщениями
- •Общие шаблоны OBA
- •Расширенный канал доступа
- •Шаблон Direct Integration
- •Шаблон Mediated Integration
- •Интеграция документов
- •Шаблон Application Generated Documents
- •Шаблон Intelligent Documents/Embedded LOB Information
- •Шаблон Intelligent Documents/Embedded LOB Template
- •Шаблон Intelligent Documents/LOB Information Recognizer
- •Рабочий процесс обработки документов
- •Составной UI
- •Консолидация данных (Поисковая навигация)
- •Шаблон Data Consolidation
- •Запуск LOB-процесса
- •Координация совместной деятельности
- •Уведомления и задачи
- •Общие вопросы проектирования
- •Вопросы безопасности
- •Вопросы развертывания
- •Шаблоны проектирования
- •Дополнительные источники
- •Обзор
- •Логические слои LOB-приложения SharePoint
- •Развертывание физического уровня
- •Основные сценарии и функции
- •Общие принципы проектирования
- •Специальные вопросы проектирования
- •Каталог бизнес-данных
- •Хранилище документов и содержимого
- •Сервисы Excel
- •Сервисы форм InfoPath
- •Объектная модель SharePoint
- •Веб-части
- •Рабочий процесс
- •Вопросы выбора технологий
- •Принципы развертывания
- •Шаблоны проектирования
- •Дополнительные источники
- •Приложения
- •Обзор
- •Поиск данных и ресурсов
- •Как Microsoft организует техническую информацию в глобальной сети Интернет
- •Microsoft Developer Network
- •Microsoft TechNet
- •Технология .NET Framework
- •Общеязыковая среда выполнения
- •Доступ к данным
- •Мобильные приложения
- •Насыщенное клиентское приложение
- •Насыщенное Интернет-приложение
- •Сервисы
- •Рабочий процесс
- •Веб-приложения
- •Веб-сервер – Internet Information Services
- •Сервер базы данных – SQL Server
- •Среда разработки Visual Studio
- •Другие инструменты и библиотеки
- •Решения patterns & practices
- •Дополнительные источники
- •Матрица технологий слоя представления
- •Обзор
- •Обзор технологий представления
- •Мобильные приложения
- •Насыщенные клиентские приложения
- •Насыщенные Интернет-приложения
- •Веб-приложения
- •Преимущества и недостатки
- •Мобильные приложения
- •Насыщенные клиентские приложения
- •Насыщенные Интернет-приложения
- •Веб-приложения
- •Общие сценарии и решения
- •Мобильные приложения
- •Насыщенные клиентские приложения
- •Насыщенные Интернет-приложения
- •Веб-приложения
- •Дополнительные источники
- •Матрица технологий слоя доступа к данным
- •Обзор
- •Обзор технологий доступа к данным
- •Преимущества и недостатки
- •Объектно-реляционный доступ к данным
- •Доступ к данным без подключения и в автономном режиме
- •Сценарии SOA/Сервис
- •N-уровневые и общие сценарии
- •Общие рекомендации
- •Общие сценарии и решения
- •Рекомендации по применению LINQ to SQL
- •Рекомендации по применению мобильных технологий
- •Дополнительные источники
- •Матрица интеграционных технологий
- •Обзор
- •Обзор интеграционных технологий
- •Преимущества и недостатки
- •Общие сценарии и решения
- •Дополнительные источники
- •Матрица технологий рабочего процесса
- •Обзор
- •Обзор технологий рабочего процесса
- •Пользовательский и системный рабочий процесс
- •Преимущества и недостатки
- •Общие сценарии и решения
- •Дополнительные источники
- •Enterprise Library от patterns & practices
- •Обзор
- •Назначение Enterprise Library
- •Составляющие Enterprise Library
- •Блоки приложений
- •Блок кэширования
- •Ключевые сценарии
- •Применение
- •Замечания
- •Блок шифрования
- •Ключевые сценарии
- •Применение
- •Замечания
- •Блок доступа к данным
- •Ключевые сценарии
- •Применение
- •Замечания
- •Блок обработки исключений
- •Ключевые сценарии
- •Применение
- •Блок протоколирования
- •Ключевые сценарии
- •Применение
- •Замечания
- •Блок внедрения политик
- •Ключевые сценарии
- •Применение
- •Замечания
- •Блок безопасности
- •Ключевые сценарии
- •Применение
- •Замечания
- •Блок Unity
- •Ключевые сценарии
- •Применение
- •Замечания
- •Блок валидации
- •Ключевые сценарии
- •Применение
- •Замечания
- •Дополнительные источники
- •Каталог шаблонов patterns & practices
- •Шаблоны передачи данных
- •Шаблоны корпоративных решений
- •Шаблоны интеграции
- •Шаблоны безопасности Веб-сервисов
- •Дополнительные источники
используемая база |
объектов базы данных). |
дополнительные усилия для |
данных с совместно |
Большая плотность пользователей на |
обеспечения более высокой |
|
|
|
используемыми |
каждом отдельно взятом сервере. |
изоляции. |
|
|
|
схемами |
|
Данные доступны всем |
|
|
|
|
|
пользователям. |
|
|
Архивация и восстановление |
|
|
представляют собой довольно |
|
|
сложную задачу, требующую |
|
|
специального решения. |
|
|
Сложности с отслеживанием |
|
|
действий пользователей. |
|
|
|
Приложения, оптимизированные для подхода с совместным использованием базы данных, могут быть более сложными и требовать больших капиталовложений и усилий на разработку. Однако, как правило, они поддерживают большее количество пользователей на каждый сервер и могут обеспечивать меньшие эксплуатационные расходы. Приложения, оптимизированные для подхода с общей схемой, проще и, как правило, обеспечивают меньшие затраты на эксплуатацию в долгосрочной перспективе, хотя эта экономия будет меньше, чем в случае применения подхода с совместно используемой базой данных.
Если требуется быстро создать приложение, используйте подход с разными базами данных, конфигурируя для каждого пользователя собственную базу данных. Для использования этого подхода не требуется никакого специального дизайна. Также применяйте его в случаях, когда отдельные пользователи предъявляют особенно высокие требования к безопасности данных, собираются хранить очень большие объемы данных или имеют очень большое число одновременно работающих конечных пользователей. Подход с разными базами данных также подойдет, если приложение должно без труда переходить от локального к размещаемому или от размещаемого к локальному и масштабироваться в случае необходимости.
Более высокая изоляция также пригодится, если предполагается предлагать услуги за дополнительную плату для отдельных пользователей. В этом случае необходимо использовать подход с отдельными базами данных или совместно используемой базой данных, но разными схемами. Однако если ожидается очень большое число пользователей, каждый из которых будет иметь относительно небольшое количество данных, используйте подход с меньшей изоляцией, такой как совместно используемая база данных с разными схемами или совместно используемая база данных с совместно используемыми схемами.
Безопасность данных
Безопасность размещаемых в облаке приложений должна быть весьма высока. Она реализуется с использованием множества уровней защиты, дополняющих друг друга для обеспечения защиты данных разными способами, в разных условиях, как против внутренних, так и внешних угроз. При планировании стратегии безопасности руководствуйтесь следующими рекомендациями:
Фильтрация. Используйте промежуточный слой между пользователем и источником данных, который будет выступать в роли «сита» и обеспечивать пользователю
впечатление, что в базе данных хранятся только его данные. Это особенно важно в случае применения общего экземпляра базы данных для всех пользователей.
Разрешения. Используйте списки управления доступом (ACL) для определения того, кто имеет право доступа к данным приложения, и что они могут делать с этими данными.
Шифрование. Скройте все конфиденциальные данные пользователей так, чтобы их было невозможно прочитать, даже если они станут доступны неавторизованной стороне.
Шаблоны обеспечения безопасности данных
Выбирайте шаблон обеспечения безопасности, исходя из используемой многотенантной модели:
Доверенные подключения к базам данных (применяется ко всем трем многотенантным моделям). Приложение всегда подключается к базе данных с использованием собственного удостоверения процесса приложения, которое не зависит от удостоверения тенанта, и сервер предоставляет приложению доступ к объектам базы данных, которые он может читать или обрабатывать. В рамках приложения должны быть реализованы дополнительные меры безопасности для предотвращения доступа к объектам базы данных отдельных конечных пользователей, которые не имеют право делать этого. Каждый тенант (организация), работающий с приложением, имеет множество наборов учетных данных, ассоциированных с учетной записью тенанта, и должен предоставлять доступ к приложению конечным пользователям, используя эти учетные данные. Эти конечные пользователи получают доступ к приложению посредством собственных учетных данных, ассоциированных с учетной записью тенанта, но приложение выполняет доступ к базе данных, используя единый набор учетных данных, ассоциированный с этим приложением. Это означает, что каждому приложению необходима всего одна учетная запись для доступа к базе данных (по одной для каждого тенанта). Как альтернативный вариант от STS можно получить шифрованные учетные данные входа для тенанта в целом и с помощью кода безопасности в приложении управлять тем, к каким данным имеет доступ каждый отдельный пользователь.
Безопасные таблицы базы данных (применяется к модели с отдельными базами данных и совместно используемой базе данных с разными схемами). Предоставьте учетной записи тенанта доступ к таблице или другому объекту базы данных. В модели с отдельными базами данных предоставьте доступ к той или иной базе данных только тенанту, ассоциированному с этой базой данных. В модели с совместно используемой базой данных и разными схемами доступ к каждой таблице предоставьте только тенанту, ассоциированному с этой таблицей.
Шифрование данных тенанта (применяется ко всем трем многотенантным моделям). Защитите данные с помощью симметричного шифрования, и секретный ключ тенанта – с помощью ассиметричного шифрования (с применением пары открытый/секретный ключ). Используйте олицетворения для доступа к базе данных с применением
безопасного контекста тенанта и секретный ключ тенанта для дешифрования данных в базе данных, чтобы с ними можно было работать. Недостаток этого метода в невозможности индексации шифрованных столбцов, что означает необходимость компромисса между безопасностью данных и производительностью. Старайтесь избегать использования полей индекса, содержащих конфиденциальные данные.
Фильтрация данных тенанта (применяется к модели с совместно используемой базой данных с совместно используемой схемой). Используйте представления SQL для выбора из таблиц подмножеств данных по ID тенанта или пользователя либо по идентификатору безопасности учетной записи тенанта. Предоставляйте тенантам доступ только к их представлениями, а не ко всей таблице. Это не допустит просмотр или доступ пользователей к любым строкам совместно используемых таблиц, принадлежащим другим тенантам или пользователям.
Хранение и расширяемость данных
Существует множество способов хранения размещаемых данных. Для реализации хранения данных в размещаемых приложениях разрабатывается два разных подхода: системы управления размещенными реляционными базами данных (hosted relational database management systems, RDBMS) и нереляционное хранилище в облаке. Реляционные базы данных обеспечивают хранение структурированных данных и больше подходят для транзакционных систем или приложений с интенсивным вводом/выводом. Также обычно такие базы данных обеспечивают меньшую задержку и расширенные возможности запросов. Под хранилищем в облаке, напротив, подразумевается хранилище для любых типов данных, которое размещается в облаке; сюда также относятся сервисы, обеспечивающие функциональность базы данных, сервисы для неструктурированных данных (например, хранилище файлов для цифровых мультимедиа), сервисы синхронизации данных и устройства хранения данных, подключаемые к сети (network-attached storage, NAS). Сервисы данных часто предоставляются по модели повременной оплаты или, в данном случае, оплате за гигабайт данных (включая и хранящиеся, и переданные данные).
Хранение в облаке предлагает ряд преимуществ, таких как возможность хранения и извлечения больших объемов данных из любой точки земного шара в любое время. Сервисы хранения данных быстры, недороги и практически неограниченно масштабируемы. Могут возникать проблемы с надежностью, но даже самые лучшие сервисы дают сбой время от времени. Также возможны неполадки с приложениями, чувствительными к большой задержке, поскольку каждое взаимодействие с сервисом хранения требует передачи данных по сети. Наконец, для сисем хранения в облаке может быть проблематичной поддержка транзакций. Как правило, эти системы ориентированы на секционирование и доступность и не всегда могут гарантировать согласованность.
Хранилище Microsoft Azure (на момент написания данного документа находящееся на этапе ранней предварительной версии1) включает ряд сервисов, обеспечивающих различные нужды хранилища и доступных через REST API:
1 С 1 февраля 2010 года в промышленной эксплуатации (прим. научного редактора).
Сервисы хранилища таблиц обеспечивают структурированное хранилище в форме таблиц, но эти таблицы не имеют определенной схемы, вместо этого они включают сущности, каждая из которых обладает рядом свойств. Такие популярные API, как LINQ, могут использоваться для работы с этими свойствами. Сервисы хранилища таблиц ориентированы на обеспечение высоко масштабируемых таблиц по очень малой цене. Однако это не реляционная база данных, поэтому в них нет многих возможностей, которые можно найти в RDBMS, таких как объединения и внешние ключи.
Сервисы хранилища больших бинарных объектов предлагают хранилище для бинарных данных, размещаемых в определяемых пользователями контейнерах, которые организуют наборы больших бинарных объектов в рамках учетной записи хранилища.
Сервисы очередей хранят сообщения, которые могут быть прочитаны с использованием семантики организации очереди любым клиентом, имеющим доступ к учетной записи хранилища.
Основную сложность при использовании RDBMS представляет расширяемость схемы. Это возможность расширять таблицу собственными полями без повторной компиляции или сборки приложения. Существует четыре подхода для расширения схем во время выполнения:
Фиксированные столбцы. Этот шаблон моделирует поля расширения как набор фиксированных именованных столбцов для каждой расширяемой сущности (каждой таблицы). Количество фиксированных столбцов будет зависеть от природы сущности и шаблона ее использования. Потребуется слой доступа к данным, обеспечивающий инкапсуляцию и абстракцию фиксированных именованных столбцов и таблиц метаданных. При использовании подхода с фиксированными столбцами должны быть учтены следующие факторы:
◦Фильтрация на основании расширяемых столбцов представляет проблему в связи с предопределенностью типов данных. Например, использование типов данных переменной длины, таких как varchar, для всех расширяемых столбцов ограничивает возможность фильтрации по числовым значениям с применением операторов <, > и =. Возможным решением является выделение фиксированного количества полей для каждого общего типа данных или предоставление пользователю возможности помечать столбцы как доступные для поиска и использовать отдельную таблицу для хранения полей определенного типа.
◦Тогда как это один из самых производительных и наиболее масштабируемых подходов к обеспечению расширяемости, как правило, он требует решения для индексированных столбцов не строкового типа.
◦Неправильная интерпретация базой данных значений null может привести к разреженному распределению данных и необоснованному чрезмерному расходованию пространства. Если один из тенантов расширяет только одно поле, тогда как остальные расширяют по 20 полей, база данных и страницы в памяти будут разрастаться. В Microsoft SQL Server 2008 предлагается
модификатор для столбцов SPARSE (Разреженный), который помогает несколько смягчить эту проблему.
Собственные схемы. Этот шаблон используется в сочетании с многотенантной моделью с разными схемами. Каждая схема принадлежит определенному тенанту и содержит определенный, отличный от остальных, набор расширяемых строго типизированных столбцов. Для подхода с собственными схемами следует учесть следующие факторы:
◦Этот подход требует инкапсуляции и абстракции слоя доступа к данным и наличия обработчика запросов, хотя O/RM-инфраструктуры, такие как Microsoft Entity Framework (EF) или инфраструктура с открытым исходным кодом NHibernate, могут упростить реализацию. Больше сведений по данным вопросам можно найти в материалах, приведенных в разделе Дополнительные источники в конце этой главы.
◦Каждый тенант имеет собственную таблицу, и схема таблицы меняется при каждом добавлении или удалении поля. Запросы работают с данными с плавающей точкой (не все столбцы строкового типа). Однако обновление схемы базы данных является непростой задачей из-за масштабного дублирования совместно используемых полей тенантов (в отличие от подхода с фиксированными столбцами, когда одна или более таблиц являются общими для всех тенантов).
◦Фильтрация по расширенным столбцам при таком подходе более производительна, чем при использовании шаблона с фиксированными столбцами, потому что в данном случае используются элементарные типы данных.
Таблица пар имя/значение. Этот шаблон позволяет потребителям расширять модель данных произвольным образом (неограниченным количеством столбцов), сохраняя собственные данные в отдельной таблице и используя метаданные для определения меток и типов данных для собственных полей каждого тенанта. При использовании подхода учитывайте следующие факторы:
◦Он вводит дополнительный уровень сложности для функций базы данных, таких как индексация, запросы и обновление записей. Например, для извлечения данных необходимо больше операций объединения, также сложность представляют фильтрация и группировка.
◦Работать приходится лишь с одной базой данных. Однако если рост числа пользователей приводит к увеличению базы данных, она может масштабироваться вертикально с секционированием тенантов для использования отдельных баз данных.
◦Этот подход будет менее производительным, чем остальные, поскольку извлечение данных требует множества операций объединения.