![]() | |||
Аналитика
Progress для разработчиков ИС
Владимир Смирнов
Большие информационные системы... Еще в конце 80-х этот термин тесно увязывался с такими понятиями как АСУ, ВЦ, интегрированная база данных, языки программирования высокого уровня. Минуло немногим более пяти лет, и на смену им пришли открытые системы, распределенные базы данных, сетевые технологии, параллельные архитектуры, определяющие по сути новые подходы к построению больших ИС и новые технологии их проектирования. Реализацию этих подходов обеспечило развитие систем управления большими распределенными базами данных, которые наряду с оригинальными архитектурными решениями включают в себя и новые инструментальные средства создания и развертывания ИС. Одно из возможных направлений разработки информационных систем, отвечающее самым современным требованиям, могут обеспечить решения фирмы Progress Software. Российские разработчики знают о них хуже, нежели, скажем, о продуктах Oracle Informix, однако это вовсе не знают, что здесь нет заслуживающих внимания компонентов и интересных принципов реализации.
Начнем с того, что укажем основные характерные особенности построения современных больших ИС. Все они создаются как Open Systems, обеспечивающие полную преемственность по отношению к ранее выполненным разработкам, обладают простым и удобным пользовательским интерфейсом, легко перестраиваются под различные требования дальнейшего развития. Сегодня ИС в равной степени должны обладать значительной гибкостью внутренней структуры для адаптации к любым изменениям внешней среды, высокой производительностью и переносимостью на различные платформы, быть независимыми от структуры используемых баз данных и поддерживать множество стандартов взаимодействия в распределенных сетевых средах. При этом их разработка и внедрение должны занимать минимум времени, с тем чтобы новая версия системы могла эффективно функционировать еще до начала ее морального старения.
Чтобы ИС соответствовала указанным требованиям, Progress Software предлагает достаточно обширный набор продуктов среды разработки прикладных систем и реляционную СУБД Progress. Большая часть этих программных продуктов создана на языке Progress 4GL, который заслуживает более детального рассмотрения.
Язык – ключевой компонент Progress
Практически все инструментальные средства, образующие среду разработки приложений, созданы с помощью оригинального языка четвертого поколения Progress 4GL. Он представляет собой объектно-ориентированный язык высокого уровня, реализующий ключевые направления концепции современного программирования – структурное программирование, объектную ориентацию и управляемость по событиям.
В настоящее время прикладная ИС, как правило, имеет сложную распределенную архитектуру, в которой конечному пользователю должен быть обеспечен доступ к информации, хранимой как на центральной хост-ЭВМ, так и на удаленных серверах. При этом все создаваемые в системе прикладные процессы должны поддерживать соблюдение жестких правил контроля целостности и непротиворечивости данных как в используемых базах данных, так и при выполнении транзакций.
Принципиальным положением концепции Progress является включение в состав языка Progress 4GL расширенного набора операторов, необходимых для обеспечения автоматического управления транзакциями и блокировки записей, свободной навигации по индексам удаленной БД, обеспечения целостности и сохранности информации, выполнения сложных вычислений и обработки данных, печати отчетов и др. Средствами этого языка единообразно описываются процессы сервера, клиентские и пакетные процессы, что облегчает реализацию прикладных задач создаваемой системы как в аппаратной среде "хост-терминал", так и в системах с архитектурой "клиент-сервер".
Разработка системы должна проходить в условиях легкого и быстрого создания различных компонентов приложений. Этому способствует то, что средствами языка формируется среда графического интерфейса пользователя (GUI), в которой разработчик при написании приложения оперирует с определенными объектами – полями баз данных, текстами, опциями меню, кнопками управления и т.д., которые легко задаются и определяются в экранных формах, окнах и отчетах как основных компонентах приложений.
Одной из черт современной ИС является легкая переносимость готовых приложений во множестве операционных сред при единообразном отображении форм, окон, отчетов и графических объектов. Здесь средства альтернативного вывода языка 4GL дают возможность быстро создавать и поддерживать разные версии одинаковых приложений с единым пользовательским интерфейсом для переноса в разные графические и текстовые среды. Это значит, что можно разработать сколь угодно сложное приложение на персональном компьютере в среде MS Windows, а затем без малейшей переделки работать с ним в текстовой среде DOS или UNIX реальной системы. Для такого переноса достаточно лишь перекомпилировать приложение.
Являясь объектно-ориентированным языком, Progress 4GL позволяет создавать и поддерживать многократно используемые объекты (reusable objects) на любом уровне пользовательского интерфейса, логики приложений или данных: создав какой-либо объект, его можно повторно использовать в этом же окне или в любом другом, в экранной форме или в отчете, что кардинально повышает эффективность труда разработчиков. Такими же свойствами обладают внутренние процедуры объектов, создаваемые средствами языка, которые помогают реализовывать многооконные и многомодульные приложения в развитых и сложных ИС .При этом описание объектов и их внутренних процедур переносится из клиентской части процесса в серверную – в единый словарь данных системы, что позволяет рациональнее распределить функции прикладных процессов между клиентской машиной и сервером и обеспечить более высокую степень масштабируемости ИС.
Другой важной особенностью создаваемых Progress-приложений является придание им свойств управляемости по событиям, упрощающих действия пользователей при работе с готовой системой. В виде таких "событий", связываемых с отдельными объектами приложения, могут выступать ввод данных в определенные поля базы, выбор опций меню, нажатие "радиокнопки" или изменение размеров окна. Средства языка 4GL позволяют создать и описать триггеры пользовательского интерфейса – процедуры, исполняемые при изменении облика и состояния отдельного объекта в результате каждого происшедшего события.
Когда создаваемое приложение обращается к информации, содержащейся в удаленной обширной БД, даже простой просмотр необходимых текстов может стать операцией, затрагивающей миллионы записей и увеличивающей на порядок время ее выполнения. Чтобы обеспечить высокую скорость действий с данными, а также свести к минимуму время выполнения транзакций, Progress 4GL содержит специальные функции для манипулирования всеми типами информации, которые обеспечивают на сервере возможность свободной навигации в БД по индексам в любом направлении.
Progress 4GL включает обширный набор средств для программирования логики, управления объектами, циклических расчетов, а также операторы реализации действий пользователя, обеспечивающие наиболее удобные способы создания приложений, управляемых по событиям. А его открытость и соответствие большинству производственных стандартов дает возможность встраивания в Progress-разработку фрагментов готовых приложений и программ на языке С, используя интерфейсы DDE, DLL и интерфейсы pipes.
Создавая различные прикладные системы в условиях России, разработчики неминуемо сталкиваются с необходимостью их "кириллизации" так как базы данных, терминалы и принтеры могут использовать различные системы кодировок. Желательной также является и локализация инструментальных средств разработки. И если вы создаете свою прикладную ИС, используя средства Progress, то считайте, что языковых проблем для вас не существует при обращении к конкретному средству или информационному компоненту системы Progress осуществляет автоматическое преобразование кодировок. А чтобы упростить разработку, все сообщения системы даются на русском языке, кроме того, полностью локализован один из основных инструментов – Report Buider (рис.1). Резюмируя, можно сказать, что, создав язык 4GL, фирма Progress Software обеспечила полноту и гибкость всех предлагаемых ею инструментальных средств разработки, а также открытость и легкость переноса скомпилированных приложений при проектировании сложной современной ИС. По свидетельству независимой исследовательской фирмы Butler Group, этот язык является в настоящее время одним из лучших языков четвертого поколения на рынке промышленных средств разработки.

