IP-драйвер

Автор: Вячеслав Черников

Вчера выбрал время на тестирование последней версии ip-драйвера. Как и писали, скорость работы стала вполне приемлемой. Проверял на том, что есть в наличии — девелоперский комп, ноутбук и 100мбит между ними. Визуально скорость на постраничном browse чуть ниже, чем при работе с обычным tps (если прокручивать по одной записи мышой), но жуткие тормоза, которые были в прошлых версиях, отсутствуют. В целом, скорость приемлемая. Некоторые замечания…

Поставляется серверная и клиентскя часть. Шаблоны серверной части достаточно просты и автономны. С помощью их генерится серверная dll, в которую включаются декларации таблиц словаря и глобальные переменные, объявленные в словаре. Чтобы исключить какую-либо таблицу, нужно установить FileUserOptions IPDRV=’0′. Серверная dll генерится визардом и, в простейшем случае, не содержит процедур. В нее можно добавить процедуры, которые в дальнейшем можно исполнять на стороне сервера. Это обычные процедуры. В процессе генерации кода параллельно содается файл с расширением ips, в котором содержится имя серверной dll и перечислены включенные в нее таблицы, глобальные данные и серверные процедуры. В дальнейшем этот файл используется в шаблонах клиентской части.
С клиентскими шаблонами дела обстоят сложнее. Плохая новость — они завязаны на ABC-либу. Хорошая новость — они покрывают два достаточно простых и автономных класса для расширенной работы с ip-соединением (туда входит установка и проверка подключения, управление переменными именами файлов, запись и чтение серверных переменных, запуск на выполнение серверных процедур, обмен файлами между сервером и клиентом). Классы достаточно понятны и хорошо документированы (кстати, дока по ip-драйверу довольно подробная и хорошая). В принципе, их легко подключить обычным способом через inc, а шаблоны можно по аналогии сделать свои — они очень простые.

Поскольку я не использую ABC, то пошел путем интеграции ip-функционала в свой набор. Использовать ips-файл не стал, мне показалось, что достаточно опций словаря. Сделал глобальную опцию словаря, в которой задается имя серверной dll. Если в значение опции спереди добавить «-«, то она считается выключенной. Небольшой нюанс — данные приложения должны находиться в каталоге, относительно корневой директории ip-сервера. Желательно для приложения делать свой подкаталог (вдруг приложений будет несколько). Тогда имя серверной dll в декларации таблицы на клиенте нужно написать по аналогии, например: fsoptip_fsoptdata.dll@… В ip-сервере есть еще алиасы, которые вроде можно указать вместо имени серверной dll, но у меня почему-то не получилось их использоать (или я что-то не так понял).

Далее, для локальных таблиц оставил стандартную схему с IPDRV=’0′. Шаблонами сделал условную установку атрибутов driver и owner при декларации таблиц, подключил в проект либу ip-драйвера. Для работы двух дополнительных классов нужен еще DOS-драйвер, но я их пока не трогал.

Собственно, все. Собрал тестовый пример с тремя таблицами, зарегистрил серверную dll в менеджере ip-сервера. Данные подсунул из реальной базы. Все заработало. Совместимость с обычными приложениями на tps очень хорошая. Переделывать, пожалуй, нужно только те места, где идет присвоение переменных имен таблиц и операции наподобии создания подкаталогов (если делать каталог данных недоступным напрямую по сети). Это, думаю, несложно, и можно завернуть в код используемых шаблонов.

При старте желательно сразу установить соединение и держать его, как и при работе с SQL-серверами. Оно требует некоторого времени. Сделать это можно, либо открыв какую-либо таблицу в первом потоке, либо использовать метод одного из двух классов (они, как я понял, используют для этих целей свою внутреннюю служебную таблицу). Ну а дальше можно заняться оптимизацией сетевого трафика, благо есть такие вещи, как фильтрация вьюшек на сервере, чтение и запись пакетами, серверные процедуры.

Для совместимости со стандартными tps-приложениями использовать условную кодогенерацию и условную компиляцию.

В целом, впечатление вполне благоприятное. Действительно, практически без переделки приложений можно перейти к клиент-серверной архитектуре, оставаясь работать со встроенным форматом и сохраняя привычную накатанную технологию разработки. Это очень важно, поскольку:

  1. Решается вопрос надежности работы со встроенными форматами по сети. Особенно в сочетании с логом, получается довольно надежная конструкция.
  2. Повышается скорость работы и снижается сетевой трафик, можно одключить большее количество конкурентных пользователей по сравнению с файл-серверным вариантом.
  3. Повышается секретность. Как и в случае с SQL-серверами, прямого доступа к файлам по сети может не быть.
  4. Не нужно устанавливать стороннее программное обеспечение, тратить ресурсы на его изучение и техподдержку. Не надо платить за лицензии третьим фирмам. Это особенно важно, если клиенты не имеют своего AT-персонала и ограничены в средствах. Установка ip-сервера достаточно простая — это легкое приложение для решения строго заданной задачи.
  5. Во многих случаях не нужно устанавливать серверную ось, которая более сложна в эксплуатации и может требовать дополнительной оплаты подключений.

    Меня реально напрягал тот факт, что для быстрой и надежной работы моих программ нужно использовать терминальный сервер. Это, конечно, отличное решения для tps, но нужно покупать как минимум саму ось, приглашать
    специалиста для ее установки и, возможно, периодической поддержки, что для организаций с 5-10 компьютерами может быть не совсем обосновано. И это при том, что есть бесплатные SQL-сервера, работающие на декстопах…

  6. Открывается возможность подключения к базам данных через интернет.
  7. Возможны смешанные схемы работы через ip-драйвер и терминальные сервера.

Показательно мнение Брюса Джонса, который назвал ip-драйвер самой значительной разработкой SV, если не считать самого клариона. Сейчас все версии программных продуктов Capesoft, базирующиеся на встроенном
tps-формате, имеют опцию работы с ip-сервером…
Если программы серийные и ориентированы на небольшие и средние предприятия, которым невыгодно заказывать custom development, то использование ip-драйвера может оказаться вполне, вполне конкурентноспособно…

С уважением,
Вячеслав Черников
finsoftrz@yandex.ru
http://www.finsoftrz.narod.ru