Metadata.js для построения дешевых высоконагруженных сервисов

08.08.16

Интеграция - WEB-интеграция

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

Что такое Metadata.js?

  • Движок ссылочной типизации для браузера и nodejs
  • Библиотека для разработки бизнес-ориентированных и учетных offline-first браузерных приложений

Если коротко, то метадата предоставляет веб-программисту высокоуровневые объекты данных, аналогичные тем, которыми пользуются программисты 1С (перечисления, справочники, документы, регистры и т.д.)

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

Еще, metadata.js можно рассматривать, как "БСП для веб", предлагающую готовые решения для:

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

Если у кого-то возник вопрос «а не очередной ли это велосипед», вынужден возразить: я достаточно ленивый человек, чтобы повторять функциональность, реализованную другими. Если бы нужную математику можно было купить, сделал бы это без долгих размышлений – это всегда дешевле и быстрее. Я старался не дублировать работу, проделанную уважаемым javascript-сообществом и по возможности использовать стандартные библиотеки. Вот список основных зависимостей:

Серверная часть

  • couchDB, NoSQL база данных с поддержкой master-master репликации
  • nginx, высокопроизводительный HTTP-сервер

Управление данными в памяти браузера

  • metadata.js, движок ссылочной типизации для браузера и Node.js
  • pouchDB, клиентская NoSQL база данных с поддержкой автономной работы и репликации с CouchDB
  • alaSQL, SQL-интерфейс к массивам javascript в памяти браузера и Node.js
  • aes, библиотека шифрования/дешифрования строк
  • xlsx, библиотека для чтения и записи XLSX / XLSM / XLSB / XLS / ODS в браузере

UI библиотеки и компоненты интерфейса

  • dhtmlx, кроссбраузерная библиотека javascript для построения современных веб и мобильных приложений
  • handsontable, компонент для отображения и редактирования табличных данных
  • daterangepicker, компонент визуализации и редактирования диапазона дат
  • filesaver.js, HTML5 реализация метода saveAs
  • moment.js, библиотека форматирования интервалов и дат
  • numbro, библиотека форматирования чисел
  • rubles.js, библиотека форматирования чисел - сумма прописью

Зачем это нужно и что даёт?

  • Масштабируемость и надёжность. Сервер средней мощности может обслуживать тысячи клиентов и эти клиенты сохранят работоспособность при перебоях связи
  • Неограниченная свобода в дизайне отзывчивого интерфейса
  • Новое качество веб-приложений, сочетающее мощь бизнес-объектов 1С с эффективностью и открытостью веб-технологий

Предыстория

Список заказов

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

Графический редактор

Система должна рассчитать геометрию элементов, спецификацию, стоимость и отправить эту информацию в план завода.
Типичный оконный завод производит до 1000 изделий в день, сотрудничает с большим количеством дилеров (от 200 до 500).

Из задачи вытекали спецтребования:

  • Редактору геометрии требовалась интенсивная работа с данными в браузере в реальном времени – по каждому смещению мыши на сервер не набегаешься
  • Должно работать при плохой связи и в автономном режиме
  • Нужен гибкий отзывчивый интерфейс с поддержкой, в том числе, мобильных устройств
  • Нужно нулевое администрирование на клиентах
  • Хотелось сэкономить на лицензиях и серверном оборудовании

Имелся 1С-ный прототип для управления позаказным производством. В нём были подсистемы расчета спецификации, сложного ценообразования, диспетчеризации и учета - надстройка над 1С:КА 1.1. Повторить такой проект "в лоб", на языке программирования общего назначения - задача нереальная даже в теории. Решил разделить эту задачу на части:

  • Делаем платформу, которая позволит использовать структуру объектов и синтаксис ala-1С
  • Транслируем 1С-ный прототип в термины этой платформы
  • Бинго! Имеем дешевый функциональный отказоустойчивый сервис

Преемственность синтаксиса

Свойства и методы объектов metadata схожи, но не повторяют и не ограничиваются возможностями 1С.
Например, у нашей табличной части (TabularSection) есть метод НайтиСтроки (find_rows). Кроме стандартного поиска по равенству полей, добавлен синтаксический сахар:

