Собственный сервер баз данных Progress
Администрирование СУБД
Некоторые особенности функционирования СУБД Progress
Компонентный сервер приложений AppServer
Progress/4GL
Переносимость
Интернационализация
Системные сообщения
Работа Progress в гетерогенной сети
Одновременная поддержка нескольких языков
Описание процесса перевода приложения

Сегодня к современным информационным системам уровня предприятия предъявляются очень высокие требования производительности, надежности, обеспечения целостности и безопасности данных, защиты от системных и аппаратных сбоев, масштабируемости, возможности взаимодействия с другими системами, работы в гетерогенных распределенных вычислительных сетях, в том числе и глобальных. В немногочисленном семействе промышленных СУБД, отвечающих всем предъявленным требованиям, СУБД Progress является своего рода Золушкой, незаслуженно недооцениваемой широкой общественностью, но меж тем эксплуатируемой на многих российских промышленных предприятиях, в банках, государственных учреждениях и коммерческих структурах. В данной статье мы остановимся на обзоре архитектуры и возможностей СУБД Progress, являющейся частью интегрированной системы разработки критически важных (mission-critical) приложений, включающей в себя также средства визуального программирования на основе компонентно-ориентированного подхода, средства разработки приложений для Internet/intranet и компонентный сервер приложений.

СУБД Progress - это SQL-совместимая реляционная система управления базами данных, поддерживающая многосерверную и многопоточную организацию доступа к данным. СУБД имеет шлюзовую архитектуру, показанную на рис. 1.

Picture 1

Рисунок 1.

Приложения Progress могут работать с данными из базы данных Progress, любой базы данных, для которой есть Progress DataServer или их комбинации, причем тип источника данных определяется только на этапе инсталляции и не требует изменений в приложении. Для доступа к своей базе данных Progress предоставляет ODBC Driver.

DataServer - шлюз нижнего уровня для доступа к другим источникам данных, в том числе и к распределенным.

При работе приложения через DataServer можно использовать специфические для конкретного сервера СУБД возможности, синтаксис и команды (например, использовать преимущества хранимых процедур Oracle, синтаксис PL-SQL, интерфейс SQL*Net) и/или расширять функциональность, используя специфические средства Progress, например триггеры.

Собственный сервер баз данных Progress

На рис. 2 показана структура собственного сервера баз данных Progress в общем случае.

Picture 2

Рисунок 2.

Основные компоненты:

Брокер - процесс, управляющий многопользовательской базой данных. Он управляет разделяемыми ресурсами и выполняет восстановительные работы в базе данных после перезагрузки. Брокер также отвечает за связь с удаленными клиентами, прикрепляя их к существующим серверам удаленных клиентов или, при необходимости, запуская новые серверы. Брокер останавливает процессы удаленных клиентов при завершении работы базы.

Сервер - процесс, который обращается к базе данных через разделяемую память от имени одного или нескольких удаленных клиентов. Сервер выполняется на хост-машине и взаимодействует с удаленными клиентами, используя сетевые протоколы.

Progress Монитор - утилита, показывающая производительность и полезную информацию о статусе базы данных и активности.

Progress Watchdog - утилита, определяющая некорректно завершенные процессы и разблокирующая записи базы данных, структуры в разделяемой памяти и т. д.

