Появление на рынке новой версии «народной» платформы для автоматизации всего и вся — «1С: Предприятие 8.0» — уже давно ни для кого не секрет. Для понимающего человека выход «восьмерки» — событие знаменательное, но вот широкие массы ИТ-специалистов (как я с удивлением убедился на примере множества своих знакомых) по-прежнему остаются в полном неведении относительно функциональной мощи этого пакета и его разительного отличия от всех предыдущих продуктов, выпущенных под маркой «1С». Причин тому две: отсутствие в свободном доступе его демоверсий и весьма скудное освещение новинки в специализированной компьютерной прессе. Рекламные же материалы производителя вызывают у специалистов традиционный скепсис.

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

Терминология

Сначала определимся с терминами. Назовем «1С: Предприятие 8.0» его технологическим именем V8 — так понятнее и правильнее, а «1С:Предприятие 7.7» — V7. Такое определение необходимо для того, чтобы читатель не путался, поскольку «1С», к сожалению, не дала своим программным продуктам кодовые имена (так, например, для Mac OS X достаточно сказать «Ягуар» или «Пума», и все поймут, о чем идет речь).

Немного лирики

Новые версии популярных пакетов делаются, как правило, двумя способами. Можно взять старый вариант, тщательно вылизать интерфейс, добавить несколько малозначительных, но удобных функций, нарисовать красивые картинки, исправить парочку старых «багов» и выкладывать на прилавок. Или же, засучив рукава, создать действительно новый программный продукт, сохраняющий преемственность исключительно за счет частичного внешнего сходства.

Примером первого способа отлично служит MS Office: между его последними версиями косметических отличий полно, но и только. То же можно сказать и о «1С:Предприятие 7.7» при сравнении c версией 7.5. Следует признать, что интерфейс стал симпатичнее, появилось несколько новых объектов языка, упрощающих работу программистам, и несколько «фишек», облегчающих жизнь пользователям, но в остальном — все та же V7.

А вот если сравнить MS Windows 98 SE и MS Windows XP Home Edition, то мы увидим совсем другую картину. Внешне система-потомок похожа на систему-предка (настольная ОС для домашнего пользователя, ориентация на мультимедийные функции, упрощение интерфейса, пусть даже в ущерб стабильности, и т.д.). Но внутри это совсем другая система: многозадачное ядро, журналируемая файловая система, разграничение полномочий и проч. И в MS Visual Studio версий 6 и 7 концептуальные отличия вполне оправдывают присвоение версии старшего номера.

Первый вопрос, возникающий при анализе V8, — к какому сорту новых версий относится этот пакет? Действительно ли очередная реинкарнация платформы заслуживает номера «8.0» или же это рекламный трюк, и на самом деле за глаза хватило бы «7.8»? Ответ однозначен: никаких рекламных трюков, все честно, V8 — действительно новая, с иголочки, платформа, по всем статьям явно превосходящая своего предка.

Немного истории

Разработка V8 велась по всем канонам классического долгостроя. Первые работающие демоверсии демонстрировались избранным партнерам «1С» еще в 2001 г. Разумеется, шила в мешке не утаишь — информация тут же попала в Сеть. Точной даты появления релиза никто не называл, но по всем канонам коммерческого софтостроения затягивать с выводом новинок не следует, ведь и конкуренты не спят, так что бери больше, кидай дальше, «баги» будем исправлять по ходу первых продаж, ну а не получится исправить — значит, это будут уже не «баги», а «фичи». Привыкшие к такому образу действий производителей (спасибо MS, отцу и учителю), потребители иных сценариев и не ждали. «Через два-три месяца уже можно будет грохнуть об пол свинью-копилку и идти к ближайшему прилавку за коробкой с цифрой «8» на красно-желтом боку» — мои собственные слова. Но, прямо скажем, пророка из меня не получилось.

Компания «1С» удивила всех, отложив выпуск релиза до состояния полной готовности проекта. «When it?s done» — кто бы мог подумать? Затем удивила повторно, последовательно выпустив две бета-версии. И только потом появился релиз — он оказался первым, но далеко не последним. Система V8 построена по компонентной модели, причем одни компоненты вошли в первый релиз на правах бета-версии (о чем официально было заявлено), а другие не вошли вовсе, и их следует ожидать в начале 2004 г.

Хорошо это или плохо? Принятие решений в софтостроительном бизнесе можно представить как бесконечную войну условного «менеджера» с условным же «программистом». «Менеджеру» нужно продать как можно больше и как можно быстрее, а «программисту» — написать так, чтобы не было мучительно стыдно за продаваемый продукт. Если доминирует «менеджер», то высокое качество продукта достигается (если оно вообще достигается), единственно благодаря удачному расположению звезд. Если же рулит «программист», то разработка никогда не будет завершена. Задача в том, чтобы найти правильный компромисс между позициями «менеджера» и «программиста».