// поиск в 1С
Результат = ТабЧасть.НайтиСтроки(Новый Структура("Поле1", Значение1));
// поиск, "как в 1С"
res = ts.find_rows({Поле1: Значение1});
// поиск на неравенство
res = ts.find_rows({Поле1: {not: Значение1}});
// поиск по списку значений
res = ts.find_rows({Поле1: {in: [Значение1, Значение2]}});
// логическое ИЛИ
res = ts.find_rows({or: [{Поле1: Поле1}, {Поле2: Поле2}]});
// поиск с произвольным условием
res = ts.find_rows({Поле1: function(v, key){if v[key] > 3 return true;}});
// поиск с условием SQL выполняется на клиенте, без обращения к серверу
res = alasql("select * from ? where `Поле1` > 3", ts._obj);

Сравнение производительности

В offline-режиме, приложение metadata подобно локальной файловой базе 1С. Оба движка работают в этом режиме весьма шустро.
При работе с длинными списками, в metadata чуть больше свободы:

  • Можно построить сложные, составные или фасетные индексы
  • Если позволяет железо, можно работать с таблицами в памяти
  • Можно наоборот, пожертвовать производительностью в пользу экономии памяти - всё зависит от задачи

Если metadata используется, как альтернативный лёгкий клиент к серверу 1С, получаем значительное ускорение даже на типовых конфигурациях. В эксперименте использованы:

  • Один и тот же сервер – физически он расположен в Германии
  • Она и та же информационная база
  • Один и тот же канал в интернет ping ~ 90ms
  • И даже документ мы один и тот же открываем

Наш, и 1С-ный клиенты находятся в абсолютно равных условиях.
Важно: перед замерами в 1С, несколько раз открываем и закрываем формы объектов и списков, чтобы прогреть кеш 1С-ного сервера.
Итак, время открытия типового заказа покупателя в веб-клиенте 1С занимает примерно 2.5 секунды.

В metadata та же операция выполняется за 400 мс.

Теперь посмотрим сетевой трафик. В metadata json прочитанного заказа занимает порядка 7 Кб.

В 1С, только передача пакета отъела 700 мс, и этот пакет занимает 180 Кб.

Таблица объединяет данные результаты измерений:

Операция Metadata Веб клиент 1С Выигрыш
времени, раз
Выигрыш
трафика, раз
Мин. время реакции сервера 150мс 150мс - -
Загрузка и вход в программу 4сек/4Mb 20сек/6Mb 5 1,5
Открытие формы "Заказа" 400mc/8Kb 2200mc/180Kb 5 20
Открытие формы выбора справочника 300мс/0Kb 600мс/10Kb 2 >>
Поиск в динсписке кешируемых объектов 200мс/0Kb 300мс/10Kb 1,5 >>
Поиск в динсписке с обращением к серверу 300мс/10Kb 300мс/10Kb - -

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

Я не критикую платформу 1С. Технологии веб-клиента 1С и легкого клиента отличаются очень сильно.
Наш лёгкий клиент не предназначен для замены традиционного веб-клиента в тех задачах, с которыми платформа 1С справляется хорошо.
Конкурировать с 1С на её поле - глупо и бесперспективно. Зато, с metadata.js можно сделать бизнесу выгодное предложение в тех областях, куда 1С вообще не заглядывает. Появляется возможность добавить в дешевые веб-приложения такие функции, которые ранее были доступными только в тяжелых учетных системах.

Совмещаем сильные стороны 1С и современного web для решения бизнес-задач

Есть встречное движение:

  • 1С в глобальную сеть
  • Традиционный web – в область задач автоматизации бизнеса

