Несмотря на маркетинговые попытки размыть термин Web 2.0, принципы, присущие Web-приложениям второго поколения, вполне конкретны: подход «Сеть как платформа» и модель Software as a Service; работа приложений с информацией, предоставляемой и создаваемой пользователями, – уникальный пользовательский контент становится основным конкурентным преимуществом (воспроизвести функциональность приложения можно, данные – нет); постоянное развитие и использование облегченных процессов разработки; повторное применение компонентов и специализированных сервисов; доступность одной и той же функциональности с различных устройств; применение технологии по созданию функционально богатых Internet-приложений (Rich Internet Application, RIA). Все это заставляет пересмотреть подходы к использованию СУБД – oдного из самых консервативных элементов программной инфраструктуры.
Реляционные СУБД подарили индустрии неоспоримые преимущества, в том числе декларативные запросы, независимость данных от логики приложения. Однако нередко зависимость от фиксированной модели хранения приводит к невозможности оперативного внесения изменений в приложения, ограничивает маневр для масштабирования решений, приводя к неоправданному повышению их сложности. Сегодня СУБД перестают играть роль общего хранилища метаданных. Управление правилами преобразования данных в информацию становится компетенцией приложения, поэтому двойное хранение метаданных и проверка на соответствие типов, характерные для реляционных СУБД, не нужны и даже вредны. Кроме того, СУБД теряет роль разделяемого ресурса – доступ извне происходит только через интерфейсы или сервисы. При этом требуются технологии доступа к данным, которые удобны не для СУБД, а для приложений: использование HTTP в качестве транспорта, представление сообщений в виде XML или JSON (JavaScript Object Notation), работа по протоколам REST, SOAP, поддержка специализированных протоколов уровня приложений (например, AMF3 в случае Adobe Flex). В зоне ответственности СУБД остается инфраструктура управления, обеспечивающая целостность данных, производительность и масштабирование.
Природа данных эпохи Web 2.0 также претерпела изменения, делающие неэффективным применение реляционных СУБД. Практически нормой стал отказ от контроля модели данных средствами реляционных СУБД: данные либо достаточно просты (самой популярной СУБД в Сети является MySQL, в которой скорость работы и простота всегда превалировали над сложностью), либо предметная модель не укладывается в табличное представление и требуется логика приложения для ее дополнительной интерпретации.
Основными чертами моделей предметной области Web-приложений стали: работа с квазиструктурированными данными; широкое использование информационных объектов иерархической структуры, таких как документы, сообщения, объектная модель документа (Document Object Model, DOM); выбор графов как естественного представления при работе со связанными объектами, что требует средств навигации и вычислений.
Большой объем данных, свойственный Internet-проектам, также накладывает ограничения на модели структур в СУБД – требуются специализированные индексы и запросы.
Реляционные базы данных в их нынешнем виде оказались в мертвой зоне для Web-приложений нового поколения. В случае когда требуется поддерживать новые архитектуры приложений, новые модели данных и одновременно соблюдать требования по распределенности и производительности, имеет смысл выйти за рамки реляционной модели, сохранив все ее преимущества.
СУБД для приложений
Предлагаемые в СУБД InterSystems Cachе` технологии вполне можно считать подходящими для приложений Web 2.0. Хранение основано на представлении данных в виде многомерных ассоциативных массивов (деревьев), с помощью которых отображаются графовые структуры. Такие ассоциативные массивы являются переменными процессов приложений (с точки зрения архитектуры СУБД – это гибрид серверов приложений и данных). Операции сохранения как таковой нет – есть соглашение о наименованиях. Если первым символом идентификатора переменной стоит знак «^», то все изменения значений этой переменной попадают в базу данных на долговременное хранение. Такие переменные называются «глобалами» и состоят из узлов, адресация к которым происходит с помощью индексов, содержащих любое строковое значение.
При работе напрямую с глобалами запросы и операции по изменению данных определяются алгоритмически в виде программ, и, в отличие от декларативных операций SQL, здесь нет ограничений в способах работы с этими переменными.
Глобалы легко использовать совместно с приложениями – они дают возможность хранить данные с переменной структурой и не перегружать базу лишней работой по хранению метаданных и контролю их типизации. В результате приложения проще и быстрее изменяются. Представьте, что, к примеру, в PHP можно сохранить схожим с глобалами образом ассоциативные массивы, не прибегая к нескольким операциям, подготавливающим и исполняющим SQL-запрос INSERT, или непосредственно из программы на JavaScript целиком сохранить DOM-модель или JSON-представление объекта. Многомерное хранилище глобалов позволяет решать такую задачу.
Глобалы дают возможность хранить и обрабатывать квазиструктурированные данные, в том числе объекты с переменным количеством атрибутов. Особое внимание в реализации хранилища глобалов уделено производительной работе с разреженными данными.
Глобалы позволяют строить модели предметной области, которые могут быть использованы для представления данных иерархической природы, например структур форумов, категорий, таксономий и моделей социальных сетей. На СУБД Cachе` можно реализовать объектную модель хранения и реляционный доступ к одним и тем же данным.
СУБД Cachе` не единственная реализация СУБД для Web-приложений нового поколения, можно назвать еще такие продукты, как Apache CouchDB (см. например, статью Леонида Черняка «Вычисления с акцентом на данные», «Открытые системы», № 8, 2008)
и Neo4J – графовая база данных с функцией хранения семантических данных.
СУБД Cachе` позволяет разработчикам сосредоточиться на создании СУБД со своей характерной моделью данных – это платформа для заказной базы данных. Разработчику предоставляется инфраструктура управления, транзакции, готовые технологии по кластеризации и распараллеливанию нагрузки, механизмы блокировок. Однако создание собственной модели базы данных – это лишь половина дела, конфликт современных приложений и реляционных баз, кроме прочего, вызван трудностями взаимодействия между приложениями и СУБД. В Cachе` для устранения такого барьера используется проецирование – операции по работе с данными можно обернуть в методы классов и затем сгенерировать прокси-классы для них на том языке, с которым разработчик работаете вне СУБД. Проецирование поддерживается для C++, Java, .Net, Python, Perl, Microsoft COM. Работа с классами возможна и с использованием стандартных протоколов взаимодействия – в случае HTTP, например, могут использоваться SOAP, REST, JSON.
Платформа для инфраструктурных сервисов
Одна из важных примет Web 2.0 – появление общедоступных специализированных сервисов, которые позволяют приложениям и пользователям работать с определенными типами данных. В качестве примеров таких сервисов можно назвать Flickr, Google Maps и YouTube. Выгода от применения инфраструктурных сервисов очевидна: экономия происходит за счет повторного использования уже существующих элементов инфраструктуры; вместе с развитием всей инфраструктуры повышается и качество каждого из ее потребителей в целом; скорость реализации и развертывания новых проектов повышается.
К популярным направлениям развития инфраструктурных сервисов для Web 2.0 относятся проекты, реализующие принцип Database as a Service, например, сервисы Amazon SimpleDB и Amazon S3. В качестве достоинства специализированной базы данных SimpleDB разработчики указывают на большее соответствие их модели требованиям Web-приложений, нежели реляционных СУБД.
Помимо возможности реализации отличных от реляционных моделей данных и удобного доступа к СУБД со стороны приложений, Cachе` предлагает технологии для развертывания инфраструктуры сервисов. Используя технологию ECP (Enterprise Cachе` Protocol) и SLM (Subscript Level Mapping), можно создавать распределенные базы данных, решающие проблемы взрывного роста количества данных и распараллеливания вычислительной нагрузки.
Выполнить требования по масштабированию и балансировке нагрузки призвана одна из ключевых особенностей СУБД Cachе` – отсутствие различия между функционированием сервера этой СУБД как сервера приложений, несущего преимущественно вычислительную нагрузку, и сервера данных, выполняющего операции по сохранению и изменению данных и выполнению запросов к ним. Приложение может использовать столько серверов, сколько необходимо для поддержания требуемого уровня производительности. При этом такая конфигурация выполняется независимо от логики приложения или от схемы базы данных.
Enterprise 2.0
Приложения, использующие общие инфраструктурные сервисы, доступные по требованию в любое время и с любого места, – такую характеристику можно было бы дать и идеальному ИТ-ландшафту предприятия, выстроенному с применением практик SOA. Так же, как и в случае с Web-приложениями, в инфраструктуре предприятия должны быть не только общие сервисы, но и базовые технологии их реализации. И так же, как в случае сервисов, на базе интеграционной платформы InterSystems Ensemble могут быть реализованы масштабируемые, специализированные сервисы предприятия с элементами бизнес-аналитики реального времени на основе решения InterSystems DeepSee.
Олег Оленин (oleg.olenin@intersystems.com) – консультант компании InterSystems (Москва).