При работе с разделяемой памятью Progress использует фоновые процессы, которые постоянно выполняют текущие функции в фоновом режиме. Асинхронная запись буферов позволяет распараллелить обработку данных и запись информации в журналы активных и завершенных транзакций. Сброс буферов осуществляют отдельные процессы, что позволяет значительно увеличить производительность системы, особенно в многопроцессорных системах. Существует три вида фоновых процессов.

  • APWs (Asynchronous page writers) постоянно записывают измененные блоки базы данных на диск.
  • BIWs (Before-image writers) постоянно записывают на диск заполненные буферы журнала активных транзакций, служащего для отката базы назад в случае системных сбоев.
  • AIWs (After-image writers) постоянно записывают на диск заполненные буферы журнала завершенных транзакций. Используя резервную копию базы и журнал завершенных транзакций, всегда можно восстановить текущее состояние базы в случае аппаратных сбоев. Создание резервных копий баз данных и восстановление баз может производиться как в off-line-, так и on-line-режимах.
  • В случае распределенных транзакций автоматически используется протокол двухфазной фиксации.

  • Удаленный клиент - клиентский процесс на удаленном сетевом узле (на компьютере, который не содержит базы данных или брокера базы данных). Удаленные клиенты не обращаются к базе напрямую, а работают через серверы, запускаемые брокером.
  • Самообслуживающийся клиент - многопользовательская Progress-сессия, запущенная на той же машине, что и брокер. Самообслуживающиеся клиенты работают с базой напрямую через разделяемую память. В случае, когда клиент и сервер функционируют на одном компьютере, Progress позволяет объединить их функции в одном процессе в терминах операционной системы, что сокращает накладные расходы по производительности. Высокая производительность сервера обеспечивается также большим кэшем базы, до 500 000 блоков базы, поддержкой семафоров и SMP Spin Locks.
  • Блокировки в Progress поддерживаются вплоть до уровня записей. Существует два типа блокировок: разделяемая (shared) и монопольная (exclusive). Тип и время, на которое блокируется запись, определяются по умолчанию, но могут быть и явно указаны разработчиком. Блокирование доступа возможно на уровне записи, таблицы и базы данных.

    Администрирование СУБД

    Сервер баз данных Progress достаточно прост в администрировании, благодаря большому количеству умолчаний и тому, что многие процессы, такие как APWs, автоматически настраивают свое поведение, основываясь на активности использования базы данных, даже если активность принципиально изменяется при переходе с дневной обработки в режиме on-line на пакетную обработку в ночное время. Всего СУБД имеет около 150 конфигурационных опций и параметров, позволяющих оптимально настроить систему для конкретной программно-аппаратной платформы и сетевого взаимодействия.

    Некоторые особенности функционирования СУБД Progress

    Каждое приложение работает со словарем базы данных (Data Dictionary), в котором описывается структура базы данных, характеристики отдельных таблиц, полей, индексы, определены триггеры, выполняемые при работе с данными. Все остальные компоненты среды разработки используют по умолчанию информацию, хранимую в словаре, и любые изменения, сделанные в Data Dictionary, наследуются всеми компонентами приложения, в результате чего приложения не зависят ни от физического расположения данных в распределенных и гетерогенных сетях, ни даже от формата источника данных.

    Для эффективной работы с документами в Progress существует механизм word indexing - возможность построения индексов по словам в символьном поле.

    Приложение может также использовать данные из мета-схемы базы (т. е. само описание базы данных может быть доступно в виде обычной базы) и виртуальные run-time-таблицы (magic tables), содержащие данные об активных блокировках записей, работающих пользователях, параметрах базы данных. Для поддержания семантической целостности базы данных, для различных событий, таких как добавление, удаление, нахождение записи в базе и т. д., можно определить триггеры, выполняемые в ответ на эти события. Механизм триггеров можно использовать для дополнительной журнализации событий в базе, ограничения видимости записей, соответствующих некоторым критериям для определенных групп пользователей. Например, для события find record для таблицы "Зарплата" можно создать триггер, который позволит просматривать записи о зарплате только тех сотрудников, сумма зарплаты которых не превышает определенного для данного пользователя значения, хранимого в другой таблице. Пользователь может даже не догадываться, что просматривает только часть записей. Все триггеры пишутся в виде обычных 4GL-процедур, могут работать с любым источником данных, поддерживаемым Progress, и до сих пор обладали только тем недостатком, что в отличие от хранимых процедур исполнялись на клиентской стороне. Но с появлением в сентябре 1996 года нового продукта Progress AppServer - компонентного сервера приложений - триггеры могут выполняться в любом узле вычислительной сети, в том числе и на самом сервере базы данных.

    Компонентный сервер приложений AppServer

    Одним из важных шагов, предпринятых Progress Software в направлении создания распределенных приложений в N-уровневой архитектуре клиент-сервер, является введение в язык понятия удаленных процедур (remote procedures), разрабатываемых на языке 4GL и используемых для разделения приложения на компоненты. Каждый из этих компонентов запускается на своем сервере приложений в непосредственной близости от данных, с которыми он работает, тем самым выделяя сегмент бизнес-логики из приложения - по сути инкапсулируя его функции в различных компонентах, каждый из которых может быть запущен на разных серверах в различных узлах сети. В приложении, написанном с использованием запускаемых на компонентном сервере удаленных процедур, клиентское приложение может вызвать удаленную процедуру и, не дожидаясь возврата из нее, сразу же перейти к следующей процедуре. Работа клиента будет прервана только по окончании выполнения удаленной процедуры для возвращения результата. Очевидно, что при этом общая производительность приложения значительно возрастает.

    Progress/4GL

    Компонентный язык 4GL - ядро разработки критически важных приложений, которое позволяет управлять всеми уровнями приложения: пользовательским интерфейсом, бизнес-логикой приложения и данными. Он обеспечивает управление транзакциями, генерацию отчетов, определение механизмов безопасности и целостности данных. В приложении на 4GL для работы с данными можно использовать SQL. Progress/SQL удовлетворяет стандарту ANSI SQL89 Level 2. Также в приложение могут быть интегрированы вставки С, на объекты ActiveX, OLE, механизмы DDL, DDE, Unix named pipes и другие.

    Переносимость

    Progress функционирует более чем на 160 программно-аппаратных платформах и поддерживает различные сетевые протоколы - TCP/IP, SPX/IPX, SNA, DecNet, NetBIOS. Приложения, разработанные на одной платформе, могут эксплуатироваться на любой другой из поддерживаемых платформ. Среди них MS-DOS, Novell, Windows, OS/2, Unix (UnixWare, SCO Unix, Interactive, Sun Solaris, AIX, HP-UX, IRIX), Windows NT (Intel, Alpha), OSF/1, OpenVMS, OS/400. Одним из уникальных свойств Progress является то, что одно и то же приложение может работать как в графической среде (Motif, Windows), так и на алфавитно-цифровых терминалах. Разработчик может создавать и различные экранные формы для каждого из типов пользовательского интерфейса.

    Интернационализация

    Вопрос интернационализации приложений и поддержки национальных алфавитов является одним из принципов открытости системы. С другой стороны, реализация этого требования довольна сложна, так как требует решения большого количества проблем: cортировки, форматного отображения дат и денежных единиц, календарных дней, телефонных номеров и т. д. Опыт работы с Progress и программными продуктами, разработанными c его помощью, показал, что Progress удовлетворяет самым жестким требованиям, предъявляемым к открытой системе с точки зрения интернационализации; в 1996 г. оборот американской компании Progress Software от операций за пределами США превысил 50%.

    В каждой стране используется свой алфавит - набор символов (немецкий, французский, испанский, русский). Для их представления обычно используются таблицы кодировок, содержащие коды от 0 до 255. Однако в некоторых случаях одного байта не хватает для представления всех символов алфавита (китайский, корейский, японский). Progress предоставляет возможность работы как с однобайтовыми, так и двухбайтовыми таблицами кодировок.

    Системные сообщения

    В ряде случаев, особенно при эксплуатации готовой системы неспециалистами в области информационных технологий, требуется исключить появление на экране любой информации на языке, отличном от используемого в данной стране. Основную проблему вызывают системные сообщения, появляющиеся при различных сбоях; как правило, они выдаются только на английском языке. В Progress можно выбрать язык, на котором будут выдаваться системные сообщения, среди них есть, естественно, и русский.

    Работа Progress в гетерогенной сети

    Различные устройства могут использовать различные кодовые страницы, и при работе в гетерогенных сетях важно уметь настроить приложение на работу с такими устройствами. Progress различает несколько типов кодовых страниц - внутренняя страница, страница баз данных, страница печати, страница символьного терминала, страница дополнительного потока. Progress осуществляет автоматическое преобразование информации в соответствии с задаваемыми кодовыми страницами. Конечный пользователь приложения может даже не знать, что различные устройства используют различные кодовые страницы. Значения требуемых кодовых страниц указываются при запуске сессии, и Progress автоматически осуществляет необходимые преобразования.

    Одновременная поддержка нескольких языков

    Все более актуальной становится возможность использования одного и того же приложения в различных странах на разных языках с учетом национальных традиций и особенностей. В России разработчикам также приходится решать такого рода задачи. Российские приложения хотят эксплуатировать на Украине, в Казахстане, в других странах бывшего Советского Союза. При этом встает вопрос поддержки национальных алфавитов каждой из этих стран. Progress Software разработала специальный продукт Translation Manager 2 для решения этих вопросов. В его состав входят два основных компонента - Translation Manager и Visual Translator.

    Описание процесса перевода приложения

    В процессе перевода выделяются две ключевые фигуры: руководитель проекта и собственно переводчик. Каждый из них решает свои задачи. Руководитель проекта формирует задание для переводчика, определяет стоимость работы, распределяет ее между переводчиками, осуществляет контроль за выполнением работы, готовит окончательный вариант приложения. Переводчик получает задание, осуществляет перевод и возвращает выполненную работу руководителю проекта. В соответствии с этими ролями распределены функции между двумя компонентами.

    Руководитель проекта определяет те процедуры, которые должны быть переведены на другой язык. После этого он указывает фильтр для типов сообщений, которые необходимо перевести в каждой процедуре. Такими типами могут быть: меню, метки, наименования кнопок и т. д. После этого происходит формирование задания для переводчиков. В задание могут быть включены стандартные словари, содержащие перевод основных терминов, и допускается использование стандартных словарей фирмы Microsoft, которые применялись для перевода Word и Excel. При этом выдается вся статистика, позволяющая оценить трудоемкость работы и возможные сроки ее окончания. Переводчику передается только информация, необходимая для перевода, без логики самого приложения. Задание может посылаться по почте, на дискете или иным способом.

    Получив задание, переводчик приступает к его переводу на другой язык. Возможны два режима перевода: поэкранный либо построчный. После окончания перевода и его проверки переводчик посылает выполненное задание обратно руководителю проекта.

    Руководитель проекта, собрав полученные работы от переводчиков, консолидирует их работу и выполняет компиляцию приложений. После этого с данным приложением можно работать с использованием нового языка. Язык задается стартовым параметром.

    Разработчиком Progress является американская компания Progress Software Corporation (Бедфорд), имеющая представительства в 64 странах мира. На Progress создано более 3000 приложений, среди которых крупные банковские системы, системы управления промышленными, торговыми предприятиями. На территории СНГ дистрибьютором Progress Software является компания CSBI EE.


    Ольга Твердова, CSBI EE,
    тел.: (812)293-05-21, (812)293-05-44, (095)216-82-23,
    E-mail: info@csbi.spb.su