Чтобы лучше понять это движение и интересы участников, рассмотрим наиболее сильные и слабые стороны 1С и веб-технологий:

  • Веб-технологии содержат фантастические по изяществу и выразительности инструменты, но, к сожалению, там нет необходимого для бизнес-задач уровня абстракции. Посмотрите на сайты платежных систем, заказа билетов на самолет, поезд, личные кабинеты операторов сотовой связи – функциональность скудная, так как в языке, на котором думают постановщик и разработчик, нет слов для описания решаемой задачи.
  • Платформа 1С - это очень мощный инструмент для построения учетных систем, но он сильно отстал от современного веб. Дело в том, что в 2008-2009 годах, когда проектировалась архитектура управляемого приложения,  Javascript был другим. В браузерах не было автономной работы, в языке отсутствовали инструменты для управления свойствами объектов. В результате тонкий и веб-клиент 1С умеют лишь показывать данные и принимать ввод пользователя. В конце нулевых годов, такому подходу, наверное альтернативы не было. Но сегодня, когда любой телефон содержит несколько вычислительных ядер и несколько гигабайт ОЗУ, использование только серверного рендеринга и отказ от данных на клиенте – это непозволительная роскошь.
  • В metadata.js
    • Задействованы возможности современных браузеров
    • Реализован уровень абстракции, доступный ранее только в платформе 1С
    • Часть вычислительной работы и хранение коротких списков - справочников и перечислений перенесена на клиента.
      Это позволило значительно улучшить производительность, снизить нагрузку на сервер, повысить скорость и качество разработки

Инструменты metadata.js могут украсить жизнь как разработчикам 1С, так и веб-программистам. Но и те, и другие пока не проявляют интереса к нашей математике.
Рассчитывают отсидеться на освоенных технологиях. Конкуренция пока небольшая, «пирога» всем хватает.

Есть устоявшиеся стереотипы:

  • Для работы браузера нужно подключение к Интернет
  • Настольная программа работает быстро, а браузерная - тормозит
  • 1С-ный синтаксис есть только внутри 1С
  • Система на 1000 пользователей - это очень дорого
  • Из браузера трудно достучаться до COM и USB портов и прочего внешнего оборудования
  • Автономное веб-приложение - это очень сложно

Metadata.js пытается эти стереотипы пошатнуть.

  • Браузер прекрасно работает offline
  • Нативному приложению, чтобы приблизиться к качеству веб-интерфейса, сначала нужно реализовать внутри себя браузер
  • Синтаксис, подобный 1С-ному, теперь доступен в javascript
  • Система на 1000 пользователей - это реально дешево
  • Из javascript легко управлять COM, USB и сетевыми устройствами
  • Автономное веб-приложение - это очень просто

Пользуйтесь и зарабатывайте на внедрениях.

*****************

Данная статья написана по итогам доклада, прочитанного на конференции INFOSTART EVENT 2015 CONNECTION 15-17 октября 2015 года.

Приглашаем вас на новую конференцию INFOSTART EVENT 2019 INCEPTION.

См. также

Интеграция Альфа Авто 5 / Альфа Авто 6 и AUTOCRM / Инфотек

Сайты и интернет-магазины WEB-интеграция Платформа 1С v8.3 Конфигурации 1cv8 1С:Управление торговлей 11 Автомобили, автосервисы Россия Управленческий учет Платные (руб)

Интеграционный модуль обмена между конфигурацией Альфа Авто 5 и Альфа Авто 6 и порталом AUTOCRM. Данный модуль универсален. Позволяет работать с несколькими обменами AUTOCRM разных брендов в одной информационной базе в ручном и автоматическом режиме.

36000 руб.

03.08.2020    15963    13    18    

13

Интеграция 1С — Битрикс24. Обмен задачами

Сайты и интернет-магазины Интеграция WEB-интеграция Платформа 1С v8.3 Конфигурации 1cv8 Управленческий учет Платные (руб)

Интеграция 1С и Битрикс24. Разработка имеет двухстороннюю синхронизацию 1С и Битрикс24 задачами. Решение позволяет создавать пользователя в 1С из Битрикс24 и наоборот. Данная разработка технически подходит под все основные конфигурации линейки продуктов 1С:Предприятие 8.3 (8.3.18.1289). При приобретении предоставляется 1 месяц бесплатных обновлений разработки. Доступна демо-версия продукта с подключением Вашего Битрикс24

5040 руб.

04.05.2021    17950    9    15    

12

SALE! 10%

Автоматическая загрузка файлов (например, прайс-листов) из электронной почты, FTP, HTTP, их обработка и выгрузка на FTP (на сайт) и для других целей