Думаете, это все пустая теория? Ничего подобного. Качество разработки и грамотная политика производителя для конечного пользователя оборачиваются живыми хрустящими деньгами.

Обзор архитектуры системы

В плане идеологии V8 — прямой потомок V7. Разработчики «1С» рассудили, что от добра добра не ищут, и правильно сделали. У V8 все родовые признаки налицо:

  • среда разработки ("конфигуратор") и среда исполнения ("предприятие") в одном приложении;
  • предметно-ориентированная модель данных (программист имеет дело с объектами метаданных, абстрагируясь от их физической структуры);
  • один клиент для обоих режимов работы СУБД (файл-сервер и клиент-сервер);
  • открытая архитектура, полная модифицируемость всего и вся, мощный встроенный язык программирования с поддержкой русской нотации (язык интерпретируемый - компиляция происходит непосредственно в момент исполнения);
  • расширение функционала платформы посредством внешних библиотек (на основе фирменного SDK; поставляется отдельно);
  • оконный интерфейс, дружественный к пользователю и разработчику приложений;
  • защита от копирования на основе аппаратных ключей.

Что же изменилось в архитектуре системы? Рассмотрим по пунктам.

Два — хорошо, а три лучше

Клиент-серверный режим в V8 построен на основе честной трехзвенной архитектуры. Клиент-сервер V7 отличался от файл-сервера единственно форматом хранения данных (таблицы MS SQL вместо файлов DBF), а вот клиент-сервер V8 построен по всем канонам: клиент, сервер приложений, сервер БД. (см. рисунок).

Трехзвенная архитектура V8

Зона А — клиент (среда исполнения V8). Его задачи: обеспечивать интерфейс пользователя, передавать запросы на поиск и обработку данных серверу приложений, получать результаты и интерпретировать их угодным пользователю образом.

Зона Б — сервер приложений («Сервер «1С:Предприятие»). Его задачи: получать от клиента запросы на поиск и обработку данных, преобразовывать их к виду, понятному серверу БД (не забывая про оптимизацию), получать и обрабатывать данные, приводить результаты к виду, понятному клиенту V8.

Зона В — сервер баз данных (MS SQL Server). Его задачи: хранение физической структуры данных приложения V8 и отработка запросов к ним. При желании MS SQL можно использовать и шире: программисту для получения прямого доступа к данным V8, администратору — для архивирования данных и других сервисных операций

Чем обусловлена жесткая привязка V8 к MS SQL? Ведь при желании можно было бы обеспечить поддержку и других популярных СУБД? Причина, мне думается, вот в чем: обеспечить поддержку одной СУБД значительно проще (и к тому же это займет меньше времени), нежели нескольких. А по дешевизне, простоте развертывания и использования, да и распространенности MS SQL значительно превосходит, скажем, Oracle. Вторая и, возможно, главная причина состоит в том, что пользователи V7 работают с MS SQL и только с ней, а их интересы нельзя было не учитывать при проектировании V8.

Чем же так хороша трехзвенная архитектура по сравнению с двухзвенной? Во-первых, производительность — конвейерное производство («трехзвенка» по сути является классическим конвейером), а оно всегда эффективнее штучного. Во-вторых, такая схема позволяет перераспределить аппаратные ресурсы. В случае V7 производительность клиента играла очень важную роль, поскольку вся обработка данных лежала на нем. А в V8 основная нагрузка падает на сервер приложений и коммуникации между сервером приложений и сервером БД (в случае, если они разнесены по разным машинам). Подобная схема обеспечивает на порядок лучшую масштабируемость и позволяет добиться большей производительности за меньшие деньги. В-третьих, «трехзвенка» дает администратору БД широкий простор для оптимизации системы: становится значительно больше параметров, которыми можно «играть».

Умная машина транзакций

Одним из самых серьезных препятствий в использовании V7 для больших (по-настоящему больших) задач является несовершенство «машины транзакций». Обрабатывая транзакцию по некоей таблице, «движок» V7 блокирует ее целиком. Следовательно, другие запросы на проведение транзакций по той же таблице стоят в сторонке и нервно курят, дожидаясь своей очереди. А не дождавшись (что случается сплошь и рядом), бросают работу с криком: «Ошибка блокировки таблицы! Все пропало!»

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

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