Что обеспечивает конкурентоспособность СУБД Progress
Вопрос не праздный, поскольку рынок СУБД был уже занят продукцией крупнейших производителей, когда фирма Progress Software предложила свою реляционную систему управления базами данных (RDBMS). Создатели рекомендуют использовать ее не только потому, что она включает в себя основные функциональные средства конкурирующих систем управления базами данных, но и содержит специальные механизмы обеспечения высокой производительности в различных архитектурах и на большинстве сетей. Кроме того, результаты ее независимого тестирования подтвердили, что RDBMS Progress обеспечивает полную поддержку SQL по стандарту ANSI SQL89, вследствие чего этот продукт внесен в список Validated Processor List.
Спроектированная для архитектуры "клиент-сервер", RDBMS Progress нацелена на поддержание минимального времени отклика и высокой производительности, даже если в системе одновременно обрабатываются свыше тысячи транзакций. Достигается это за счет:
– механизма блокировки уровней записей, а не страниц или блоков, когда одной транзакцией затрагивается множество записей, при этом если несколько клиентских процессов одновременно обращаются к одной конкретной базе, то они никогда не конфликтуют при выборе разных записей,
– поддержки приложений "только для чтения", которые не предусматривают блокировки и, естественно, не конфликтуют с другими клиентами,
– гибкой схемы буферизации, когда записи в базу выполняются в "отложенном" режиме, что сокращает число обращений к диску, а множество записей, выбираемых клиентом, упаковывается в одно сетевое сообщение для снижения сетевого трафика,
– использования самонастраиваемых фоновых заданий – Asynchronous Page Writers (APW), которые производят периодические записи на диск обновляемой базы и файла состояния буферов, что освобождает процесс сервера от ввода/вывода при повторном использовании буфера,
– использования механизма Asynchronous Checkpoints (асинхронных точек проверки баз данных), когда заполняется кластер в файле восстановления состояния, и СУБД должна обновить все зафиксированные транзакции в базе данных. Используемый RDBMS Progress механизм обновления предполагает автоматическое открытие нового кластера при заполнении исходного и продолжение работы, когда APW в фоновом режиме записывают все обновляемые блоки базы данных, что не замедляет выполнение всех остальных процессов в базе данных. После обновления исходный кластер снова может использоваться процессом,
– записи индексов в БД в сжатом формате, что позволяет за одно обращение к диску считать и записать большее число ключей,
– поддержки функционирования приложений в режиме "24x365", что дает возможность администратору баз данных полностью или частично архивировать БД и журналы транзакций без прерывания операций с базами данных. Все перечисленные средства способствуют поддержке на высоком уровне производительности распределенной ИС, базирующейся на RDBMS Progress. Когда же аппаратная платформа системы переводится на симметричные многопроцессорные комплексы (СМР), то включаются дополнительные встроенные средства, еще более сокращается время отклика системы, – спиновая блокировка, уменьшающая время доступа к необходимым ресурсам отдельных приложений, создание больших по объему пула буфера и хеш-таблицы, реализация множества блокировок разделяемой памяти, распараллеливающих клиентские процессы. В целом все перечисленные средства обеспечивают предсказуемую масштабируемость большой ИС при переходе на новые, еще более мощные аппаратные средства.