Прайсы WEB-интеграция Ценообразование, анализ цен Файловый обмен (TXT, XML, DBF), FTP Автомобили, автосервисы Оптовая торговля, дистрибуция, логистика Управленческий учет Платные (руб)

Программа с заданным интервалом времени (или по ручной команде) скачивает файлы (например, прайс-листы поставщиков) из различных источников: письма электронной почты, FTP или HTTP-адреса, и сохраняет их в каталог упорядоченной структуры. При этом извлекает файлы из архивов, может переименовывать файлы и менять их формат (csv, xls, txt). Можно настроить выгрузку обработанных файлов на сайт (через FTP-подключение). Программа будет полезна компаниям, у которых есть большое количество поставщиков и/или прайс-листы поставщиков обновляются часто (необязательно прайс-листы, файлы могут быть любого назначения). Собранные таким образом актуальные версии прайс-листов можно выгрузить с помощью программы себе на сайт (или на любой FTP-сервер) или выполнить другие необходимые задачи.

28000 25200 руб.

28.05.2015    84935    26    51    

50

Заполнение по ИНН или наименованию реквизитов контрагента по данным сайта ФНС

Обмен с ГосИС WEB-интеграция Платформа 1С v8.3 Управляемые формы 1С:Комплексная автоматизация 1.х 1С:Бухгалтерия 2.0 1С:Управление торговлей 10 1С:Управление производственным предприятием 1С:Управление нашей фирмой 1.6 1С:Бухгалтерия государственного учреждения 1С:Документооборот 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Платные (руб)

Обработка является альтернативой механизму, разработанному фирмой 1С и заполняющему реквизиты контрагента по ИНН или наименованию. Не требуется действующей подписки ИТС. Вызывается как внешняя дополнительная обработка, т.е. используется, непосредственно, из карточки контрагента. Заполнение по ИНН или наименованию реквизитов контрагента по данным сайта ФНС (egrul.nalog.ru) для БП 2.0, БП 3.0, БГУ 1.0, БГУ 2.0, УТ 10.3, УТ 11.x, КА 1.1, КА 2.x, УПП 1.x, ERP 2.x, УНФ 1.5, УНФ 1.6, УНФ 3.0, ДО 2.1

2400 руб.

28.04.2016    89067    163    216    

319

[Расширение] БОР-Навигатор.Культура

Зарплата Бюджетный учет WEB-интеграция Обмен с ГосИС Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и кадры государственного учреждения 3 Государственные, бюджетные структуры Россия Бюджетный учет Платные (руб)

Расширение конфигурации, включающее в себя объекты, необходимые для подготовки и сдачи отчета "Штатная численность" системы "БОР-Навигатор.Культура" в программе "1С:Зарплата и кадры государственного учреждения", редакция 3.1.

8400 руб.

01.02.2019    25898    9    0    

7
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
100. remai 06.02.19 18:26 Сейчас в теме
Возможно ли встроить metadata.js в готовый проект YII2, чтобы перебрасывать часть данных в бд на сайте и обратно в 1С?
101. unpete 575 06.02.19 19:28 Сейчас в теме
(100) можно, наверное, но это извращение будет. Метадата задумана для задач, где 1с не справляется, а у вас к бд 1с похоже, претензий нет.
102. JetBrain 78 06.06.22 20:51 Сейчас в теме
добрый день. как вы смотрите на то, чтобы реализовать такой функционал на стороне сервера gRPC-web, со стороны 1С в этом случае ни какого кода и все выносится в JavaScript.
103. unpete 575 07.06.22 06:00 Сейчас в теме
(102) metadata поставляет объекты, похожие на документы и справочники 1с. Не более.
Платформа 1с может работать клиентом к нашей шине данных, но есть немало проектов на метадате, где 1с вообще не используется.
104. JetBrain 78 07.06.22 06:32 Сейчас в теме
(103) ну да, хотелось бы универсальное решение без привязки к 1с, в целом видится перспектива конструктора аналогичного 1С 8 на drag-and-drop и nocode (но с возможность отредактировать код), чтобы облегчить построение веб-форм. gRPC в данном примере заменяет nginx и дает возможность межсервисной связи любых приложений.
Оставьте свое сообщение