Проблема действительно серьезная, и разработчики V8 уделили ее решению изрядную долю своего рабочего времени. Машина транзакций V8 значительно умнее своего предка: она блокирует только те данные, которые необходимы для обработки конкретного запроса. Как следствие — если и не полное упразднение очередей за солнцем (каковое недостижимо в принципе, по самой сути реляционных СУБД), то хотя бы значительный прогресс в этом вопросе и распараллеливание всего, чего только можно. Больше никаких «ожиданий блокировки...» — товарный документ проводится одновременно с банковским, и никакой особо активный пользователь не сможет парализовать работу всего предприятия.

Вы скажете: «Нашел чем удивить, все приличные СУБД это умеют еще со времен царя Гороха». Да, это так. Но, во-первых, V8 не СУБД, а среда разработки со встроенным механизмом обработки транзакций... и программисту вообще не нужно знать всю эту механику. Во-вторых, приличные СУБД и стоят более чем прилично — прикиньте совокупную стоимость владения «взрослой» системой (стоимость лицензий, разработки и поддержки, необходимых аппаратных ресурсов) и сравните с аналогичными параметрами V8.

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

Большие, но по пять

Клиент-серверный режим явно избыточен для предприятий, не владеющих большими объемами данных и не нуждающихся в одновременной работе десятков пользователей. При этом затраты на мощные серверы, лицензии MS SQL и на профессиональных администраторов можно сразу записывать в графу «убытки». Для таких пользователей в пакете «1С:Предприятие» предусмотрен файл-серверный режим работы СУБД — с ним подобных затрат можно избежать.

Модель данных V8 и в этом случае существенно отличается от модели данных V7, оперирующей массивом обычных файлов формата DBF (каждый со своим собственным индексом) плюс n-ным количеством служебных файлов («файл конфигурации», «словарь данных», «файл реестра пользователей» и т. д.).

Приведенное решение имеет определенные недостатки:

  • администратору сложнее уследить за всеми этими файлами;
  • поломка даже самого незначительного DBF-файла приводит к полной неработоспособности всей системы;
  • при сетевой работе файл-сервер должен поддерживать огромное количество одновременно открытых файлов (в случае Windows 9x возникает полный ступор системы, NetWare и Samba требуется тонкая и зачастую неочевидная настройка, увеличение же количества DBF в базе запросто может привести всю систему в нерабочее состояние);
  • данные полностью открыты, так что о защите рабочего DBF-файла от просмотра и копирования и говорить не приходится, ну а извлечение из него информации - дело техники.

Некоторые недостатки V7 легко обращаются в достоинства. Так, скажем, «сломанный» DBF можно восстановить с помощью тех или иных сторонних инструментов, а прямой доступ к полям и записям DBF может помочь тогда, когда необходимо извлечь данные без участия клиента V7. Вообще, открытость данных — типичная палка о двух концах.

Но такие проблемы, как защита доступа к БД и настройки файл-сервера, в любом случае остаются. Я не раз и не два слышал от системных администраторов: «Это все ваша «1С» глючит, а у меня все в порядке».

Модель данных V8 для файл-сервера очень похожа на модель данных MS Access и также построена по принципу «одна база данных = один файл». Все содержимое БД (таблицы, индексы, структура, служебные данные, учетные записи пользователей) упаковано в один файл закрытого фирменного формата. Конечно, дотошные специалисты рано или поздно расшифруют этот формат («что один человек построил, то другой завсегда сломать сможет»), но для абсолютного большинства пользователей файл 1Cv8.1CD так и останется классическим черным ящиком.

Хорошо это или плохо? По-моему, это правильная концепция: легче контролировать и легче перемещать, труднее испортить и взломать. Конечно, ручному восстановлению испорченный файл БД, в отличие от набора DBF, уже не поддается, но это не так и страшно. Во-первых, существует техническая поддержка «1С», а во-вторых (и это главное!) людям, живущим по принципу «без «бэкапа» по жизни», вряд ли так уж дороги накопленные ими данные. В самом пиковом случае, при необратимой порче файла данных и восстановлении вчерашнего «бэкапа», будет потерян ввод данных за один день, а объем ежедневного ввода при использовании файл-сервера по определению невелик. Неприятно, но отнюдь не смертельно.

Ключ от квартиры, где деньги лежат

Аппаратная защита от копирования, к сожалению, никуда не делась. Правда, здесь V8 технологически опережает V7: интерфейс ключей защиты наконец-то поменялся с абсолютно неприспособленного для этих целей LPT (стоит отметить, что ключи на основе USB доступны уже и для V7, но далеко не все пользователи об этом знают) на гораздо более удобный USB. Этим обеспечивается:

  • мобильность ключа (конечно, никто не запрещает менять LPT-ключи в горячем режиме, но все на свете инструкции такую практику дружно запрещают, а USB-ключ можно втыкать в работающую систему без риска спалить порт);
  • поддержка современных ноутбуков, зачастую не имеющих LPT, как такового;
  • отсутствие труднолокализуемых аппаратных конфликтов ключей с принтерами, сканерами и прочей периферией, а также друг с другом. Видели ли вы когда-нибудь "колбасу" из пяти воткнутых друг в друга LPT-ключей? На редкость мрачное зрелище.