В отношении организации обслуживания клиентских процессов RDBMS Progress поддерживает две основные конфигурации, как это показано на рис. 2:
1. Self-Service Client (клиент на самообслуживании), когда клиент и сервер представляются частями единого процесса, выполняемого на одной машине. Для локальных пользовательских систем и однопроцессорных систем с локальными клиентами такая конфигурация гарантирует минимальные потери и наименьшее время отклика.
2. Client/Server (клиент/сервер), где клиентские приложения и серверы БД являются разделенными процессами. При этом один сервер может обслуживать одного клиента или быть многопоточным, поддерживающим приложения множества клиентов. Множество многопоточных серверов в максимальной степени используют ресурсы многопроцессорных распределенных систем.
При этом RDBMS работает более чем на ста различных платформах – от PC до мультипроцессорных систем. Ее рабочей средой является большинство наиболее известных вариантов UNIX, ОС мини-компьютеров (OpenVMS и CTOS) и все операционные системы PC и локальных сетей PC, как это показано на схеме (см. рис. 3).
В полностью распределенных системах, когда отдельные БД физически распределены по разным узлам сети, RDBMS Progress автоматически отслеживает данные местоположения баз и связывает их в единую логическую базу данных, доступную всем инструментам ИС. Прикладные задачи системы могут соединять данные из более чем 240 БД по единственному запросу в SQL или Progress 4GL или обновлять данные путем единственной транзакции .Поддержание целостности и непротиворечивости данных во время транзакций, адресованных ко многим базам данных, обеспечивается за счет выполнения протокола двухфазной фиксации (Two-Phase Commit), что позволяет осуществлять откат транзакции в случае, если произошел сбой в любом из узлов сети.
Немного о DataSevers
Но если необходимо подключить к создаваемой ИС уже действующие базы данных под управлением иных СУБД, то на помощь приходят DataServers Progress – продукты, с помощью которых создаваемые приложения могут получить доступ к информации этих баз DataServers обеспечивают прикладным задачам ИС прозрачный доступ ко множеству файловых систем и реляционных СУБД (рис. 3) и полную независимость от используемых баз данных.
Подобная независимость является результатом специфичной архитектуры DataServers, показанной на рис 4, особую роль в которой играют два компонента – DataServer Backplane и Data Dictionary. Первый компонент выступает в качестве единого, непротиворечивого интерфейса приложений и интегрирующего звена для запрашиваемых данных из множества баз данных. DataServer Backplane автоматически управляет данными, доступ к которым через соответствующий DataServer открывается из разных источников. Именно этот продукт позволяет приложениям интегрировать информацию из множества разнородных БД в едином запросе и обновлять записи во множестве баз одной транзакцией. Более того, DataServer Backplane в совокупности с DataServer обеспечивает реляционный доступ к нереляционным данным, хранимым в файлах ISAM.

В Data Dictionary централизованно хранятся схемы данных всех используемых в системе БД, что исключает необходимость определения схемы конкретной базы со стороны клиентского процесса.
DataServers Progress поддерживают уникальные функции отдельных СУБД, так, например, для Oracle и Sybase они включают поддержку хранимых процедур.
Если же какие-либо СУБД не обеспечивают некоторых функциональных возможностей, необходимых для Progress 4GL, то соответствующие DataServers эмулируют их. Многие СУБД, например, не обеспечивают возможности чтения специфических записей, основанных на уникальных идентификаторах записей, или манипулирования массивами информации. А большинство SQL систем БД не позволяют читать записи в обратном порядке – возможность, необходимая для поддержки обратного скроллинга списков. Чтобы сделать приложения, использующие такие возможности, переносимыми на многие системы управления базами данных, серверы данных Progress эмулируют эти свойства для СУБД, которые ими не обладают. И наконец, DataServers Progress обеспечивают поддержку большинства стандартов промышленных интерфейсов, включая стандарт DDE (динамического обмена данными) и стандарт Microsoft ODBC программируемого интерфейса приложений. Разработчики могут встраивать вызовы SQL в программы на С для выборки или обновления данных из любого сервера данных Progress.

Несмотря на то что на отечественном рынке продукты Progress занимают далеко не первое место, описанные особенности архитектурных и языковых решений позволили успешно применять их для разработки и практического внедрения больших информационных систем. Так, фирмой "БИС" на базе решений Progress разработана банковская интегрированная система "БИСквит 2.5", которая внедрена в 11 коммерческих банках на различных платформах – от DOS до многопроцессорных UNIX-систем, а одна из них охватывает более 20 региональных отделений в разных городах России.
(Продолжение следует.)