Системы управления базами данных являются сегодня фундаментом для построения корпоративных приложений, определяющим их архитектуру и дизайн, и выпуск новой версии СУБД может повлиять на подходы к созданию таких приложений.
Современные приложения должны обрабатывать потоки самых разнообразных данных, работать в асинхронном режиме и сохранять работоспособность в любых условиях. Одним из заметных событий на рынке СУБД стал выпуск продукта Microsoft SQL Server 2005, интегрированного с Visual Studio 2005. И этот тандем не случаен, а наглядно демонстрирует, в каком направлении будет развиваться этот продукт. Попробуем разобраться в том, какие особенности имеются в подходе, ориентированном на быструю разработку приложений, и насколько SQL Server 2005 соответствует современным требованиям в построении приложений, управляемых данными.
Microsoft-do
Путь компании Microsoft лежит на массовый рынок и быструю разработку приложений, что следует из того, что компания интегрировала в свой продукт среду исполнения .NET, разрабатывать приложения для которой можно в том числе и на очень высокоуровневом языке Visual Basic. Эта интеграция позволила совместить в рамках одного продукта функции хранения и управления данными (СУБД) и их обработки (сервер приложений). Кроме .NET в SQL Server 2005, есть и другие модули, характерные для серверов приложений: сервис оповещения, сервис интеграции, выполняющий роль монитора транзакций, система развертывания приложений. Виртуальная машина .NET очень тесно интегрирована с ядром СУБД, позволяя реализовать хранимые процедуры в дополнение к существовавшему до этого языку Transact-SQL. Таким образом, отделить функции сервера приложений от ядра базы данных практически невозможно, можно только их не использовать.
Кроме функций сервера приложений в SQL Server 2005 есть и функции Web-сервера. В частности, на уровне ядра есть возможность хранить данные в формате XML (этот тип данных является встроенным). Поддержка этого формата вместе с возможностью исполнения кода .NET позволяет на SQL Server 2005 строить Web-приложения без использования специального Web-сервера. Также поддерживаются и другие технологии работы с XML, такие как XML Query Language (XQuery), XML for Analysis Services (XML/A) и др. Язык XML является базой для построения представления данных — эти функции в корпоративных приложениях до недавнего времени выполнял Web-сервер или портал, а теперь они переходят в ведение СУБД, что и подчеркивают сами разработчики SQL Server 2005, пропагандируя SOAP как протокол связи с базами данных.
Таким образом, в одном продукте объединены три архитектурных компонента: Web-сервер, сервер приложений и система управления базами данных. При этом не понятно, почему в названии продукта по-прежнему остается аббревиатура SQL, когда ставка делается на другую технологию — связку SOAP, XML и .NET. Правда, ядро СУБД по-прежнему является реляционным, а все данные приводятся к единому табличному представлению. Тем не менее поддержка технологии Web-сервисов с иерархической идеологией хранения данных на уровне СУБД фактически выводит продукт SQL Server 2005 за рамки рынка платформ для построения реляционных баз данных — на рынок универсальных платформ корпоративных приложений.
Объединив все перечисленные функции в одном продукте, в Microsoft решили подстраховаться, реализовав поддержку кластерных решений и полных зеркал, которые обеспечивают продукту отказоустойчивость при сбоях оборудования. Если бы поддержки кластеров не было, то надежность продуктов, основанных на такой универсальной платформе, оказалась бы очень низкой — выход из строя одного элемента приводил бы к разрушению всей системы. Кластерное решение в этом случае позволяет увеличить надежность получившейся комплексной системы. Кроме того, чтобы уменьшить ущерб от потенциальных сбоев, было оптимизировано время восстановления отдельного узла кластера и реализованы механизмы автоматического перераспределения нагрузки между его узлами. Так, при восстановлении базы данных после сбоя, она становится доступной уже после применения записанных в журнал транзакций. Раньше же приходилось ждать отката незавершенных транзакций, на что уходило определенное, хотя и не очень большое время. К тому же механизм репликации баз данных между узлами кластера устроен так, что пользователи могут получить доступ к обеим копиям данных. Это позволяет перенести часть нагрузки на другой узел кластера.
«Язычество» Microsoft
Подход к проектированию баз данных можно продемонстрировать на примере одного из сервисов SQL Server 2005 (рис. 1), который называется Integration Services (SSIS). Всего же в составе SQL Server 2005 шесть компонентов — реляционное ядро и пять сервисов: репликации Replication Services, уведомлений Notification Services, интеграции Integration Services, аналитики Analysis Services и отчетов Reporting Services. Кроме этого в состав продукта входит набор средств управления и разработки, с которыми SQL Server тесно интегрирован. К собственно системе хранения данных относится само ядро, а все пять сервисов — компоненты сервера приложений, а некоторые и сервера Web-представления данных. В качестве примера рассмотрим сервис интеграции, как наиболее полно отвечающий современным потребностям в разработке гетерогенных систем обработки данных.
Рис. 1. Архитектура Microsoft SQL Server 2005 |
Основной задачей сервиса интеграции является взаимодействие с различными внешними приложениями, которые выступают в роли источников и потребителей информации. Так, источниками могут быть другие базы данных, CRM, ERP, другие прикладные системы, а также файлы в форматах XML, Excel и др. При этом на сервис интеграции возлагается обязанность по поддержанию актуальности и непротиворечивости всей известной СУБД информации, хранящейся в различных система — за это также отвечает сервис оповещений. К тому же данные доступны пользователям напрямую, например с помощью Web-сервисов или FTP. Сервис интеграции также частично занимается оптимизацией ресурсов хранения и улучшением качества данных, то есть удалением повторяющейся информации. Более полно функции по анализу хранимых данных выполняются аналитическим сервисом. При этом данные в систему могут загружаться не только из традиционных источников, таких как внешние СУБД или файловые системы, но и через Web-сервисы или RSS-потоки, с помощью которых можно контролировать вносимые в Web-систему изменения. При этом появление информации сложно синхронизовать по времени, но приходится обрабатывать данные и доносить их до потребителя максимально быстро, одновременно контролируя целостность информации.
В архитектуре SQL Server 2005 SSIS используются два базовых механизма работы с данными: поток задач (task-flow) и поток данных (data-flow). Ядром сервиса интеграции является конвейер преобразования данных, который основан на хранимых в оперативной памяти табличных буферах. Разработчики архитектуры стремились минимизировать количество сохраняемых на диске промежуточных результатов, поэтому все данные, прежде чем поместить их в память, преобразуют в таблицы. Далее с этим буфером начинает работать конвейер обработки данных. Причем один конвейер может обрабатывать сразу несколько буферов. SSIS может извлекать данные из OLE DB, управляемых источников при помощи ADO.NET и ODBC, а также обычных файлов, Excel и XML. С полученными данными сервис может выполнить следующие операции: сортировку, агрегирование, слияние и объединение, производить различные вычисления с данными, а также преобразовывать их в разнообразные форматы. В SQL Server 2005 реализована поддержка механизма работы с данными редко меняющейся размерности (Slowly Changing Dimensions), которые позволяют оптимизировать процессы обработки данных. Также сервис можно использовать для загрузки данных в многомерные кубы, которые обрабатываются сервисом Analysis Services — он активно используется для улучшения качества данных.
Сервис интеграции в первую очередь рассчитан на решение задач извлечения данных, их преобразования и загрузки в приложение (задачи ETL, Extract, Transform, Load). Однако его применение выходит за рамки этих задач. В частности, SSIS поддерживает работу с URL, загружая файлы в формате XML и преобразуя их в табличное представление. Над этими XML-данными могут выполняться все операции, доступные для конвейера преобразования данных, что позволяет строить на базе сервиса интеграции различные Web-сервисы и службы SOA. К тому же SSIS можно использовать для добычи данных из текстов путем установки наиболее простых взаимосвязей в них. Впрочем, для более детального изучения текстов предназначен сервис анализа, с которым интеграционный сервис тесно взаимодействует.
На основе SSIS можно строить различные приложения. Для этого предназначен специальный инструментарий SQL Server Business Intelligence Development Studio. Его же используют для проектирования сервисов анализа и подготовки отчетов. С помощью графического интерфейса BI Development Studio можно быстро из наборов компонентов собирать требуемое приложение. К тому же сам SSIS имеет собственный макроязык — вариант Visual Basic.NET, который позволяет дописывать нужные компоненты прямо в виде сборок .NET. Таким образом, SQL Server 2005 предоставляет все возможности для построения системы, управляемой данными и обрабатывающей асинхронные потоки данных.
Инь и ян SQL
Microsoft позиционирует свой продукт как индустриальную СУБД, способную обрабатывать огромное количество транзакций и оперирующих большими объемами данных: биллинговые системы, электронные торговые площадки или банковские системы. Все такие системы должны выдерживать большие нагрузки по количествам поступающих запросов и максимально оперативно отвечать на них. Правда, на вход им подаются, как правило, уже предварительно обработанные и хорошо структурированные данные. Для построения таких баз данных нужно, чтобы СУБД была способна за гарантированное время выполнять сложные запросы по огромному количеству записей строго определенного формата. Понятно, что СУБД, которая принимает SOAP-запрос, самостоятельно конвертирует его в программу на .NET, посылающую несколько запросов в ядро баз данных, а получив ответ, обрабатывает его и заворачивает в SOAP-упаковку. Не может быть эффективнее системы, которая напрямую обрабатывает SQL-запрос, лишь иногда вызывая откомпилированные хранимые процедуры.
Правда, в случае прямого исполнения SQL-запроса нужны два дополнительных компонента: Web-сервер для обработки данных в SOAP и сервер приложений для организации и контроля транзакций (рис. 2). Эти компоненты приводят данные к единому виду для их быстрой обработки в СУБД. Их нужно покупать отдельно и настраивать на совместную работу. Следует отметить, что классические промышленные приложения строятся по трехзвенной модели: на входе стоит сервер представлений (как правило, Web-сервер), который занимается получением запросов от пользователей и выдачей ответов из остальных частей системы, за ним располагается сервер приложений, выполняющий обработку запросов в соответствии с бизнес-правилами приложения, а уже за ним устанавливается система управления базами данных, которая отвечает за сохранение и выборку информации из базы. Последним элементом является система хранения, которая также может быть достаточно сложной и интеллектуальной. Каждый элемент в такой системе работает независимо и поэтому может быть продублирован необходимое число раз. В случае выхода одного элемента из строя его функции могут быть переданы другим из того же слоя. При этом все компоненты приложения могут работать либо на одном компьютере, либо разнесены на несколько физически независимых устройств или центров обработки данных.
Разработчики Microsoft пошли иным путем, и поэтому понятие «индустриальных СУБД» у них, видимо, несколько другое, поскольку корпорация предлагает свой продукт не пользователям, а разработчикам, у которых требования к СУБД несколько иные: быстрая разработка приложений, простота установки, упрощенная архитектура, дешевизна. Именно этим требованиям «индустриальности» и удовлетворяет SQL Server 2005. Насколько это хорошо, решать покупателям таких быстро разработанных «индустриальным разработчиком» приложений. Следует только иметь в виду, что при быстрой разработке корпоративных решений в нем могут возникнуть ограничения в самых неожиданных местах. Так .NET-сценарий, который сгенерирует средство быстрой разработки и который будет отлично работать на небольших нагрузках, может не справиться с потоком запросов в «боевой» конфигурации. Поэтому, прежде чем внедрять такие решения, стоит хорошо протестировать их на реальной нагрузке. Это особенно относится к системам со сложными схемами преобразования данных. В результате снижение цены на разработке и лицензиях может компенсироваться дорогостоящим тестированием и сопровождением.
Следует отметить, что система, совмещающая в себе множество функций, является менее защищенной и надежной, чем разделенная на части. В универсальной системе выход из строя одного компонента разрушает весь процесс обработки данных. Насколько компенсирует это свойство поддержка кластерных архитектур, пока не понятно. Аналогично, ошибка в одном компоненте делает уязвимой все остальные. Специалисты по безопасности иногда даже рекомендуют для повышения защищенности разделять систему на несколько компонентов и в каждом из них убрать все лишнее. Если в системе используется SQL Server 2005, то выключить в нем лишние функции можно, но всегда остается риск оставить что-то опасное для нападения, а у хакеров появляется возможность включить такие функции обратно. Поскольку удалить из SQL Server 2005 поддержку .NET и SOAP практически невозможно, то один удачно установленный хакерский Web-сервис делает уязвимой всю систему, причем в обход остальных уровней защиты.
Золотой телец баз данных
Несмотря на эти недостатки, SQL Server 2005, скорее всего, будет очень популярен, поскольку его рыночные характеристики достаточно привлекательны. Продукт представляет собой хороший конструктор для создания разнообразных приложений, работающий с различными по типу источниками данных. Наверняка в скором времени появится множество продуктов класса Business Intelligence, добычи данных, аналитических систем, в которых 90% функций уже реализованы в базовом продукте Microsoft. Причем такие решения, используя средства быстрой разработки Microsoft, можно будет быстро модифицировать, подстраиваясь под требования заказчика. При этом в них изначально будет достаточно много дополнительных функций, которые фактически поставляются вместе с базовой платформой. Таким образом, инструменты анализа данных благодаря позиции Microsoft на рынке станут неотъемлемой частью многих продуктов.
Фактически сегодня определяется новый стандарт на средства разработки корпоративных сетевых приложений, которые будут базироваться на комплексной платформе, объединяющей Web-сервер, сервер приложений и СУБД. Причем все компоненты этой связки сильно интегрированы между собой и средством разработки для них. Однако для специализированных решений с жесткими ограничениями по ресурсам и времени реакции, таких как биллинговые системы мобильных операторов или коллектор записей о телефонных звонках, которым приходится обрабатывать миллионы транзакций в секунду, SQL Server 2005, скорее всего, придется сильно оптимизировать, исключая из работы ненужные в этот момент промежуточные компоненты. Хотя те же продукты, но работающие на небольших нагрузках, вполне можно будет строить на основе SQL Server 2005. Поэтому вполне возможно, что разработчики тяжелых корпоративных приложений, построенных в традиционной архитектуре, выпустят упрощенные варианты своих продуктов, основанных на SQL Server 2005. Такие решения можно будет быстро настроить под требования конкретного заказчика, они будут стоит не очень дорого. В любом случае появление новой упрощенной архитектуры корпоративных приложений, которую предложила Microsoft, изменит соотношение сил на рынке как серверов баз данных, так и приложений для них.
Определенное сомнение вызывает вопрос безопасности приложений — единая платформа, скорее всего, будет пристально изучаться хакерами для поиска разнообразных дыр, и такая работа может получить большую отдачу — найдя дыру в SQL Server 2005, можно будет атаковать многочисленные приложения, построенные на этом продукте. Хотя Microsoft при разработке SQL Server 2005 и применяла методику разработки защищенного кода, которая является компонентом инициативы Trustworthy Computing, однако понятно, что абсолютно надежного кода большая команда разработчиков написать не может. К тому же в SQL Server 2005 интегрировано несколько достаточно высокоуровневых технологий исполнения команд, такие как .NET, SQL, Xquery и др. Эти технологии позволяют реализовывать различные инъекции этих команд, исполнение которых может происходить в самых разнообразных местах. Защита от подобных инъекций в основном лежит на плечах разработчиков приложений, которые, однако, не всегда придерживаются методики написания безопасного кода и защиты от инъекций. В результате, эклектика программирования, которая получилась у Microsoft в SQL Server 2005, скорее всего, приведет к появлению нового типа защитных систем, которые будут устанавливаться в такие комплексные системы и контролировать корректную работу ее отдельных компонентов и сервисов.