В общем и целом, если LPT-ключ V7 как был, так и остается скорее помехой для пользователя, то USB-ключ хотя бы не мешает ему жить и работать. На фоне западных инноваций в области защиты от копирования — всех этих самостирающихся DVD, нечитабельных CD, привязок к серийным номерам «железа» и многоходовых активаций — USB-ключ в V8 выглядит сущим симпатягой.

API для Самоделкина

Одним из основных конкурентных преимуществ V7 является ее «безразмерность» — механизм расширения платформы сторонними библиотеками получился настолько удачным, что их количество исчисляется сотнями. Существует два пути создания «внешней компоненты»: SDK, предоставленный «1С», и эксплуатация особенностей внутреннего устройства V7 (благодаря работе ряда квалифицированных товарищей она давно перестала быть тайной).

Есть множество внешних библиотек для V7, причем на любой вкус: от простейшей компоненты Match (реализует доступ к ряду математических функций) до мощного комплекса 1С++ (полноценная модификация, привносящая в платформу ООП — инкапсуляция, полиморфизм, наследование, браузер классов для конфигуратора, и все это работает).

Как обстоят дела с расширением функционала V8? Следует признать, что здесь далеко не все так радужно. Фирменный SDK никуда не делся, однако он остался тем же самым. «1С» заявила о полной совместимости V8 с «Технологией создания внешних компонент 2.0». Значит, многие (явно не все, количество архитектурных различий между V7 и V8 слишком велико) библиотеки, написанные для V7, будут работать с V8, но никаких новых возможностей в SDK не появится.

Что же касается «хакерских» расширений, то здесь сторонним разработчикам, похоже, ничего не светит. Во всяком случае до тех пор, пока кто-нибудь не препарирует внутреннее устройство V8 (принимая во внимание прошлый опыт, это может занять не один год). Уже известные лазейки для «модификаторов» в «движке» V8 программистами «1С» предусмотрительно закрыты, а кое-где и отрезаны по живому.

Лично я не вижу в этом особой проблемы — около 90% функционала внешних компонент V7 уже реализованы в V8 на системном уровне. В платформу встроены функции коммуникативные (e-mail, HTTP, FTP), математические, функции для работы с XML, двоичными данными и COM-объектами, а также оболочка HTML-документа (понятное дело, на основе MSIE). Ну а количество доступных визуальных «бантиков» настолько велико, что не нуждается ни в каком расширении.

Оставшиеся же 10% — это либо коннекторы к другим средам и СУБД, либо библиотеки для работы со всевозможным «железом» (кассовые аппараты, электронные весы, сканеры штрих-кодов, POS-терминалы и т.п.). Они легко реализуются средствами фирменного SDK, и более того, многие из уже существующих расширений V7 будут без проблем работать и в V8 (либо же потребуют незначительной модернизации).

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

Сухой остаток

Подведем итоги «архитектурного» обзора платформы. Ключевые отличия V8 от V7 состоят в следующем:

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

* * *

В плане архитектуры V8 отнюдь не является подрихтованным клоном V7. А поскольку новая платформа по многим показателям превосходит своего предка как минимум на порядок, то и области применения V8 и V7 будут пересекаться лишь отчасти.

О том же свидетельствует и новая лицензионная политика «1С». Если V7 поставлялась в трех вариантах (урезанные «базовые» версии здесь не рассматриваются, так как они являются абсолютно другими продуктами, предназначенными для иной рыночной ниши): однопользовательская, сетевая и сетевая с поддержкой SQL, для V8 стоимость лицензии рассчитывается исходя из количества рабочих мест.

Такая политика производителя уже вызвала ряд удивленных и даже возмущенных «реплик с места». Но если разобраться, то что же в этом удивительного или возмутительного? Почему-то никому не кажется странным, что Oracle рассчитывает стоимость своих серверных продуктов, основываясь на количестве процессоров. На цивилизованном рынке ПО подобная практика является обычной. Мне могут возразить: «Где «1С» и где Oracle?» На это вполне можно ответить так: «Если обе компании работают по схожим бизнес-моделям (коммерческая разработка тиражного ПО, извлечение прибыли из лицензирования продукции конечным пользователям плюс разного рода сопутствующие услуги), то и их ценовая политика будет схожей.

Впрочем, ценообразование, совокупная стоимость владения, окупаемость вложений, рыночная конкуренция — темы отдельного разговора. Здесь же речь шла о технологиях, а в этом плане V8 можно назвать весьма удачным продуктом.